群里的表哥@Bearcat说python居然出了一个命令执行漏洞(CVE-2017-17522),吓得我赶紧来看看。

问题出现在Lib/webbrowser.py模块中,可导致命令执行。

根据CVE官方描述:

Lib/webbrowser.py in Python through 3.6.3 does not validate strings before launching the program specified by the BROWSER environment variable, which might allow remote attackers to conduct argument-injection attacks via a crafted URL.

我们知道了是BROWSER这个环境变量出了问题。

在webbrowser.py模块中找到BROWSER这个环境变量,发现其所含变量在register函数中两次被调用。

图片.png

分析GenericBrowser这个函数,发现BROWSER中的变量值通过拼接,进入了subprocess.Popen()这个函数。

subprocess.Popen()函数应该就是问题出现的地方。

图片.png

最后构造POC

import webbrowser


if __name__ == '__main__':
webbrowser.open(",")

验证结果:

`L8E7`$]9JU$1J[5UF{}D7Q.png