js2py
是一个知名的python包,它可以在python解释器中执行JS代码。其经常用在各类爬虫中,用于解析网页的JS代码。
js2py
的某个全局变量存在一个漏洞,攻击者可以使用这个漏洞在js代码中获得一个python对象的引用,使得攻击者可以逃逸js环境,在主机上执行任意命令。
用户一般会调用js2py.disable_pyimport()
阻止JS代码使用pyimport
调用python模块,从而防止代码沙盒逃逸。但是使用这个漏洞,攻击者可以绕过这个限制,在主机上执行任意代码。
攻击者可以在一个钓鱼网页上包含一个恶意的js代码文件,让爬虫爬取并解析;也可以通过HTTP请求将恶意代码发送给受害者解析。攻击者可以据此在受害者机器上执行任意python代码,从而执行任意shell指令,实现RCE.
- 影响的版本:
- 在python3下运行的js2py(<=0.74)
- 影响的代码:
- pyload/pyload
- VeNoMouS/cloudscraper (用js2py作为“js解析器”)
- dipu-bd/lightnovel-crawler
- 重现步骤:
- 安装python3(不含3.12以上版本),
js2py
仍不支持python3.12 - 运行
pip install js2py
安装js2py
并执行poc.py
,其会在主机上执行head -n 1 /etc/passwd; calc; gnome-calculator; kcalc;
- 如果漏洞存在则脚本会打印
Success! the vulnerability exists...
或者弹出计算器
- 安装python3(不含3.12以上版本),
官方修复暂时不存在,可以使用fix.py
中的代码动态patchjs2py
,也可以使用patch.txt手动修复原代码