CVE-2024-1561 是一个影响 Gradio 4.13.0 之前版本的任意文件读取漏洞。Gradio 是一个流行的 Python 框架,用于快速为机器学习模型和 AI 应用构建 Web 界面。
该漏洞的成因在于 /component_server 端点未能正确限制内部 Component 类中可被调用的方法。攻击者可以利用这一行为来调用那些本不应通过 HTTP 暴露的方法。
其中一种方法 move_resource_to_block_cache 允许将本地文件系统中的文件复制到 Gradio 的临时缓存目录中。文件一旦被复制,便可通过 /file 端点访问,从而使攻击者能够获取其内容。
尽管该漏洞不能直接实现远程代码执行,但它可能暴露服务器上的敏感文件,并可用于收集凭据、配置文件、API 密钥、令牌或其他有助于进一步攻击的信息。
4.13.0 及更高版本已包含必要的安全检查,可防止任意方法调用。
该问题源于 /component_server 端点内的验证不足。
Gradio 没有将请求限制在安全的可调用函数列表中,而是允许攻击者指定组件实例上任意的方法名称。
由于内部方法:
move_resource_to_block_cache()
接受文件系统路径作为输入,攻击者可以指示应用缓存服务器上任何可读的文件。
一旦被缓存,该文件就会通过 Gradio 正常的文件服务功能被暴露。
一次成功的攻击通常包含以下步骤:
/config 端点。/component_server 发送请求。move_resource_to_block_cache 方法。/etc/passwd)。/file 端点下载缓存的文件。该过程可使 Gradio 进程可读取的任意文件被远程获取。
POST /component_server HTTP/1.1
Host: target
Content-Type: application/json
{
"component_id": "3",
"data": "/etc/passwd",
"fn_name": "move_resource_to_block_cache",
"session_hash": "aaaaaaaaaaa"
}
如果成功,Gradio 会返回缓存文件的位置。
攻击者随后可以请求:
GET /file=/tmp/gradio/<cached-file>/passwd HTTP/1.1
Host: target
来获取文件内容。
成功利用该漏洞可能允许攻击者读取敏感文件,包括:
/etc/passwd.env)具体影响取决于 Gradio 应用所拥有的权限。
要修复此漏洞,请采取以下措施:
本仓库仅用于教育目的、安全研究和经授权的渗透测试。在测试你不拥有或未经授权评估的系统之前,请务必获得明确的许可。