FreeMarker 沙箱逃逸新姿势:暴露对象 × Aviator 表达式(JeecgBoot RCE)

FreeMarker 沙箱逃逸新姿势:暴露对象 × Aviator 表达式(JeecgBoot RCE)

一句话:在 ?new 被 SAFER_RESOLVER、?api 未开启、内置对象全被拦的"净化"
FreeMarker SSTI 环境里,作者审计 JimuReport(JeecgBoot 报表模块)暴露到模板上下文的
自定义对象,借 Aviator 表达式引擎完成沙箱逃逸 RCE(CVE-2026-51086/51087,
CVE-2023-4450 的延伸)。

要点

原语抽象:沙箱封死引擎自带能力后,宿主注入上下文的对象成为新的逃逸面——
"暴露面 = 攻击面":引擎配置再严,安全性由暴露对象里最弱的一个决定。
亲戚手法:表达式引擎当跳板家族(与 pre-auth-rce-enterprise-java-bonita-ofbiz
OFBiz 链的 Groovy eval 同族);差异:入口不是把表达式注进引擎,而是在模板里调用
业务方塞进上下文的对象方法,绕的是方法级沙箱而不是解析层。
防御启示:模板/表达式上下文的对象暴露要按全量 classpath 审计后白名单化——
只审引擎配置(SAFER_RESOLVER、unsafeMethods)会漏掉真正出事的层面。

原文: https://xz.aliyun.com/news/92754
来源发布时间: 2026-08-31