🔍 GitHub CVE Scanner - Guide d'utilisation
Script pour analyser les dépôts GitHub à la recherche de vulnérabilités connues dans les projets React et Next.js.
📋 Vulnérabilités détectées
Le scanner vérifie les CVE suivantes :
Prérequis
- Un navigateur web moderne (Chrome, Firefox, Edge, etc.)
- Accès à GitHub (facultatif : Personal Access Token pour les dépôts privés)
Procédure pas à pas
1. Ouvrir la console du navigateur
- Accédez à n'importe quelle page de GitHub (ex. :
https://github.com)
- Ouvrez les DevTools :
- Chrome/Edge :
F12 ou Ctrl+Shift+I (Windows) / Cmd+Option+I (Mac)
- Firefox :
F12 ou Ctrl+Shift+K (Windows) / Cmd+Option+K (Mac)
- Allez dans l'onglet Console
2. Copier et exécuter le script
- Ouvrez le fichier
main.js
- Copiez tout le contenu du fichier
- Collez-le dans la console du navigateur
- Appuyez sur
Entrée pour exécuter
Le script posera une série de questions interactives :
3.1. Authentification (première question)
🔐 Scan private repos too?
OK = Enter PAT
Cancel = Public only
- OK : vous serez invité à saisir un Personal Access Token (PAT) GitHub
- Permet d'analyser les dépôts privés
- Nécessaire pour accéder aux organisations
- Cancel : seuls les dépôts publics seront analysés
Comment créer un PAT :
- Accédez à :
https://github.com/settings/tokens
- Cliquez sur « Generate new token » → « Generate new token (classic) »
- Donnez un nom descriptif
- Sélectionnez le périmètre
repo (accès complet aux dépôts)
- Cliquez sur « Generate token »
- Copiez le token immédiatement (il ne sera plus affiché)
3.2. Périmètre de l'analyse (si authentifié)
🔍 What do you want to scan?
OK = Organizations
Cancel = User Profile
- OK : analyser les organisations
- Cancel : analyser uniquement le profil de l'utilisateur
3.3. Sélection des organisations (si vous avez choisi Organizations)
🏢 Scan all organizations?
OK = All organizations
Cancel = Single organization
Option A - Toutes les organisations (OK) :
- Le script récupérera automatiquement toutes les organisations de l'utilisateur authentifié
- Il analysera tous les dépôts de toutes les organisations
Option B - Une organisation spécifique (Cancel) :
- Vous serez invité à saisir l'URL ou le nom de l'organisation :
🔗 Enter organization URL or name:
Example: github.com/my-org or my-org
- Formats acceptés :
github.com/minha-org
https://github.com/minha-org
minha-org (juste le nom)
3.4. Profil de l'utilisateur (si non authentifié ou si vous avez choisi Profile)
- Si vous êtes sur une page de profil GitHub, le script le détectera automatiquement
- Dans le cas contraire, il vous sera demandé :
📊 Fonctionnalités
✨ Vérification par branches
Le script vérifie toutes les branches de chaque dépôt, pas seulement la branche par défaut. Cela garantit que les vulnérabilités présentes dans les branches de développement, de staging ou dans d'autres branches actives soient détectées.
🏢 Prise en charge des organisations
- Analyse les dépôts des organisations GitHub
- Option d'analyser toutes les organisations ou une seule
- Prend en charge la saisie de l'URL ou du nom de l'organisation
🔒 Accès aux dépôts privés
Avec un Personal Access Token valide, le script peut :
- Accéder aux dépôts privés
- Analyser les organisations privées
- Vérifier les branches des dépôts privés
📈 Résultats
Après l'exécution, le script affichera :
Tableau des résultats
Un tableau dans la console affichant :
- Repo : Nom du dépôt
- Branch : Nom de la branche vérifiée
- Next : Version de Next.js (si présente)
- React : Version de React (si présente)
- ReactDOM : Version de react-dom (si présente)
- RSCWebpack : Version de react-server-dom-webpack (si présente)
- RSCParcel : Version de react-server-dom-parcel (si présente)
- RSCTurbopack : Version de react-server-dom-turbopack (si présente)
- Status : Statut de la vulnérabilité
✅ Safe : Aucune vulnérabilité détectée
⚠️ CVE-XXXX-XXXXX : Vulnérabilité trouvée
Résumé
📊 Summary:
Total repos: 15
Branches scanned: 23
With package.json: 20
Skipped: 3 (no package.json)
⚠️ 5 vulnerable repo(s) found!
ou
✅ No vulnerabilities found!
⚙️ Configuration technique
- Délai entre les requêtes API : 200 ms (pour éviter le rate limiting)
- Délai entre les analyses : 30 ms
- Résultats par page : 100 éléments
- Prise en charge des dépôts privés : Oui (avec PAT)
- Vérification des branches : toutes les branches de chaque dépôt
🔧 Résolution de problèmes
Erreur : « Token invalid »
- Vérifiez que le token a été copié correctement
- Assurez-vous que le token dispose du périmètre
repo
- Vérifiez que le token n'a pas expiré
Erreur : « No repositories found »
- Vérifiez que l'utilisateur/l'organisation existe
- Si vous analysez des organisations, vérifiez que vous y avez accès
- Vérifiez qu'il y a des dépôts dans le profil/l'organisation
Erreur : « No organizations found »
- Vérifiez que vous êtes authentifié avec un token valide
- Assurez-vous de faire partie d'organisations
- Le token doit disposer des autorisations pour accéder aux organisations
Analyse très lente
- Le script applique des délais intentionnels pour éviter le rate limiting
- Les dépôts comportant de nombreuses branches prendront plus de temps
- Les organisations comptant de nombreux dépôts prendront plus de temps
📝 Remarques importantes
- Rate Limiting : le script respecte les limites de l'API GitHub grâce à des délais automatiques
- Confidentialité : le token est utilisé uniquement localement dans le navigateur et n'est pas envoyé à des serveurs externes
- Précision : le scanner ne vérifie que le
package.json à la racine du dépôt
- Branches : toutes les branches sont vérifiées, mais seules celles contenant un
package.json sont signalées
- Versions : le scanner détecte les versions vulnérables sur la base des définitions de CVE
🛡️ Sécurité
- Le script s'exécute entièrement dans le navigateur (côté client)
- Aucune donnée n'est envoyée à des serveurs externes
- Le Personal Access Token est utilisé uniquement pour les requêtes vers l'API GitHub
- Il est recommandé d'utiliser des tokens avec les périmètres minimaux nécessaires
📄 Licence
Licence MIT
🔄 Version
3.0.0
Développé pour détecter les vulnérabilités de sécurité dans les projets React et Next.js