Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
dirtyfrag-arm64 — arm64/aarch64 移植版本的 V4bel/dirtyfrag (CVE-2026-43284)。仅限 ESP - 由于 flush_dcache_page,arm64 上的 rxrpc 路径导致内核崩溃。 | Kitploit
工具/GitHubGitHub/linnemanlabs/dirtyfrag-arm64
权限提升漏洞分析漏洞利用渗透测试论文与研究学习与教育红队二进制利用
GitHublinnemanlabs/dirtyfrag-arm64

dirtyfrag-arm64

arm64/aarch64 移植版本的 V4bel/dirtyfrag (CVE-2026-43284)。仅限 ESP - 由于 flush_dcache_page,arm64 上的 rxrpc 路径导致内核崩溃。

查看仓库
28823个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

dirtyfrag-arm64

V4bel/dirtyfrag(CVE-2026-43284、CVE-2026-43500)的 arm64/aarch64 移植版本。

已在 Ubuntu 24.04.4 LTS 上使用 linux-aws 6.17.0-1013-aws(截至撰写本文时可用的最新版本)在 AWS Graviton 上测试通过。

包含 AppArmor 绕过分析、加固说明和检测说明的完整文章: linnemanlabs.com/posts/porting-dirtyfrag-arm64

⚠️ Ubuntu AppArmor 用户命名空间限制并不能可靠地阻止此漏洞利用

Ubuntu 有两个 AppArmor sysctl:

  • kernel.apparmor_restrict_unprivileged_userns
  • kernel.apparmor_restrict_unprivileged_unconfined

两者都可以通过使用我测试的标准 Ubuntu 云和安装程序镜像上存在的配置文件,将 aa-exec 与自身链式调用来绕过:

root@kitploit:~
aa-exec -p crun -- aa-exec -p crun -- ./dirtyfrag_arm64 --force-esp

更多信息请参阅 Two Hops and a Shell,了解 Ubuntu AppArmor 绕过的完整分析。

arm64 上的不同之处

上游的 x86_64 PoC 使用了两种漏洞利用路径:一种是通过 ESP/xfrm 路径破坏 /usr/bin/su,另一种是通过 rxrpc/rxkad 回退路径破坏 /etc/passwd。在 arm64 上,rxrpc 路径会导致内核 oops 而无法使用。ESP 路径可以正常工作。

rxrpc 崩溃:flush_dcache_page

在 x86_64 上,flush_dcache_page() 是一个空操作(no-op)。x86 具有硬件一致性数据和指令缓存。在 arm64 上,它会执行实际的 dcache 维护并解引用 struct page* 元数据。当 rxrpc 加密路径(rxkad_secure_packet -> crypto_pcbc_encrypt -> skcipher_walk_done)在通过 splice/vmsplice 链操纵了引用的页面上调用 flush_dcache_page 时,x86_64 会静默跳过,但 arm64 会触发转换错误并导致 oops:

root@kitploit:~
pc : flush_dcache_page+0x18/0x58
lr : skcipher_walk_done+0xbc/0x260
     crypto_pcbc_encrypt+0xe8/0x1c8 [pcbc]
     crypto_skcipher_encrypt+0x48/0xb8
     rxkad_secure_packet+0x108/0x270 [rxrpc]
     rxrpc_send_data+0x264/0x550 [rxrpc]

在我测试的 arm64 系统上,拒绝 uid_map 写入会移除有效的 ESP 路径。命名空间可能仍然可以创建,但进程无法将自己映射为其中的 root 用户,也无法获得设置 XFRM 所需的命名空间能力。rxrpc 回退路径在 arm64 上未提供有效的无需命名空间的权限提升路径,反而会导致内核 oops。

仅 ESP 操作

在我的测试中,arm64 上只有 ESP 路径可行。该路径需要创建一个用户命名空间和一个网络命名空间,然后将调用用户成功映射为该命名空间内的 root 用户。发行版加固可以通过不同方式破坏该路径:Ubuntu 可以通过 AppArmor 用户命名空间限制来拒绝 uid_map 写入,我尚未在 Debian/RHEL 上测试。

AppArmor:默认情况下被阻止,但在 Ubuntu 上可绕过

在我测试的 Ubuntu 24.04 AWS 镜像上,apparmor_restrict_unprivileged_userns=1 通过拒绝新命名空间内的 uid_map 写入,阻止了从我的普通 SSH shell 直接进行漏洞利用。

然而,在默认的 apparmor_restrict_unprivileged_unconfined=0 下,无限制用户可以通过 aa-exec 转换到现有的 complain 模式配置文件(例如 runc)并绕过限制:

root@kitploit:~
aa-exec -p runc -- ./dirtyfrag_arm64 --force-esp

设置 kernel.apparmor_restrict_unprivileged_unconfined=1 会阻止此路径,目前被广泛推荐作为阻止所有路径的解决方案。但是,添加另一个 aa-exec 也可以绕过该设置:

root@kitploit:~
aa-exec -p crun -- aa-exec -p crun -- ./dirtyfrag_arm64 --force-esp

