DirtyFrag蛰伏十年,非交互提权路径打通无TTY场景

admin 2026-06-30 08:36:32 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档披露dirtyfrag漏洞在无tty环境下的非交互提权技术,攻击者利用内核零拷贝路径覆写页缓存,通过管道替代伪终端实现在webshell、CI/CD等场景的root权限获取,并探讨了该技术在容器逃逸场景的应用前提与限制。 综合评分: 90 文章分类: 漏洞分析,内网渗透,容器逃逸


cover_image

Dirty Frag蛰伏十年,非交互提权路径打通无TTY场景

原创

xj xj

船山信安

2026年6月29日 12:20 广东

在小说阅读器读本章

去阅读

从2017年延续至今的主流内核版本中,Dirty Frag漏洞被公开后,低权限攻击者可利用内核的零拷贝优化路径,直接覆写理论上只读的页缓存Page Cache。只需几秒钟,/etc/passwd、SUID二进制文件就能被篡改,权限也随之提升至root。尽管这一攻击原语本身并不新鲜,但此次的突破在于,研究者将其从需要终端交互的场景,成功适配到无TTY环境中,无论是Webshell、CI/CD管道还是自动化脚本,都能顺利运行。

原始POC通过run_root_pty()创建伪终端PTY,将用户终端与su命令桥接,以交互式方式获取root shell。这种方式在有终端的环境中运行正常,但在Webshell或CI任务等无终端场景下,PTY创建会直接静默退出,导致无法获取任何结果。修改版的核心改进是新增了run_root_cmd()函数:它用管道替代伪终端,将命令写入su的标准输入stdin,并在末尾追加exit指令;父进程等待子进程执行完毕后,将标准输出stdout直接返回。

POC 关键片段如下

static int run_root_cmd(const char *cmd) { ... }

使用方式上向后兼容,./exp 不带参数走原有交互模式,./exp “id” 就进非交互路径。执行效果大致是

$ ./exp "id"
[+] ESP corruption succeeded
uid=0(root) gid=0(root) groups=0(root)

在容器逃逸场景中,这一变体的应用更具研究价值。由于宿主机的内核页缓存是全局共享的,在容器内触发页缓存写原语后,修改内容对宿主机同样可见,实际上,此时修改的并非容器内的文件副本,而是宿主机本身的缓存。结合SUID二进制文件覆写技术,理论上可从容器内部实现对宿主机的提权操作。

不过,这一操作需满足两个前提条件,一是内核版本需处于v5.18至v7.1-rc6区间,二是unshare系统调用未被Seccomp拦截。在Ubuntu系统中,还需绕过AppArmor限制,POC中已准备了aa-exec的trinity、chrome、flatpak等配置文件作为跳板,多数桌面环境中至少能找到一个可用的配置。


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:船山信安 xj xj《Dirty Frag蛰伏十年,非交互提权路径打通无TTY场景》

    评论:0   参与:  0