Ruby570bocadito/CVE-ubuntu-server-24.04
GitHub: Ruby570bocadito/CVE-ubuntu-server-24.04
这是一个针对Ubuntu Server 24.04 LTS apport组件的零日漏洞利用工具,用于演示元数据欺骗攻击。
Stars: 0 | Forks: 0
# CVE-2026-XXXX:Apport 可执行路径欺骗
Ubuntu 24.04 LTS apport 2.28.1 中的**完整性/元数据缺陷**
## 描述
Apport 信任崩溃进程(`ProcCmdline`)的 `argv[1]` 来
覆盖报告中的 `ExecutablePath`,而未验证该文件是否对应于实际崩溃的进程。
**文件:** `/usr/lib/python3/dist-packages/apport/report.py:626-633`
```
if os.access(cmdargs[1], os.R_OK):
self["InterpreterPath"] = self["ExecutablePath"]
self["ExecutablePath"] = os.path.realpath(cmdargs[1])
```
唯一的检查是 `os.access(path, os.R_OK)` — 可读性,而非
真实性。本地攻击者可以将 bash 的崩溃归因于系统上的任何可读文件。
## 分类
| 类型 | ID |
|------|----|
| **CWE** | CWE-20 (输入验证不当) / CWE-345 (验证不足) |
| **CVSS v3.1** | 5.5 (AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:L) |
| **类别** | 元数据完整性缺陷,**非**权限提升 |
## 实际影响
| 能做到什么 | 做不到什么 |
|----------------|-------------------|
| 在崩溃报告和日志中伪造归因 | 权限提升 (LPE) |
| 将 bash 的核心转储归因于 passwd/sudo | 远程代码执行 (RCE) |
| 污染遥测数据 (Launchpad) | 向 `/var/crash/` 之外写入 |
| `/var/crash/` 中的局部拒绝服务 | 以 root 身份执行钩子 |
**为何不是关键漏洞:**
1. `drop_privileges(real_user)` 在解析前执行
(apport 第 1077 行 → 1080 行)
2. `add_proc_info()` 和 `_check_interpreted()` 以崩溃用户的身份运行,而非 root
3. `add_package_info()` 也以降低的权限运行
4. 报告文件名使用 `.replace("/", "_")`,防止路径遍历
5. 对于普通进程,`report_owner` 是用户(dump_mode 1)
## 利用向量
```
LD_PRELOAD=.so /usr/bin/bash /usr/bin/passwd
→ bash crash (SIGILL/SIGSEGV)
→ apport procesa
→ _check_interpreted() ve que "bash" es intérprete
→ ExecutablePath = argv[1] = /usr/bin/passwd
→ reporte creado en /var/crash/_usr_bin_passwd.{uid}.crash
```
### 要求
- Apport 处于活动状态 (`systemctl is-active apport.service`)
- `ulimit -c unlimited`
- 非特权用户的 shell
## 漏洞利用用法
```
ulimit -c unlimited
python3 exploit_apport.py # target: /usr/bin/passwd
python3 exploit_apport.py /usr/bin/su # target personalizado
```
### 输出
```
[+] Reporte: ExecutablePath: /usr/bin/passwd ← FALSIFICADO
[+] Reporte: InterpreterPath: /usr/bin/bash ← REAL
```
### 验证
```
cat /var/log/apport.log | grep "script:\|executable:"
grep ExecutablePath /var/crash/*.crash
```
## 相关文件
| 文件 | 描述 |
|---------|-------------|
| `exploit_apport.py` | 完整的漏洞利用脚本(Python,无需 gcc 生成 .so) |
| `.libexploit.so` | 崩溃的 .so 文件(344B ELF64) |
| `poc_apport_override.py` | 基础的纯 Python 概念验证 |
| `pwn_apport.c` | 替代的 C 语言源码(需要 gcc) |
| `CVE-REQUEST-*.md` | 提交给 MITRE 的正式报告 |
| `*.crash` | 已验证的崩溃报告 |
## 次要发现
| ID | 描述 | 行号 |
|----|-------------|-------|
| H1 | `parse_arguments` 中的路径遍历:在过滤 `../` 之前执行 `replace("!", "/")` | `apport:750-757` |
| H3 | `likely_packaged()` 对 `/var/tmp/` 的误报 | `fileutils.py:136-158` |
| T1 | `_check_interpreted` 中 `os.access()` 和 `os.path.realpath()` 之间的 TOCTOU 竞争 | `report.py:631-633` |
# 综合审计 — Ubuntu Server 24.04.4 权限提升研究
## 系统信息
- **操作系统:** Ubuntu Server 24.04.4 LTS
- **内核:** 6.8.0-117-generic (构建于 2026 年 5 月 5 日星期二 19:26:24 UTC,自定义配置)
- **用户:** `rafa` (uid 1000),通过密码使用 sudo
- **SSH:** 暴露在 0.0.0.0:22,公网 IP 99.134.0.2,X11Forwarding 是,无防火墙
- **硬件:** 1 vCPU,1.3GB 内存,40GB 磁盘,Hyper-V 虚拟机
## 已调查的攻击面
| 攻击面 | 状态 | 详情 |
|---------|--------|--------|
| **Apport 漏洞 (CWE-345)** | ✅ 已确认 | 元数据欺骗,非 LPE — 见上文 |
| **Snap-confine (cap_sys_admin)** | ⚠️ 发现竞争条件 | `setup_private_tmp` 中的 TOCTOU(已有记录),`/tmp/.snap` 仿冒(无 root 目录则不可利用)— CVE-2026-3888 已修补 |
| **Polkit/D-Bus** | ⚠️ 部分 | udisks2 `filesystem-mount allow_active=yes`(仅限系统设备),无 polkit 代理 → 交互式认证失败 |
| **LXD socket** | ❌ 不可访问 | 用户不在 `lxd` 组 |
| **algif_aead (复制失败)** | ❌ 已列入黑名单 | `/etc/modprobe.d/disable-algif_aead.conf` 明确阻止 |
| **BPF** | ❌ 已锁定 | `unprivileged_bpf_disabled=2`,在用户命名空间内不可用 |
| **nf_tables** | ❌ 用户命名空间内 EPERM | 内核检查 init_user_ns |
| **io_uring** | 🔒 未发现崩溃 | 测试了全部 45 个操作码、寄存器操作、压力测试 — 无 panic |
| **userfaultfd** | 🔒 未发现崩溃 | 在拥有 CAP_SYS_PTRACE 的用户命名空间中工作,未触发 UAF |
| **SSH ssh-keysign (SUID)** | ❌ 未发现漏洞 | 标准 OpenSSH 9.6p1 |
| **内核模糊测试 (5 分钟加权)** | 🔒 零崩溃 | 4 个线程:io_uring + uffd + fs + sockets,均在用户命名空间内 |
## 关键内核配置差异(与原生 Ubuntu 相比)
| 设置 | 自定义配置 | 原生配置 | 影响 |
|---------|--------|-------|--------|
| `CONFIG_DEBUG_FS_ALLOW_ALL` | `y` | `=NONE` | debugfs 可由任何用户挂载(但目录权限为 0700 root) |
| `CONFIG_SECURITY_APPARMOR_RESTRICT_USERNS` | 未设置 | `y` | 用户命名空间不受 AppArmor 限制 |
| `CONFIG_KASAN` | 未设置 | `y`(调试版) | 无内核地址消毒器(更易利用) |
## 创建的工具
| 文件 | 描述 |
|------|-------------|
| `exploit_harness.c` | 15 项测试的内核接口套件(全部通过) |
| `stress_race.c` | 8 线程竞争条件压力测试(50k 次迭代,0 崩溃) |
| `uffd_race_poc.c` | Userfaultfd + io_uring/memfd/madvise 竞争 PoC(0 崩溃) |
| `syz_runner.c` | 加权内核模糊器(在用户命名空间内运行 4 个目标线程) |
| `syzkaller/` | 从源码构建于 `/tmp/syzkaller/bin/` |
## syzkaller 设置
已从源码构建完毕,可用于虚拟机模糊测试:
- `/tmp/syzkaller/bin/syz-manager`
- `/tmp/syzkaller/bin/linux_amd64/syz-execprog`
- `/tmp/syzkaller/bin/linux_amd64/syz-executor`
- 内核源码位于 `/usr/src/linux-source-6.8.0/`(需要重建启用 KASAN 的内核以进行有效模糊测试)
## 已知的现有 CVE(非新的零日漏洞)
- **Dirty Frag**(2026 年 5 月 7 日披露):构建于 5 月 5 日的内核早于补丁
- **CVE-2026-31431 (Copy Fail)**:algif_aead 模块已列入黑名单作为缓解措施
- **CVE-2026-3888 (snap-confine)**:Snapd 2.74.1 已修补
## 参考资料
- [CWE-20](https://cwe.mitre.org/data/definitions/20.html)
- [CWE-345](https://cwe.mitre.org/data/definitions/345.html)
- [CVE-2019-15790](https://nvd.nist.gov/vuln/detail/CVE-2019-15790)
- [CVE-2020-11935](https://nvd.nist.gov/vuln/detail/CVE-2020-11935)
标签:Apport漏洞, CVE-2026-XXXX, DNS 解析, Python, Ubuntu服务器漏洞, 元数据欺骗, 威胁模拟, 安全漏洞, 客户端加密, 崩溃报告, 无后门, 服务器监控, 本地攻击, 网络安全, 路径欺骗, 软件漏洞, 输入验证缺陷, 进程伪装, 逆向工具, 隐私保护, 零日漏洞