SAP Cloud SDK for Python OAuth2 SSRF (CVE-2026-89111, CVSS 10.0)
An unauthenticated SSRF in SAP Cloud SDK for Python lets an attacker who controls tenant_subdomain redirect OAuth2 token requests and steal client credentials. Fixed in 0.45.2.
SAP patched a CVSS 10.0 server-side request forgery flaw in SAP Cloud SDK for Python, the library used to build AI agents and Python apps on SAP Business Technology Platform (BTP). CVE-2026-89111 lets a remote, unauthenticated attacker redirect OAuth2 token requests to a server they control — and walk away with the application's client credentials. The fix is in sap-cloud-sdk 0.45.2.
The primary source is SAP's own advisory on GitHub, GHSA-4mv3-jxxm-9cx2, published alongside SAP's October 2026 security notes.
What's affected
- Package:
sap-cloud-sdkon PyPI. - Affected versions: all releases before 0.45.2.
- Fixed in: 0.45.2.
- Exposure: multi-tenant BTP applications that pass a caller-influenced
tenant_subdomaininto the SDK.
The flaw
The SDK builds an OAuth2 token endpoint URL from the tenant_subdomain parameter without validating it. An attacker who controls that value — in a multi-tenant app, that can be a request-supplied field — points the token request at an attacker-controlled host. The SDK then sends the OAuth2 client credentials to that host.
SAP classifies it as CWE-918 with the vector CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N: network-reachable, no privileges, no user interaction, scope changed, high confidentiality and integrity impact. Leaked BTP client credentials are the keys to whatever that service account can reach.
Version 0.45.2 validates tenant_subdomain against RFC 1123 DNS-label rules before it is placed into the token URL.
Exploitation status
No in-the-wild exploitation has been reported. There is no public PoC at the time of writing, and SAP's advisory does not cite active abuse. The bug is trivial to reach in any app that forwards a tenant identifier into the SDK, so treat the window as short.
Action checklist
- Upgrade
sap-cloud-sdkto 0.45.2 or later in every service that pulls it — including agent/automation code where it may be a transitive dependency. - If you cannot upgrade immediately, validate
tenant_subdomainagainst an allowlist of registered tenant subdomains before passing it to any SDK call, per SAP's workaround. - Rotate the OAuth2 client credentials used by any affected BTP app that was internet-reachable before patching. If the SSRF fired, those secrets are burned.
- Grep your dependency tree (
pip freeze, lockfiles) forsap-cloud-sdkto find services you forgot were running it.
Context
This is the second SAP flaw to land a top-end CVSS this cycle. In September we covered CVE-2026-44747, a memory-corruption bug in NetWeaver ABAP. The pattern worth noting here is different: the vulnerable code isn't a monolithic SAP server but a pip-installable SDK aimed at the AI-agent build-out, where a credential-leaking SSRF rides into production inside someone else's application. Library CVEs age in deployment images long after the vendor ships the fix — inventory your dependencies, not just your SAP landscape.