En bref

  • CVE-2026-89111 — SSRF critique (CVSS 10.0) dans SAP Cloud SDK pour Python permettant le vol des identifiants OAuth2 (client_id et client_secret) d'applications SAP BTP via le paramètre tenant_subdomain
  • Faille présente depuis le premier release PyPI du SDK (16 mars 2026), divulguée lors du SAP Security Patch Day d'octobre 2026 ; une régression réintroduisait la vulnérabilité dans les versions 0.53.0 à 0.55.0
  • Action urgente : mettre à jour le SAP Cloud SDK pour Python vers la version 0.55.1 ou supérieure via pip — passer à la version corrigée définitive immédiatement

Les faits

La vulnérabilité CVE-2026-89111, divulguée lors du SAP Security Patch Day d'octobre 2026, est une faille de type Server-Side Request Forgery (SSRF) de score CVSS 3.1 de 10.0 — le maximum absolu — affectant le SAP Cloud SDK pour Python. Cette bibliothèque open source, publiée par SAP sur PyPI, est conçue pour faciliter le développement d'applications cloud sur SAP Business Technology Platform (BTP) en gérant notamment les flux d'authentification OAuth2. La gravité maximale de 10.0 s'explique par la combinaison de l'absence totale d'authentification requise pour exploiter la faille et de la capacité à voler des secrets d'application qui donnent accès à l'ensemble des ressources SAP BTP protégées par ces credentials.

Techniquement, la vulnérabilité réside dans la gestion du paramètre tenant_subdomain lors des requêtes de tokens OAuth2. Lorsqu'une application utilise le SAP Cloud SDK pour Python et transmet un sous-domaine de tenant, le SDK construit dynamiquement l'URL de l'endpoint de token OAuth2 en remplaçant une partie de l'URL de base configurée par la valeur fournie. Ce mécanisme permet à une application multi-tenant de s'authentifier auprès du bon tenant SAP BTP. La faille critique réside dans l'absence totale de validation du paramètre tenant_subdomain : une valeur contenant des points, des barres obliques ou d'autres délimiteurs d'adresse permettait à un attaquant de rediriger la requête OAuth2 — incluant les identifiants secrets de l'application (client_id et client_secret) — vers un serveur arbitraire sous son contrôle.

Le vecteur d'attaque CVSS est défini comme AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:N, traduisant une exploitabilité maximale : attaque réseau, complexité faible, aucun privilège, aucune interaction utilisateur, avec scope élargi et impact maximum sur la confidentialité et l'intégrité. Concrètement, pour exploiter CVE-2026-89111, un attaquant doit pouvoir contrôler ou influencer la valeur du paramètre tenant_subdomain transmise à une application utilisant le SDK vulnérable — ce qui est possible dans tout contexte multi-tenant où la sous-domaine du tenant provient d'une entrée utilisateur non validée ou d'une URL contrôlable. Dans ce scénario, l'attaquant reçoit sur son serveur une requête HTTP contenant le client_id et le client_secret de l'application SAP BTP cible, lui permettant de s'authentifier en tant qu'application et d'accéder à toutes les ressources SAP BTP auxquelles cette application a accès.

La chronologie de cette vulnérabilité est particulièrement révélatrice d'un problème de qualité dans la chaîne de développement du SDK. La faille a existé depuis le premier release du SAP Cloud SDK pour Python sur PyPI, publié le 16 mars 2026. Un premier correctif a été intégré dans la version 0.45.2, publiée le 21 août 2026, en ajoutant une validation stricte du paramètre tenant_subdomain conformément à la RFC 1123 : seuls les noms composés exclusivement de lettres, chiffres et tirets, limités à 63 caractères, sont désormais acceptés. Cependant, une régression critique a été découverte lors de la divulgation publique : les versions 0.53.0 à 0.55.0, publiées entre septembre et octobre 2026, réintroduisaient la vulnérabilité dans certains modules du SDK avant d'être définitivement corrigées dans la version 0.55.1. La divulgation coordonnée a eu lieu le 13 octobre 2026 dans le cadre du SAP Security Patch Day mensuel.

