长亭百川云 - 文章详情

jinja2 沙箱 bypass

Moonlight Bug Hunter

50

2024-07-13

最近挖不出洞,正好和别的师傅聊到这个,水一篇。考虑一个比较小众、但可能遇到的场景:jinja2 模板可控,上了沙箱 SandboxedEnvironment,怎么快速判断有没有搞头?

两个真实的漏洞 case 是 CVE-2020-13948 和过期的 airflow rce,后者的 poc 我在下岗倒计时:gpt4 当面卷我实录的 test4 里给出来了,所以上面问题的答案也就呼之欲出:在 jinja2 上下文变量数组里找一个同时满足下面两个要求的变量

  1. 变量是 py module

  2. 它的 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,也算是殊途同归。

相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2