Des packages npm de SAP compromis dans une attaque de la chaîne d'approvisionnement : des identifiants en danger
Plusieurs packages npm officiels de **SAP** ont été compromis dans une attaque suspectée de la chaîne d'approvisionnement, potentiellement liée à l'acteur de menace **TeamPCP**. L'attaque visait à voler des identifiants sensibles et des jetons d'authentification sur les systèmes des développeurs, impactant les environnements de développement d'entreprise.

### Packages compromis
Des chercheurs en sécurité ont identifié quatre packages compromis, désormais dépréciés sur NPM :
* `@cap-js/sqlite` – v2.2.2
* `@cap-js/postgres` – v2.2.2
* `@cap-js/db-service` – v2.10.1
* `mbt` – v1.2.48
Ces packages prennent en charge le Cloud Application Programming Model (CAP) de **SAP** et le Cloud MTA, largement utilisés dans le développement d'entreprise.
### Vecteur d'attaque
Selon les rapports d'**Aikido** et **Socket**, les packages compromis contenaient un script malveillant 'preinstall'. Ce script s'exécute automatiquement lors de l'installation du package, lançant un chargeur nommé `setup.mjs`. Le chargeur télécharge le runtime JavaScript Bun depuis GitHub et l'utilise pour exécuter une charge utile `execution.js` fortement obfusquée.
### Charge utile de vol d'informations
La charge utile fonctionne comme un voleur d'informations, ciblant un large éventail d'identifiants provenant des machines des développeurs et des environnements CI/CD, notamment :
* Jetons d'authentification npm et GitHub
* Clés SSH et identifiants de développeur
* Identifiants cloud pour **AWS**, **Azure** et **Google Cloud**
* Configuration et secrets Kubernetes
* Secrets des pipelines CI/CD et variables d'environnement
Le malware tente également d'extraire des secrets directement de la mémoire du Runner CI, similaire aux attaques précédentes de **TeamPCP**.
> "Sur les runners CI, la charge utile exécute un script Python intégré qui lit /proc/<pid>/maps et /proc/<pid>/mem pour le processus Runner.Worker afin d'extraire tous les secrets correspondant à 'key' :{ 'value': '...', 'isSecret':true} directement de la mémoire du runner, contournant ainsi tout masquage de journal appliqué par la plateforme CI," explique Socket.
### GitHub comme mécanisme d'exfiltration de données et de boîte aux lettres mortes
Les données collectées sont chiffrées et téléchargées sur des dépôts GitHub publics sous le compte de la victime. Ces dépôts incluent la description : "Un Mini Shai-Hulud est apparu", rappelant l'attaque de la chaîne d'approvisionnement de **Bitwarden**.

*Dépôts Github créés avec la description "Un Mini Shai-Hulud est apparu"*
*Source : Aikido*
Le malware utilise également les recherches de commits GitHub comme mécanisme de boîte aux lettres mortes pour récupérer des jetons.
> "Le malware recherche les commits GitHub pour cette chaîne et utilise les messages de commit correspondants comme boîte aux lettres mortes pour les jetons," explique Aikido.
>
> "Les messages de commit correspondant à OhNoWhatsGoingOnWithGitHub:<base64> sont décodés en jetons GitHub et vérifiés pour l'accès aux dépôts."
### Auto-propagation
Similaire aux attaques précédentes, la charge utile inclut du code pour s'auto-propager à d'autres packages. En utilisant des identifiants npm ou GitHub volés, elle tente de modifier d'autres packages et dépôts auxquels elle a accès, en injectant le même code malveillant pour propager davantage le compromis.
### Attribution
Les chercheurs estiment avec une confiance moyenne que **TeamPCP** est à l'origine de cette attaque, citant un code et des tactiques similaires utilisés dans des attaques précédentes de la chaîne d'approvisionnement contre **Trivy**, **Checkmarx** et **Bitwarden**.
### Enquête en cours
La méthode utilisée pour compromettre le processus de publication npm de **SAP** reste floue. Un ingénieur en sécurité a suggéré qu'un jeton NPM aurait pu être exposé via un job **CircleCI** mal configuré.
**SAP** n'a pas encore répondu aux demandes de commentaires concernant l'incident.