Op 13 oktober maakte SAP bekend dat er een kritieke kwetsbaarheid met CVSS 10.0 is gevonden in de SAP Cloud SDK Python. Het probleem zit in de manier waarop de SDK OAuth2-tokens aanvraagt voor multi-tenant toepassingen op SAP Business Technology Platform (BTP). In het ergste geval kan een aanvaller OAuth2 client credentials (client ID en client secret) richting een server sturen die hij zelf beheert.
Hieronder lees je wat er precies misgaat, welke versies in beeld zijn, welke fix SAP noemt, en welke praktische stappen je kunt nemen als upgraden (nog) niet direct lukt.
Wat is er mis in de SAP Cloud SDK Python?
De kwetsbaarheid, geregistreerd als CVE-2026-89111, treft multi-tenant toepassingen op SAP BTP die de officiële Python client van SAP gebruiken voor BTP-diensten. SAP stelt dat een aanvaller invloed moet kunnen uitoefenen op het tenant subdomain dat de applicatie via de SDK doorgeeft.
Wanneer de SDK vervolgens voor dat tenant-subdomein een access token probeert op te halen, kan de controle op de gegenereerde bestemming onvoldoende zijn. Daardoor kan de SDK uiteindelijk een verzoek doen naar een eindpunt dat de aanvaller controleert.
Waarom kan dit leiden tot OAuth2 credential theft?
Volgens SAP behandelt de SDK authenticatie met de client credentials van de applicatie: een client ID en een client secret. Om een token op te halen gebruikt de SDK een token URL uit de configuratie en vervangt een deel daarvan door het tenant-subdomein.
In releases waar de beveiligingscheck ontbreekt of niet consequent wordt toegepast, gebruikt de SDK de doorgegeven waarde “zoals is”. Daarna stuurt de SDK de client ID en client secret mee in het verzoek om een access token te verkrijgen.
SAP typeert het probleem als een vorm van server-side request forgery (SSRF): de server (in dit geval de SDK/aanroepende serverlogica) kan worden aangezet tot het maken van een request naar een bestemming waar het niet voor bedoeld was. Wat een aanvaller vervolgens precies kan bereiken met de gestolen credentials hangt volgens SAP af van de bevoegdheden die aan de OAuth2-client zijn gekoppeld, maar die details worden niet in de advisory genoemd.
De fix: versie 0.45.2 introduceert een check
SAP geeft aan dat het probleem is verholpen in versie 0.45.2, die op 21 augustus is uitgebracht. Die versie voegt een controle toe die een tenant subdomain afwijst als het niet voldoet aan een “simpel” naamformat.
Concreet staat in de context dat de check accepteert: een enkele naam bestaande uit letters, cijfers en koppeltekens, met een maximale lengte van 63 tekens. Zodra de waarde buiten dit format valt, stopt de SDK de request met een error.
SAP beschrijft dat deze check voorkomt dat ongeldige waarden stilletjes worden gebruikt om een fout (of gemanipuleerd) URL-pad samen te stellen.
Waarom latere releases toch niet altijd veilig waren
Er zit een belangrijke nuance in de disclosure. SAP’s advies gaf aan dat 0.45.2 als fix geldt, maar de berichtgeving stelt dat zes latere releases de beveiligingscheck niet in elk scenario toepassen.
Volgens The Hacker News bleken met name versies 0.53.0 t/m 0.55.0 (gepubliceerd tussen 10 en 18 september) de check over te slaan wanneer een applicatie de SDK aanroept via de Destination-service module.
Wat gebeurde er? In 0.53.0 werd de module verplaatst naar nieuwe gedeelde code voor het opvragen van tokens, en in die gedeelde code zat de check niet. Pas in 0.55.1 (op 18 september) werd de check weer toegevoegd aan die plek.
In de release notes van 0.55.1 staat bovendien dat tenant-subdomeinen die URL-delimiters bevatten voortaan direct een ValueError opleveren, in plaats van stil door te routeren naar een door de aanvaller gecontroleerd endpoint.
Wat zeggen SAP’s tests over de status van versies?
The Hacker News rapporteert dat SAP’s eigen tests voor de check zijn uitgevoerd op 13 oktober tegen de broncode van releases van 0.45.1 tot 0.58.4, plus drie releases uit de 0.36-lijn. In totaal faalden zes releases op 9 van de 11 tests die SAP had toegevoegd met versie 0.55.1.
De versie 0.55.1 en de 11 daaropvolgende releases zouden alle 11 tests hebben doorstaan.
Een extra punt: in de advisory staat geen versie boven 0.45.2 als “affected”. SAP en de release notes specificeren echter niet of de zes problematische releases exact onder CVE-2026-89111 vallen.
Welke versies moet je upgraden?
In “What to Do” somt SAP een helder set-up van waar de check wel en niet zit:
- 0.45.2 t/m 0.52.2 bevatten de check.
- 0.55.1 t/m 0.58.4 bevatten de check.
- Upgraden binnen de 0.36-lijn brengt je niet automatisch naar een veilige variant: de 0.36.1 en 0.36.2 missen de check ondanks dat ze na de augustusfix zijn uitgebracht.
Op 13 oktober was 0.58.4 de nieuwste release op PyPI, de Python package index.
Als upgraden niet meteen kan: beperk het tenant-subdomein
Kan je nog niet naar een versie met de check? SAP geeft een mitigatie voor toepassingen die de tenant subdomain moeten doorgeven aan de SDK:
- Vergelijk het doorgegeven tenant-subdomein met een lijst met geregistreerde tenants voordat je het aan de SDK doorgeeft.
Volgens SAP is het probleem alleen relevant wanneer een applicatie daadwerkelijk een tenant subdomain doorgeeft aan de SDK. De fix in augustus betrof daarbij drie modules: Agent Gateway, Destination en Document Management Service.
Of applicaties die eerder draaiden met releases zonder check hun client credentials moeten vervangen, wordt niet expliciet vermeld in de advisory.
Waarom dit voorbeeld past in een breder beveiligingsbeeld
Wat dit incident extra urgent maakt, is dat het gaat om authenticatiegegevens (client ID en client secret) die via een misbruikbare route naar een aanvaller kunnen lekken. Dat past in een patroon waarbij aanmeldings- en tokenafhandeling in SDK’s een “single point of failure” kunnen vormen als validatie niet overal consistent is.
Als je wilt zien hoe vergelijkbare ketens van kwetsbaarheden in enterprise-systemen tot risico’s leiden, zijn deze gerelateerde stukken mogelijk interessant: Ivanti Connect Secure: keten van 3 zero-days en Docker Hub: critical bug GhostPat opgelost.
Praktische checklist voor jouw team
Om de impact van SAP Cloud SDK Python en CVE-2026-89111 te beperken, kun je het volgende doen:
- Inventariseer welke versies van de SDK je gebruikt (per omgeving en per applicatie).
- Bekijk of jouw applicatie tenant-subdomeinen doorgeeft aan de SDK en via welke modules (o.a. Destination).
- Upgrade naar een versie waar de check aanwezig is: minimaal 0.45.2 óf (voor de Destination-scenario’s) 0.55.1 of hoger, binnen de door SAP genoemde veilige bandbreedtes.
- Als upgrade niet kan: valideer het tenant-subdomein tegen een interne allowlist van geregistreerde tenants.
- Herijk monitoring en logging rond token requests, zodat je afwijkende bestemmingen sneller ziet.
Conclusie
De melding over SAP Cloud SDK Python laat zien hoe kwetsbaarheden in authenticatiestromen kunnen escaleren naar het verlies van OAuth2 client credentials. SAP labelt het als een SSRF-issue met CVSS 10.0 en verwijst naar 0.45.2 als fix, terwijl latere releases niet altijd consequent waren voor de Destination-module. Door tijdig te upgraden of het tenant-subdomein strikt te valideren, verlaag je het risico op het sturen van tokenverzoeken naar een aanvaller-controlled endpoint.
Bron: https://thehackernews.com/2026/10/sap-discloses-critical-cvss-10-flaw-in.html