本仓库记录了一个可复现的AI辅助漏洞重新发现实验,针对nginx的ngx_http_rewrite_module,该漏洞后来被关联为CVE-2026-42945。
该实验刻意缩小范围。易受攻击的文件src/http/ngx_http_script.c被直接提供给模型进行审计。这并非声称AI系统从头开始自主地在完整的nginx代码库中找到了该问题。
被审计的漏洞是一个由nginx重写处理中脚本引擎状态过时导致的堆缓冲区溢出。
在高层面上:
?的rewrite替换会设置e->is_args = 1。e->is_args在重写完成后未被清除。set、if或重写表达式如果复制了一个未命名的正则捕获(例如$1),可能会按照捕获将被原始复制的尺寸来分配目标缓冲区。e->is_args = 1并对捕获进行URI转义。本地的AddressSanitizer复现确认了以下位置的堆缓冲区溢出:
ngx_escape_uri
ngx_http_script_copy_capture_code
ngx_http_rewrite_handler
.
├── README.md
├── LICENSE
├── prompts/
│ ├── audit_prompt.md
│ └── poc_prompt.md
├── poc/
│ ├── trigger.py
│ ├── nginx.conf
│ ├── reproduce.sh
│ └── expected_output.txt
├── docs/
│ ├── technical-analysis.md
│ ├── vulnerability-breakdown.md
│ └── methodology.md
└── screenshots/
└── asan-crash.png
该PoC设计用于本地构建启用了AddressSanitizer的易受攻击nginx。它启动nginx在127.0.0.1:18080,向本地服务器发送精心构造的请求,并打印崩溃证据。
使用受影响的nginx源码树。该实验针对使用clang和ASan构建的nginx 1.30.0进行了验证:
./auto/configure \
--prefix=/tmp/nginx-asan-poc \
--with-cc-opt='-O0 -g -fsanitize=address -fno-omit-frame-pointer' \
--with-ld-opt='-fsanitize=address'
make -j"$(getconf _NPROCESSORS_ONLN 2>/dev/null || sysctl -n hw.ncpu)"
从本仓库中:
NGINX_BIN=/path/to/vulnerable/nginx/objs/nginx ./poc/reproduce.sh
如果本仓库直接放在用于验证的nginx源码检出目录内,该脚本也会自动找到../../objs/nginx。
成功的复现会打印类似以下的ASan报告:
ERROR: AddressSanitizer: heap-buffer-overflow
WRITE of size 1
#0 ngx_escape_uri ngx_string.c:1687
#1 ngx_http_script_copy_capture_code ngx_http_script.c:1399
#2 ngx_http_rewrite_handler ngx_http_rewrite_module.c:180

PoC使用的nginx配置故意保持简短:
location / {
rewrite ^(.*) /new?c=1;
set $myvar $1;
return 200 "$myvar\n";
}
第一个重写因为替换内容包含?而设置了e->is_args。后续的set在评估$1时,该过时状态仍然存在。
最小补丁在正则重写完成时重置脚本引擎的参数状态标志:
e->is_args = 0;
e->quote = 0;
在该实验使用的源码树中,该修复出现在提交:
524977e7c534e87e5b55739fa74601c9f1102686
Rewrite: fixed escaping and possible buffer overrun
关键点不在补丁的大小,而在于它恢复的状态不变性:长度阶段和写入阶段必须在是否将捕获作为URI参数进行复制上保持一致。
本实验使用了一个前沿的编码助手作为审计辅助。提示明确指导模型关注src/http/ngx_http_script.c中的内存安全问题,并特别注意两阶段长度/写入不匹配的漏洞。
重要限制:
确切的提示包含在 prompts/audit_prompt.md 和 prompts/poc_prompt.md 中。
本仓库旨在用于防御性研究、补丁验证和可复现性。仅在你控制的本机实验环境中运行PoC。
本仓库中的文档和PoC框架采用MIT许可证发布。nginx本身不包含在内,并受其自己的许可证约束。