🔬 Contexte
Publication de recherche académique (arXiv, mars 2026) conduite par des chercheurs de Stanford University, UC Davis et TU Delft. L’étude porte sur l’exposition de credentials API sur le web public via l’analyse dynamique de 10 millions de pages web issues du dataset HTTP Archive (crawl septembre 2025).
📊 Périmètre et méthodologie
Les chercheurs ont utilisé TruffleHog (v3.90.8) pour détecter les credentials dans les fichiers HAR (HTTP Archive), couvrant environ 200 TB de données. Seuls les credentials vérifiés via les API officielles des fournisseurs ont été retenus, constituant une borne inférieure des expositions réelles. 14 types de services ont été analysés : AWS, Azure, Alibaba, Cloudflare, Stripe, RazorPay, Telegram, Mailchimp, SendGrid, Twilio, Slack, OpenAI, GitHub, Bitly.
🔑 Résultats principaux
- 1 748 credentials vérifiés identifiés sur 9 804 sites web et 5 693 domaines distincts
- 84% des expositions proviennent de ressources JavaScript first-party, dont 62% dans des bundles Webpack
- 16% des expositions proviennent de ressources tierces (third-party)
- 5% des cas : credentials hard-codés directement dans le DOM
- Persistance moyenne : 12 mois d’exposition publique (min : 1 mois, max : 60 mois)
- Services les plus exposés : AWS (283 credentials), Stripe (277), Telegram (186), OpenAI (181), GitHub (119)
🏦 Cas critiques identifiés
- Credentials AWS d’une institution financière d’importance systémique mondiale (G-SIFI) exposant Lambda, RDS, Secrets Manager, KMS, ainsi que des clés RSA privées et credentials OAuth2
- Credentials GitHub d’un développeur de firmware pour drones et appareils télécommandés, avec accès complet aux dépôts de distribution firmware — vecteur de compromission supply chain mondial
🌍 Distribution géographique
| Pays | Part domaines exposés | Part globale web |
|---|---|---|
| États-Unis | 20% | 9,1% |
| Inde | 15,7% | 4,7% |
| Italie | 5,6% | — |
| Brésil | 4,3% | 3,5% |
| Royaume-Uni | 3,8% | — |
🛠️ Causes racines identifiées (sur 40 réponses)
- Erreurs de bundling JavaScript (8 cas) : variables d’environnement privées intégrées dans les bundles publics (ex: Nuxt.js avec @nuxtjs/dotenv)
- Erreurs de référencement public/privé : préfixe PUBLIC_ appliqué par erreur à un token privé Cloudflare
- Erreurs de développement : credentials de test non supprimés, legacy code non nettoyé
- Pipelines CI/CD : commits accidentels exposant des credentials
- Mauvaise compréhension : ~30% des cas étaient des credentials intentionnellement côté client, jugés « sûrs » à tort
📬 Divulgation responsable
- 2 435 entités notifiées (2 279 first-party, 156 third-party) via 9 746 emails
- Taux de succès de livraison : 71% (1 729 domaines)
- Résultat à J+14 : 50% de suppression des credentials exposés (1 405 → 706)
- 26% de révocation des credentials actifs (1 175 → 865)
- OpenAI : réduction de 71% ; Stripe : 62% ; GitHub : 57% ; Bitly : seulement 20%
📌 Type d’article
Publication de recherche académique à grande échelle. Objectif principal : mesurer et caractériser l’exposition de credentials API sur le web public via analyse dynamique, quantifier leur persistance, identifier les causes racines, et évaluer l’impact de la divulgation responsable.
🧠 TTPs et IOCs détectés
TTP
- T1552.001 — Unsecured Credentials: Credentials In Files (Credential Access)
- T1552.004 — Unsecured Credentials: Private Keys (Credential Access)
- T1195.002 — Supply Chain Compromise: Compromise Software Supply Chain (Initial Access)
- T1078.004 — Valid Accounts: Cloud Accounts (Defense Evasion)
- T1530 — Data from Cloud Storage (Collection)
IOC
- Domaines :
likr.tw - Domaines :
bestfreecdn.com
Malware / Outils
- TruffleHog (tool)
- Gitleaks (tool)
🔗 Source originale : https://arxiv.org/abs/2603.12498?is=e4f6b16c6de31130985364bb824bcb39ef6b2c4e902e4e553f0ec11bdbefc118