最近挖不出洞,正好和别的师傅聊到这个,水一篇。考虑一个比较小众、但可能遇到的场景:jinja2 模板可控,上了沙箱 SandboxedEnvironment,怎么快速判断有没有搞头?
两个真实的漏洞 case 是 CVE-2020-13948 和过期的 airflow rce,后者的 poc 我在下岗倒计时:gpt4 当面卷我实录的 test4 里给出来了,所以上面问题的答案也就呼之欲出:在 jinja2 上下文变量数组里找一个同时满足下面两个要求的变量
-
变量是 py module
-
它的 import 链里有类似 os、subprocess 之类的东西
比如 test4 里用的 uuid 这个 module,它的 import 就比较直观,直接引入了 os
# uuid.py
import os
import platform
import sys
我也遇到过间接导入的情况,稍微变形下 poc 就行,大概类似下面这种情况
# "x" -> x
# x.py
import ...
import c
...
# c.py
import ...
import os
...
思路和 blackhat 2020 的议题 《Room for Escape: Scribbling Outside the Lines of Template Security》一样,那次只讲了 java 和 .net,也算是殊途同归。
原文始发于微信公众号(Moonlight Bug Hunter):jinja2 沙箱 bypass
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论