De PyPi à Stack Overflow, des secrets se perdent

PyPi Stack Overflow secrets

Les secrets, plutôt leakés dans les dumps ou dans les commits ? Mise en perspective à partir d’examens sur PyPi et Stack Overflow.

Pour trouver des secrets, vaut-il mieux regarder sur PyPi ou sur Stack Overflow ? En réaction à une analyse portée sur la première option, un développeur s’est intéressé à la seconde.

Son postulat : les commits accidentels sont effectivement une source de leak, mais il en existe peut-être de « moins évidentes ».
Le « déclencheur » : sa contribution au projet Buildozer (empaquetage d’applications mobiles). Cherchant des informations sur Stack Overflow, le dev en question s’est aperçu qu’en cas d’échec d’une commande, les dumps de l’outil contenaient l’intégralité de l’environnement.

Il a donc téléchargé une archive de Stack Overflow – sous la forme d’un fichier XML de 103 Go où chaque ligne est une question ou une réponse – et l’a examiné. Méthode retenue : grep dans zsh, avec un script Rust pour la recherche, plusieurs outils n’ayant pas donné de résultats satisfaisants (erreurs mémoire avec gitleaks et detect-secrets, freeze avec ripgrep, pas d’output avec ripsecrets, etc.).

Après déduplication, le butin se présente comme suit. Les tokens AWS dominent (2897 entrées), devant la catégorie des clés privées (1569), des tokens JSON Web (1147), des clés d’API GCP (995) et des tokens de bots Telegram (283).

Stack Overflow

La plupart de ces informations sont, en tant que telles, inutiles, constate le développeur. Les tokens AWS, par exemple, prennent de la valeur lorsqu’on leur associe des URL de site. Ceux de Grafana, quand on y couple des URL d’instances. Ceux de Stripe, une fois combinés à des ID clients.

Autre limite, surtout quand on travaille sur une archive : l’ancienneté des données (« Oubliez notamment les JWT, dont la durée de vie moyenne est d’un mois. ») Illustration avec les PAT GitHub : sur les 74 semblant authentiques, uniquement six étaient valides. Et seulement avec un e-mail associé.

PyPi, autre nid à clés AWS

Au rang de ceux qui scannent régulièrement PyPi, il y a GitGuardian. L’éditeur, spécialisé dans la protection des secrets, rend notamment compte de ses trouvailles dans le cadre de son rapport annuel « The State of Secrets Sprawl ».

Récemment, il a dédié une analyse à PyPi. Bilan : quelque 57 000 occurrences de secrets trouvées sur un périmètre comprenant 450 000 projets et 5 millions de versions de packages.

types de secrets 2017 2023

Les secrets se répartissent en 151 types. GitGuardian note, entre autres tendances :

– Qu’au fil des années, le nombre de clés d’API Google a nettement augmenté.
– Que le nombre d’authentifiants de bases de données a crû en popularité en 2022.
– Que le nombre de tokens de bots Telegram valides a plus que doublé début 2021, puis connu un nouveau bond au printemps 2023.

Passé les scripts Python, les principaux emplacements des secrets valides sont des fichiers de configuration ou de documentation (généralement, JSON et yml). GitGuardian précise avoir déniche 209 secrets uniques dans des readme et 675 dans une forme de dossier « test ».

extensions de fichiers PyPi

À consulter en complément :

L’art de protéger les secrets : 8 concepts essentiels pour les ingénieurs en cybersécurité
Spoofing sur GitHub : ceci n’est pas un commit Dependabot
Dans le sillage de GitHub, PyPi impose le MFA
Typosquatting de dépendances : gare à cette pratique résiduelle
Stockage sécurisé : les solutions certifiées CSPN

Illustration principale générée par IA