详情请参阅前面链接的文章。

架构特定的有效载荷

该漏洞利用会使用一个最小的静态 ELF 覆盖页缓存中的 /usr/bin/su。上游 PoC 嵌入了一个带有 x86_64 shellcode 的 x86_64 ELF。此移植版本将其替换为等效的 aarch64 ELF:

  • ELF e_machine:EM_AARCH64 (183) 而非 EM_X86_64 (62)
  • Shellcode:使用 svc #0 的 aarch64 指令,而非 syscall
  • 系统调用号:setgid=144, setuid=146, setgroups=159, execve=221(x86_64 上分别为 106, 105, 116, 59)
  • 固定的 4 字节指令宽度(相对于 x86_64 的可变长度),导致有效载荷略大(约 216 字节,x86_64 为 192 字节)

构建与运行

root@kitploit:~
# 克隆
git clone https://github.com/linnemanlabs/dirtyfrag-arm64.git

# 构建
cd dirtyfrag-arm64
gcc -O0 -Wall -o dirtyfrag_arm64 dirtyfrag_arm64.c -lutil

# 运行
./dirtyfrag_arm64 --force-esp

--force-esp 标志完全跳过 rxrpc 路径,以确保避免 arm64 内核 oops。

测试环境

截至 2026-05-09,最新可用的 Ubuntu 24.04 AWS 内核(6.17.0-1013-aws,构建于 4 月 24 日)未包含任何针对 Copy Fail(CVE-2026-31431,4 月 29 日披露)或 Dirty Frag(CVE-2026-43284/43500,5 月 7 日披露)的补丁。

立即缓解措施

将受影响模块加入黑名单,为你使用的发行版应用适当的系统加固。

将受影响模块加入黑名单

对于未主动使用 IPsec 传输模式或 AFS 的系统是安全的。要阻止加载这些模块,请将以下内容放入 /etc/modprobe.d/dirtyfrag.conf:

root@kitploit:~
install esp4 /bin/false
install esp6 /bin/false
install rxrpc /bin/false

更新 initramfs

Ubuntu 还建议重新生成 initramfs,以便黑名单在早期启动期间生效:

root@kitploit:~
update-initramfs -u -k all

移除 SUID 二进制文件的读取权限

这可以阻止此类基于 splice 的页缓存攻击针对这些 SUID 二进制目标。漏洞利用需要读取目标文件的权限才能使用 splice()。用户仍然可以执行这些二进制文件。

请勿在不经测试的情况下在你的环境及所有工具中实施此操作。

root@kitploit:~
chmod o-r /usr/bin/su

这不是修复,仅是一种缓解措施。权限提升的路径还有很多。

卸载模块

要从正在运行的系统卸载这些模块:

root@kitploit:~
rmmod esp4 esp6 ipcomp4 ipcomp6 rxrpc 2>/dev/null

确保它们已卸载:

root@kitploit:~
grep -qE '^(esp4|esp6|rxrpc) ' /proc/modules \
  && echo "受影响模块已加载" \
  || echo "受影响模块未加载"

刷新页缓存

刷新页缓存应移除恶意内容,并导致文件从磁盘重新读取。

root@kitploit:~
echo 3 > /proc/sys/vm/drop_caches

注意:我测试此方法时结果有些不一致,但越多次尝试它越能按预期工作。对于此 PoC,你可以检查 /usr/bin/su 的 md5sum,如果不匹配,请重启。

测试后清理

执行刷新页缓存步骤,然后通过以下命令验证:

root@kitploit:~
sha256sum /usr/bin/su

# 或通过包管理器:

dpkg -V util-linux    # Debian/Ubuntu
rpm -V util-linux     # RHEL/Amazon Linux

主动措施

要采取更主动的立场来处理整个漏洞类别(而不仅仅是特定的 CVE),请参阅完整文章,了解 AppArmor 用户命名空间限制、模块预加载预防以及基于 Tetragon 的运行时检测和 YARA 规则。

致谢

  • Hyunwoo Kim (@v4bel) - 原始漏洞研究、披露和 x86_64 PoC
  • SiCk - 关于 Ubuntu AppArmor 绕过的绕过-pwn 研究
  • Keith Linneman / LinnemanLabs - arm64 移植、flush_dcache_page 崩溃分析、AppArmor 研究、检测说明

法律声明

此工具仅用于授权的安全测试和研究。

未经授权对你不拥有或未经明确许可的系统进行使用是非法且不道德的。

许可证

MIT。复制、窃取、修改、学习、分享你的改进给我。或者不。这是代码,你想怎么用都行。

下载工具
属性值
实例AWS t4g.micro (Graviton2)
操作系统Ubuntu 24.04.4 LTS
内核6.17.0-1013-aws #13~24.04.1-Ubuntu (构建于 2026-04-24)
架构aarch64
unprivileged_userns_clone1 (已启用)
esp4 模块可用,可加载
rxrpc 模块可用,可加载(但在 arm64 上崩溃)
配置标准 Ubuntu 24.04 云镜像,默认内核模块