Nginx越界讀取緩存漏洞(CVE-2017-7529)
Path nginx/CVE-2017-7529
漏洞原理
參考閱讀:
- https://cert.#/detailnews.html?id=b879782fbad4a7f773b6c18490d67ac7
- http://galaxylab.org/cve-2017-7529-nginx%E6%95%B4%E6%95%B0%E6%BA%A2%E5%87%BA%E6%BC%8F%E6%B4%9E%E5%88%86%E6%9E%90/
Nginx在反向代理站點的時候,通常會將一些文件進行緩存,特別是靜態文件。緩存的部分存儲在文件中,每個緩存文件包括“文件頭”+“HTTP返回包頭”+“HTTP返回包體”。如果二次請求命中了該緩存文件,則Nginx會直接將該文件中的“HTTP返回包體”返回給用戶。
如果我的請求中包含Range頭,Nginx將會根據我指定的start和end位置,返回指定長度的內容。而如果我構造了兩個負的位置,如(-600, -9223372036854774591),將可能讀取到負位置的數據。如果這次請求又命中了緩存文件,則可能就可以讀取到緩存文件中位于“HTTP返回包體”前的“文件頭”、“HTTP返回包頭”等內容。
復現漏洞
運行測試環境:
docker-compose up -d
訪問http://your-ip:8080/,即可查看到Nginx默認頁面,這個頁面實際上是反向代理的8081端口的內容。
調用python3 poc.py http://your-ip:8080/,讀取返回結果:

可見,越界讀取到了位于“HTTP返回包體”前的“文件頭”、“HTTP返回包頭”等內容。
如果讀取有誤,請調整poc.py中的偏移地址(605)。
Vulhub 文檔
推薦文章: