Introduction

Récemment, Trivy, l'un des scanneurs de vulnérabilités les plus utilisés au monde, a été compromis. Les attaquants ont injecté une logique de récolte d'informations d'identification directement dans la version binaire officielle.

Contexte Technique

Le modèle d'attaque de la chaîne d'approvisionnement repose sur l'injection de code malveillant dans les outils utilisés par les équipes de développement. Dans le cas de Trivy, les attaquants ont exploité les balises Git mutables et l'identité de commit auto-déclarée pour injecter du malware dans la version binaire officielle v0.69.4.

Les actions GitHub ont ensuite récupéré la charge malveillante, permettant ainsi à des millions de pipelines CI/CD d'exécuter du code malveillant. Le payload malveillant a ensuite accédé aux clés API en texte brut à partir des variables d'environnement, exactement là où tous les gestionnaires de secrets les placent après récupération.

Analyse et Implications

Cette attaque met en évidence les limites des gestionnaires de secrets traditionnels. Si une clé existe sous forme de chaîne de caractères en texte brut dans l'environnement d'exécution, un outil compromis peut la trouver et l'exfiltrer. Les gestionnaires de secrets tels que Vault, AWS Secrets Manager, Doppler et Infisical suivent tous le même modèle de récupération, qui consiste à stocker la clé chiffrée et à la récupérer via une API au moment de l'exécution.

Cela signifie que la clé devient une variable d'environnement en texte brut que les outils peuvent lire, y compris un binaire Trivy compromis. Par conséquent, les gestionnaires de secrets traditionnels ne sont pas en mesure de protéger les informations d'identification contre les attaques de la chaîne d'approvisionnement.

Perspective

Pour se protéger contre de telles attaques, il est essentiel d'assurer que les informations d'identification ne soient jamais stockées en texte brut dans l'environnement. VaultProof utilise une architecture de clés divisées pour diviser les clés API en parts cryptographiques, garantissant ainsi que la clé complète n'existe jamais dans l'environnement. Même si un outil compromis lit tous les octets de l'environnement, il ne trouvera rien d'utile.