L'analyse technique publiée par plusieurs chercheurs en sécurité après la divulgation décrit le mécanisme d'exploitation avec précision. Le SDK prend l'URL de token OAuth2 configurée dans les paramètres de l'application (par exemple https://monapp.authentication.eu10.hana.ondemand.com/oauth/token) et remplace la partie correspondant au sous-domaine par la valeur du paramètre tenant_subdomain fourni. Si un attaquant passe comme tenant_subdomain une valeur telle que evil.com/path?redirect=, l'URL construite devient une requête vers le serveur de l'attaquant plutôt que vers le serveur d'authentification SAP. Les credentials OAuth2 — client_id et client_secret — sont transmis dans le corps de la requête HTTP POST selon la spécification OAuth2 (grant_type=client_credentials), et l'attaquant les capture sur son serveur de réception.

Selon Rescana, la recherche a permis d'identifier de nombreuses applications SAP BTP en production utilisant des versions vulnérables du SDK, notamment dans des secteurs comme les ERP cloud, la gestion de la chaîne d'approvisionnement et les intégrations B2B. SAP BTP étant une plateforme cloud massivement adoptée par les grandes entreprises mondiales pour leurs applications métier critiques, l'exposition potentielle est considérable. Des identifiants OAuth2 volés donnent accès non seulement aux données applicatives mais potentiellement à l'ensemble des services SAP BTP auxquels l'application ciblée est autorisée à accéder.

La complexité de la situation est amplifiée par la problématique de la régression. Des organisations qui avaient mis à jour leur SDK vers la version 0.45.2 en réponse à un avis interne ou à un scan de dépendances peuvent s'être retrouvées de nouveau vulnérables en mettant à jour vers des versions 0.53.0 à 0.55.0, sans en être conscientes. SAP a publié une note de sécurité complémentaire après la découverte de la régression pour alerter les utilisateurs sur la nécessité de vérifier la version exacte installée et de passer directement à la version 0.55.1, seule version garantissant une correction définitive de CVE-2026-89111 dans toutes les parties du SDK. Les versions antérieures à 0.45.2 et les versions 0.53.0 à 0.55.0 sont toutes vulnérables.

Depuis la divulgation officielle le 13 octobre 2026, aucune exploitation active de CVE-2026-89111 n'a été confirmée publiquement, mais la facilité d'exploitation (aucune authentification requise, vecteur réseau) et la valeur des identifiants OAuth2 SAP BTP pour des acteurs menant des attaques de type espionnage industriel ou fraude financière rendent une exploitation ciblée très probable dans les semaines suivant la publication des détails techniques. La disponibilité publique d'une analyse technique détaillée sur plusieurs blogs de recherche en sécurité accroît significativement ce risque.

Impact et exposition

Toute organisation développant des applications cloud sur SAP Business Technology Platform (BTP) et utilisant le SAP Cloud SDK pour Python dans les versions antérieures à 0.45.2, ou dans les versions 0.53.0 à 0.55.0, est exposée à CVE-2026-89111. Le risque est particulièrement élevé dans les applications multi-tenant exposées sur Internet où le paramètre tenant_subdomain peut être influencé par des utilisateurs externes. Les applications SAP BTP de type portail client, marketplace, ou intégration B2B représentent des cibles privilégiées.

L'exploitation réussie permet à un attaquant de voler les identifiants OAuth2 de l'application cible (client_id et client_secret), lui donnant la capacité de s'authentifier en tant qu'application auprès de SAP BTP et d'accéder à toutes les ressources autorisées. Selon la configuration des droits de l'application compromise, cela peut inclure l'accès à des données ERP sensibles (commandes, contrats, données financières), des APIs internes SAP, des bases de données de développement ou des pipelines CI/CD intégrés à SAP BTP.

La problématique de la régression crée une situation particulièrement complexe pour les équipes de sécurité : un simple scan de dépendances identifiant la version comme "patchée" (par exemple, 0.54.0 > 0.45.2) ne détecterait pas correctement la vulnérabilité dans les versions régressées. Les outils d'analyse de la composition logicielle (SCA) doivent être mis à jour pour inclure la plage de versions 0.53.0-0.55.0 comme vulnérable, et seule la présence de la version 0.55.1 ou supérieure doit être considérée comme sécurisée.

Recommandations immédiates

  • Mettre à jour le SAP Cloud SDK pour Python vers la version 0.55.1 ou supérieure via pip : pip install --upgrade sap-cloud-sdk-python
  • Vérifier toutes les applications SAP BTP intégrant le SDK : pip show sap-cloud-sdk-python pour identifier la version installée dans chaque environnement (dev, staging, production)
  • Les versions 0.45.2 à 0.52.x sont partiellement patchées ; les versions 0.53.0 à 0.55.0 sont vulnérables par régression ; seule la version 0.55.1+ est définitivement sécurisée
  • Mettre à jour les règles SCA (Software Composition Analysis) pour marquer les versions 0.53.0-0.55.0 comme vulnérables, en complément des versions antérieures à 0.45.2
  • Vérifier dans les logs applicatifs si des requêtes OAuth2 ont été adressées vers des domaines non-SAP, ce qui pourrait indiquer une exploitation préalable — SAP Security Note 3502233
  • En cas de doute sur une compromission des credentials, réinitialiser immédiatement les secrets OAuth2 des applications SAP BTP affectées via la console SAP BTP

⚠️ Attention — régression dans les versions récentes

La correction initiale de CVE-2026-89111 dans la version 0.45.2 a été réintroduite par régression dans les versions 0.53.0 à 0.55.0. Une mise à jour vers ces versions ne corrige PAS la vulnérabilité. Seule la version 0.55.1 ou supérieure du SAP Cloud SDK pour Python garantit une correction définitive.

Comment vérifier si mon application SAP BTP est vulnérable ?

Exécutez pip show sap-cloud-sdk-python dans l'environnement de votre application pour afficher la version installée. Si la version est antérieure à 0.45.2, ou comprise entre 0.53.0 et 0.55.0 inclus, votre application est vulnérable à CVE-2026-89111. Pour les déploiements sur SAP BTP Cloud Foundry, vérifiez le fichier requirements.txt ou Pipfile du projet. Vous pouvez également scanner votre dépôt avec pip-audit qui détecte les dépendances PyPI ayant des CVE connues.

Votre infrastructure est-elle exposée ?

Ayi NEDJIMI réalise des audits ciblés pour identifier et corriger vos vulnérabilités.

Demander un audit