1. 核心机制
-
写时复制(COW)缺陷:内核在处理只读内存页写入时,因竞争条件导致未正确创建新副本,直接修改原始文件。
-
提权逻辑:通过修改
/etc/passwd等关键文件,注入高权限用户或篡改现有用户权限。
2. 影响范围
-
内核版本:2.6.22 ~ 4.8.3(2016 年 10 月 18 日修复)。
-
环境要求:需手动更换受影响内核,新内核(>4.8.3)已修复。
二、复现环境搭建
1. 更换受影响内核
1 | # 安装旧内核 |
2. 安装编译依赖
1 | sudo apt-get install build-essential gcc g++ make git |
三、漏洞利用步骤
1. 获取与编译 POC
1 | # 克隆 POC 仓库(以 gbonacini 版为例) |
2. 备份关键文件(必做!)
1 | sudo cp /etc/passwd /etc/passwd.bak |
3. 运行 POC 并提权
1 | # 普通用户执行(非 root) |
4. 动态检查提权结果
1 | # 查看 /etc/passwd 变更 |
5. 系统恢复
1 | sudo cp /etc/passwd.bak /etc/passwd |
四、关键注意事项
-
POC 逻辑差异
-
不同 POC 可能篡改不同用户(如
daemon、syslog),必须通过cat /etc/passwd确认实际用户名。 -
若运行失败,多次尝试(漏洞依赖线程竞争,成功率非 100%)。
-
-
环境兼容性
-
确保使用 Ubuntu 16.04 或类似发行版,避免因系统差异导致失败。
-
编译时若报错,检查
g++版本是否兼容 C++11 标准。
-
-
法律与安全风险
-
仅限授权测试环境,禁止未授权使用。
-
测试后务必还原
/etc/passwd,避免权限混乱。
-
-
漏洞扩展
-
大脏牛漏洞(CVE-2017-1000405):原漏洞补丁缺陷,需关闭透明大页(THP)缓解。
-
五、修复建议(生产环境)
-
更新内核
-
升级至 4.8.3 以上版本,彻底修复漏洞。
-
-
临时防护
-
关闭透明大页:
echo never > /sys/kernel/mm/transparent_hugepage/enabled。
-
-
监控与审计
-
使用 Tripwire 等工具监控
/etc/passwd等关键文件变更。
-
