SAP scores CVE-2026-89111 at 10.0. That is an unusual number for a server-side request forgery, and the reason is scope: the bug does not merely send a request to the wrong host, it hands the attacker the credentials needed to complete that request themselves. The affected package is the SAP Cloud SDK for Python, and the fix shipped in two parts, months apart, with a regression between them.
The mechanism
The SDK builds an OAuth2 token URL for the client credentials flow. Part of that URL comes from a caller-supplied value named tenant_subdomain, which the SDK substitutes into the URL by string replacement.
Whoever controls tenant_subdomain controls the destination host. When fetch_token runs, it sends grant_type, client_id and client_secret in the form body to whatever host that value points at. An attacker who can set the field to a host they operate receives the client secret directly, with no parsing trick required.
Those credentials buy a real access token from the legitimate endpoint. The token carries whatever permissions the original client held, and the documented Destination configuration stores third-party system credentials. The blast radius runs from one subdomain parameter to the credentials of every system that SDK integrated with.
Two fixes, and a window in between
The advisory lists affected versions below 0.45.2, with the fix in 0.45.2. According to the vendor, that is the whole story.
In practice it is not. Researchers tested each release and found that the module migration work in 0.53.0 reintroduced the flaw, which remained present through 0.55.0. Version 0.55.1 re-fixed it; the current release line is 0.58.5.
The per-version behaviour is reproducible. 0.45.0 and 0.45.1 send the secret to the attacker host, 0.45.2 blocks it, 0.53.0 and 0.55.0 send it again, and 0.55.1 and 0.58.5 block it. One test run against 0.53.0 captured two separate credential sets from a single request flow.
That gap is the finding worth carrying away. Anyone who patched to 0.45.2 and later upgraded to 0.53.0 for unrelated reasons became exploitable again, and no advisory said so. A version-range check driven by the vendor advisory alone would report those hosts as fixed.
Disclosure context
The issue was published at SAP Security Patch Day on 13 October 2026 alongside 19 other vulnerabilities: 4 critical, 3 high, and 4 that had been pre-published on GitHub. No in-the-wild exploitation has been reported.
Other items in the same batch matter for anyone tracking SAP exposure broadly. CVE-2026-89110 is a broken access control issue in NetWeaver Visual Composer. CVE-2026-89107 is code injection in S/4HANA. CVE-2026-89108 is a missing authorization check in Manufacturing Integration and Intelligence, scored between 9.9 and 9.1 depending on the source.
What to do
- 1.
Compare the installed version against 0.45.2, 0.55.1 and 0.58.5, and treat anything in the 0.53.0 to 0.55.0 range as vulnerable regardless of what an advisory lookup reports.
- 2.
If an upgrade cannot land yet, whitelist
tenant_subdomainagainst the values your integrations actually use. It is a narrow control, but it addresses the injection point itself. - 3.
Rotate client secrets for any SDK integration that ran a version in either vulnerable range. Assume the secret was exposed.
- 4.
Review what the affected client was authorized to reach. The token the attacker obtains is the client's token, so the question becomes what that client could read, and the Destination configuration is where to look.
The lesson that outlasts the CVE
Advisories describe the versions the maintainer knew about when the advisory was written. A regression introduced later, during a refactor, is invisible to an advisory-based scanner and to any team whose remediation reads as an instruction to upgrade past the listed version.
For a library that handles credentials, the durable control is a negative test in your own pipeline: point tenant_subdomain at a host you control, run the token fetch, and assert that no secret leaves. That test survives version changes, module migrations, and advisory text nobody has updated.
References
SAP Security Patch Day, 13 October 2026, SAP Note for CVE-2026-89111
GHSA-4mv3-jxxm-9cx2 (SAP Cloud SDK for Python, OAuth2 SSRF)