群里的表哥@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函数中两次被调用。
分析GenericBrowser这个函数,发现BROWSER中的变量值通过拼接,进入了subprocess.Popen()这个函数。
subprocess.Popen()函数应该就是问题出现的地方。
最后构造POC
import webbrowser
if __name__ == '__main__':
webbrowser.open(",")
验证结果: