2 points par GN⁺ 2026-03-24 | Aucun commentaire pour le moment. | Partager sur WhatsApp
  • La GitHub Action officielle a été compromise par une mise à jour forcée de tags, entraînant une attaque de la chaîne d’approvisionnement diffusant du code malveillant
  • Les attaquants ont remplacé 75 tags sur 76 par des commits malveillants, affectant environ plus de 10 000 workflows
  • Le script altéré fonctionne en trois étapes — collecte, chiffrement et exfiltration de secrets — et inclut du code TeamPCP Cloud stealer
  • Les tags compromis sont toujours actifs ; seuls @0.35.0 ou un commit SHA précis sont confirmés comme sûrs
  • Il est impératif de remplacer tous les identifiants et d’épingler les workflows sur un commit SHA ; la même contamination a aussi été constatée sur les images Docker Hub

Vue d’ensemble de l’attaque de la chaîne d’approvisionnement sur Trivy GitHub Actions

  • La GitHub Action officielle de Trivy (aquasecurity/trivy-action) a été compromise par des attaquants via une mise à jour forcée de tags (force-push), ce qui a permis la diffusion de code malveillant
  • Les attaquants ont remplacé 75 des 76 tags de version par des commits malveillants, de façon à les faire exécuter automatiquement dans les pipelines CI/CD
  • Environ plus de 10 000 fichiers de workflow GitHub référencent cette action, ce qui donne à l’incident une portée considérable
  • Les tags infectés sont toujours actifs, et @0.35.0 est confirmé comme la seule version sûre
  • Socket a détecté en temps réel 182 événements GitHub Action malveillants à partir de 19:15 UTC, classés dans les catégories Backdoor, Infostealer et Reconnaissance

Origine de l’attaque et mode opératoire

  • Selon les mainteneurs de Trivy, cette attaque a été rendue possible par le vol d’identifiants disposant de droits d’écriture
    • Lors d’une compromission antérieure survenue début mars, des secrets de l’environnement CI ont fuité, et leur rotation n’a pas été complète, laissant certains nouveaux identifiants aux attaquants
    • Les attaquants ont utilisé ces identifiants pour effectuer des mises à jour authentifiées de tags sans exploiter de vulnérabilité propre à GitHub
  • Au lieu de pousser sur une branche ou de créer une release, les attaquants ont écrasé de force les tags existants avec de nouveaux commits
    • Chaque tag a été falsifié pour paraître légitime en recopiant les métadonnées du commit d’origine (auteur, e-mail, horodatage, message de commit)
    • Toutefois, alors que le commit d’origine était signé GPG, le commit des attaquants n’avait pas de signature, et la date du commit parent était incohérente, fixée en 2026
  • Même lorsqu’un indicateur Immutable Release apparaît sur GitHub, il est possible que les attaquants aient publié l’état malveillant avant de verrouiller la release
    • Il ne faut donc pas se fier au badge “Immutable” ; seule la méthode d’épinglage sur un commit SHA constitue un mode de consommation sûr

Structure de la falsification des tags

  • Les attaquants ont créé de nouveaux commits à partir du dernier commit de la branche master (57a97c7e)
    • Seul le fichier entrypoint.sh a été remplacé par une version malveillante, tous les autres fichiers restant inchangés
    • Chaque tag a été falsifié en recopiant le numéro de PR, le message de commit et les informations d’auteur d’origine
  • Sur la page des releases GitHub, l’indication “0 commits to master since this release” peut servir d’indice visuel d’un tag falsifié
  • La raison pour laquelle seul le tag 0.35.0 n’a pas été compromis est qu’il pointait déjà vers la HEAD de master

Structure de la charge malveillante

  • Le entrypoint.sh compromis comporte 204 lignes au total, avec le code Infostealer aux lignes 4 à 105, puis le code légitime de scan Trivy ensuite
  • Le malware se compose de trois étapes
    • Étape 1 : collecte — extraction de secrets depuis la mémoire des processus runner et le système de fichiers
    • Étape 2 : chiffrement — chiffrement des données collectées avec AES-256-CBC et RSA-4096
    • Étape 3 : exfiltration — envoi vers un domaine contrôlé par l’attaquant ou vers le compte GitHub de la victime
  • Étape 1 : collecte de secrets

    • Lecture des variables d’environnement des processus runner GitHub Actions (Runner.Worker, Runner.Listener, runsvc, run.sh) depuis /proc/<pid>/environ, avec extraction des entrées contenant les mots-clés env et ssh
    • Sur les runners hébergés par GitHub, exécution via sudo d’un script de dump mémoire basé sur Python pour rechercher le motif "isSecret":true dans la mémoire du processus Runner.Worker
    • Sur les runners auto-hébergés, exécution d’un collecteur d’identifiants sur le système de fichiers identifié comme TeamPCP Cloud stealer
      • Cibles très larges, notamment clés SSH, identifiants AWS/GCP/Azure, jetons Kubernetes, configuration Docker, mots de passe de bases de données, fichiers d’environnement, clés TLS, configurations VPN, URL de webhook, clés de portefeuille, etc.
  • Étape 2 : chiffrement

    • Génération d’une clé de session de 32 octets avec openssl rand, puis chiffrement des données avec AES-256-CBC
    • La clé de session est chiffrée avec une clé publique RSA-4096 en appliquant un padding OAEP
    • Les données chiffrées (payload.enc) et la clé de session (session.key.enc) sont regroupées dans tpcp.tar.gz
  • Étape 3 : exfiltration des données

    • Canal principal : envoi HTTPS POST vers https://scan[.]aquasecurtiy[.]org (domaine typosquatté de aquasecurity)
    • Canal secondaire : en cas d’échec, utilisation du GitHub Personal Access Token de la victime pour créer un dépôt public nommé tpcp-docs
      • Téléversement de tpcp.tar.gz comme asset de release → les attaquants récupèrent ensuite les données en recherchant ce dépôt sur GitHub
    • Tentative de contournement des pare-feu via l’infrastructure GitHub, avec forte capacité d’évasion de détection
    • Suppression finale des fichiers temporaires pour réduire les traces

Attaquants et groupe à l’origine

  • Des commentaires dans le code malveillant mentionnent explicitement “TeamPCP Cloud stealer”
    • TeamPCP (DeadCatx3, PCPcat, ShellForce) est un groupe spécialisé dans l’attaque des environnements cloud-native, déjà lié à l’exploitation de vulnérabilités dans Docker API, Kubernetes, Redis et les tableaux de bord Ray
    • En février 2026, Flare et The Hacker News l’avaient déjà signalé dans le cadre de campagnes de rançongiciel, vol de données et minage de cryptomonnaies
  • Les fonctions de collecte de clés de validateur Solana et de portefeuilles crypto concordent avec une motivation financière

Réponse et recommandations

  • Cesser immédiatement d’utiliser tous les tags de version de Trivy Action ; utiliser uniquement le commit SHA 57a97c7e7821a5776cebc9bb87c984fa69cba8f1 ou le tag 0.35.0
  • Tout pipeline infecté doit être considéré comme une fuite complète de secrets ; tous les identifiants cloud, clés SSH, jetons API, mots de passe de bases de données et jetons Docker doivent être remplacés immédiatement
  • Il est recommandé de vérifier la présence d’un dépôt tpcp-docs dans l’organisation GitHub et d’examiner les logs de trivy-action exécutés après le 19 mars à 19:00 UTC

Indicateurs de compromission (IOCs)

  • Indicateur réseau : scan[.]aquasecurtiy[.]org
  • Hash de fichier : 18a24f83e807479438dcab7a1804c51a00dafc1d526698a66e0640d1e5dd671a (entrypoint.sh)
  • GitHub Actions infectées : toutes les versions de aquasecurity/trivy-action@0.0.1 à @0.34.2 incluses (75 tags au total)

Mise à jour supplémentaire (22 mars)

  • Il a aussi été confirmé sur Docker Hub que les images Trivy (0.69.4, 0.69.5, 0.69.6, latest) étaient contaminées par la même charge Infostealer
  • Le tag latest a pointé vers une image malveillante et a été distribué aux utilisateurs pendant la période d’exposition
  • Des détails supplémentaires sont disponibles dans le rapport séparé de Socket “Trivy Docker Images Compromised”

Aucun commentaire pour le moment.

Aucun commentaire pour le moment.