jinja2 沙箱 bypass

admin 2024年4月22日07:41:55评论51 views字数 581阅读1分56秒阅读模式

最近挖不出洞,正好和别的师傅聊到这个,水一篇。考虑一个比较小众、但可能遇到的场景: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.pyimport osimport platformimport sys

我也遇到过间接导入的情况,稍微变形下 poc 就行,大概类似下面这种情况

"x" -> x# x.pyimport ...import c...# c.pyimport ...import os...

思路和 blackhat 2020 的议题 《Room for Escape: Scribbling Outside the Lines of Template Security》一样,那次只讲了 java 和 .net,也算是殊途同归。

原文始发于微信公众号(Moonlight Bug Hunter):jinja2 沙箱 bypass

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年4月22日07:41:55
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   jinja2 沙箱 bypasshttps://cn-sec.com/archives/2575240.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息