Nick2bad4u/Github-Security-CodeScanning-Alerts-Skill

Une compétence pour agent Copilot / IA permettant de gérer les alertes de sécurité GitHub, notamment le code scanning, Dependabot, etc.

Qu'est-ce que Github-Security-CodeScanning-Alerts-Skill ?

Cette compétence permet à un agent d'IA (comme Claude Code, Cursor ou Copilot) d'inspecter, gérer et modifier les alertes de sécurité des dépôts GitHub : alertes de code scanning, Dependabot, secrets, et malwares. Elle s'appuie sur un script Python (manage_github_security_alerts.py) qui utilise l'API REST GitHub, et s'authentifie via une variable d'environnement (GITHUB_TOKEN ou GH_TOKEN). L'agent peut exécuter des commandes comme summary, export-alerts, bulk-update-alerts, repo-security-overview, list-code-scanning, update-dependabot, etc. La compétence est conçue pour être sûre : elle refuse d'exposer les secrets non masqués sauf demande explicite, et recommande d'utiliser un gestionnaire de secrets pour l'authentification. Elle prend en charge GitHub.com et les instances GHES, et offre des options de filtrage par état, sévérité, écosystème, etc. Idéale pour les workflows de triage en masse, les corrections rapides et la vérification post-changement.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add Nick2bad4u/Github-Security-CodeScanning-Alerts-Skill

Installed? Explore more Recherche et analyse de données skills: affaan-m/uspto-database, affaan-m/scholar-evaluation, affaan-m/literature-review · View all 6 →

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Gestion des alertes de sécurité GitHub

Vue d'ensemble

Utilisez cette compétence lorsqu'un utilisateur demande d'inspecter ou de gérer les alertes de sécurité d'un dépôt GitHub, notamment :

  • alertes de code scanning
  • alertes Dependabot
  • alertes de malware Dependabot
  • alertes de secret scanning
  • emplacements des alertes de secret scanning
  • historique du secret scanning
  • aperçu des paramètres de sécurité du dépôt
  • inspection brute de l'API de sécurité GitHub sur plusieurs dépôts
  • export en masse des alertes pour triage hors ligne ou workflows de rapport
  • mutation en masse des alertes pour les workflows de nettoyage à grande échelle

Le script fourni est indépendant du dépôt :

  • indiquez --repo pour pointer vers un checkout local
  • il détecte automatiquement owner/repo et l'hôte GitHub à partir du remote git
  • ou passez --repository owner/repo explicitement
  • authentifiez-vous via une variable d'environnement plutôt que de mettre un jeton en ligne de commande
  • vous pouvez éventuellement remplacer l'URL de base de l'API ou du web pour les environnements personnalisés

Compatibilité

Nécessite Python 3. Utilise directement l'API REST GitHub avec un jeton fourni via une variable d'environnement telle que GITHUB_TOKEN ou GH_TOKEN. Prend en charge GitHub.com et la dérivation standard de l'URL de base de l'API GHES à partir des remotes git, avec une solution de repli via l'API brute pour tout ce qui n'est pas encore encapsulé.

Indications d'invocation

Utilisez repo lorsque la cible est un checkout local, avec . par défaut. Utilisez les valeurs optionnelles repository, api_base_url, web_base_url et token_env lorsque l'auto-détection ne suffit pas. Les commandes courantes incluent summary, export-alerts, bulk-update-alerts, repo-security-overview, list-code-scanning, show-code-scanning, update-code-scanning, list-dependabot, show-dependabot, update-dependabot, list-malware, show-malware, update-malware, list-secret-scanning, show-secret-scanning, update-secret-scanning, list-secret-locations, secret-scan-history et api-call.

Modèle de sécurité

Ne collez pas les jetons GitHub dans les arguments de commande. N'utilisez pas --show-secret-values sauf si l'utilisateur demande explicitement des valeurs secrètes non masquées et confirme le risque d'exposition. Préférez les métadonnées d'alerte masquées, les emplacements des secrets, la validité et l'état de résolution. Si une sortie non masquée est nécessaire pour la correction, ne collez pas de matière secrète dans le chat, les commentaires de tickets, les PR, les commits, les journaux ou les rapports sauvegardés.

Modèle préféré :

$env:GITHUB_TOKEN = Get-Secret GITHUB_TOKEN -AsPlainText

Si un dépôt utilise un nom de variable d'environnement différent, exportez d'abord cette variable ou passez le nom de la variable avec --token-env.

Exemples :

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" summary --repo "."
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" summary --repo "." --token-env GITHUB_TOKEN

Options CLI partagées

  • repo : chemin dans le checkout du dépôt cible (par défaut .)
  • repository : remplacement explicite facultatif de owner/repo
  • api_base_url : remplacement explicite facultatif de l'URL de base de l'API
  • web_base_url : remplacement explicite facultatif de l'URL de base du web pour les liens rendus
  • token_env : nom facultatif de la variable d'environnement contenant le jeton ; répétable pour les solutions de repli
  • json : indicateur facultatif de sortie lisible par machine

Note importante concernant les alertes de malware

GitHub présente les découvertes de malware sous forme d'alertes Dependabot de type malware.

GitHub ne fournit pas de famille d'alertes de dépôt distincte avec sa propre surface REST dédiée. Le script fourni traite donc les malwares comme un sous-ensemble filtré des alertes Dependabot et croise le GHSA de chaque avis d'alerte avec la base de données des avis GitHub pour identifier les avis dont le type est malware.

Cela signifie :

  • list-malware, show-malware et update-malware sont basés sur les API d'alertes Dependabot
  • la classification des malwares est la plus fiable sur GitHub.com, où le point de terminaison de la base de données des avis est disponible
  • si la consultation du type d'avis n'est pas disponible sur l'hôte cible, le script signale cet état plutôt que de deviner silencieusement

Démarrage rapide

1. Inspecter l'état de sécurité actuel

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" summary --repo "."

2. Afficher l'aperçu des paramètres de sécurité du dépôt

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" repo-security-overview --repo "."

2.5 Exporter les ensembles complets d'alertes pour un triage en masse

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" export-alerts --repo "." --json

3. Exemple de liste de code scanning

Utilise les entrées partagées repo, repository, api_base_url, web_base_url, token_env et json, ainsi que des filtres de code scanning tels que state, severity, tool_name, tool_guid, ref et pr. Produit code_scanning_alerts sous forme de texte formaté ou de JSON lisible par machine.

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-code-scanning --repo "." --state open --severity high,error

3.5 Fermer ou rouvrir des alertes en masse

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" bulk-update-alerts --repo "." --surface code-scanning --select-state open --target-state dismissed --dismissed-reason "false positive" --comment "Reviewé et intentionnellement fermé." --limit 10 --dry-run --json

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" bulk-update-alerts --repo "." --surface dependabot --select-state open --target-state dismissed --dismissed-reason tolerable_risk --comment "Accepté jusqu'à la prochaine mise à jour des dépendances." --limit 25 --dry-run --json

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" bulk-update-alerts --repo "." --surface secret-scanning --select-state open --target-state resolved --resolution used_in_tests --limit 25 --dry-run --json

4. Fermer ou rouvrir une alerte de code scanning

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" update-code-scanning --repo "." --alert 42 --state dismissed --dismissed-reason false_positive --comment "Faux positif après revue manuelle." --dry-run
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" update-code-scanning --repo "." --alert 42 --state open

5. Exemple de liste Dependabot

Utilise les entrées partagées repo, repository, api_base_url, web_base_url, token_env et json, ainsi que des filtres Dependabot tels que state, severity, ecosystem, package, manifest, has, assignee et scope. Produit dependabot_alerts sous forme de texte formaté ou de JSON lisible par machine.

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-dependabot --repo "." --state open --ecosystem npm --has patch

6. Fermer ou rouvrir une alerte Dependabot

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" update-dependabot --repo "." --alert 7 --state dismissed --dismissed-reason tolerable_risk --comment "Accepté jusqu'à la prochaine mise à jour trimestrielle." --dry-run
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" update-dependabot --repo "." --alert 7 --state open

7. Exemple de liste de malwares

Utilise les entrées partagées repo, repository, api_base_url, web_base_url, token_env et json, ainsi que des filtres de malwares basés sur Dependabot tels que state, severity, ecosystem, package, manifest et has. Produit malware_alerts et les éventuels lookup_failures issus de la classification du type d'avis.

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-malware --repo "." --state open

8. Exemple de liste de secret scanning

Utilise les entrées partagées repo, repository, api_base_url, web_base_url, token_env et json, ainsi que des filtres de secret scanning tels que state, secret_type, resolution, assignee, validity, et des indicateurs de fuite ou multi-dépôt. Produit secret_scanning_alerts avec les valeurs secrètes masquées par défaut.

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-secret-scanning --repo "." --state open

Les valeurs secrètes sont cachées par défaut. Conservez ce comportement par défaut, sauf si l'utilisateur confirme explicitement qu'une sortie non masquée est nécessaire.

9. Résoudre ou rouvrir une alerte de secret scanning

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" update-secret-scanning --repo "." --alert 11 --state resolved --resolution revoked --comment "Jeton révoqué et remplacé." --dry-run
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" update-secret-scanning --repo "." --alert 11 --state open

10. Afficher les emplacements des secrets et l'historique du scan

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-secret-locations --repo "." --alert 11
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" secret-scan-history --repo "."

11. Utiliser le repli vers l'API brute pour tout ce qui n'est pas encore encapsulé

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" api-call --repo "." --endpoint /repos/OWNER/REPO/code-scanning/default-setup

Workflow

  1. Résoudre l'authentification de manière sécurisée.
    • Préférez une variable d'environnement comme GITHUB_TOKEN.
    • Si nécessaire, chargez-la depuis un gestionnaire de secrets dans une variable d'environnement d'abord.
    • N'affichez jamais le jeton dans les journaux ou les sorties de chat.
  2. Résoudre le dépôt cible.
    • Préférez --repo et l'auto-détection à partir du remote git.
    • Repliez-vous sur --repository owner/repo lorsque le checkout local est indisponible ou non standard.
  3. Inspecter les résultats actuels.
    • Exécutez summary en premier.
    • Utilisez export-alerts lorsque vous avez besoin d'un instantané JSON plus complet pour un triage en masse ou des rapports externes.
    • Utilisez les commandes list/show pour la famille d'alertes qui vous intéresse.
    • Utilisez repo-security-overview lorsque la question concerne l'activation ou les paramètres de sécurité disponibles.
  4. Classifier les résultats.
    • Corrigez les défauts réels dans le code ou la configuration des dépendances lorsque c'est approprié.
    • Fermez une alerte uniquement lorsque vous avez une justification claire.
    • Rouvrez les alertes lorsque la fermeture ou la résolution précédente n'est plus valide.
    • Utilisez bulk-update-alerts lorsqu'un dépôt contient des dizaines ou des centaines d'alertes déjà examinées, mal triées, qui nécessitent la même action.
  5. Appliquer les mutations avec précaution.
    • Préférez --dry-run d'abord pour les modifications risquées.
    • Ajoutez un commentaire de fermeture ou de résolution court et exploitable.
    • Rappelez-vous que les opérations d'écriture nécessitent les permissions GitHub correspondantes.
  6. Vérifier l'état après changement.
    • Réexécutez la commande list/show pertinente.
    • Pour les corrections de code ou de dépendances, attendez le prochain cycle d'analyse GitHub si vous attendez que l'alerte disparaisse naturellement.

Ressources fournies

Script d'assistance

scripts/manage_github_security_alerts.py est le script d'assistance indépendant du dépôt pour les alertes de sécurité GitHub.

Commandes prises en charge :

  • summary
  • export-alerts
  • bulk-update-alerts
  • repo-security-overview
  • list-code-scanning
  • show-code-scanning
  • update-code-scanning
  • list-dependabot
  • show-dependabot
  • update-dependabot
  • list-malware
  • show-malware
  • update-malware
  • list-secret-scanning
  • show-secret-scanning
  • update-secret-scanning
  • list-secret-locations
  • secret-scan-history
  • api-call

Modules d'implémentation :

  • github_security_api.py
  • github_security_cli.py
  • github_security_common.py
  • github_security_operations.py
  • github_security_render.py

Exemples :

python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" summary --repo "." --json
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" export-alerts --repo "." --json
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" bulk-update-alerts --repo "." --surface code-scanning --select-state open --target-state dismissed --dismissed-reason "false positive" --comment "Reviewé et intentionnellement fermé." --limit 10 --dry-run --json
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-code-scanning --repo "." --state open --per-page 100 --json
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" update-code-scanning --repo "." --alert 42 --state dismissed --dismissed-reason false_positive --comment "Faux positif après revue." --dry-run
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-dependabot --repo "." --state open --ecosystem npm --json
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-malware --repo "." --json
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" update-dependabot --repo "." --alert 7 --state dismissed --dismissed-reason tolerable_risk --comment "Accepté temporairement." --dry-run
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-secret-scanning --repo "." --state open --json
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" update-secret-scanning --repo "." --alert 11 --state resolved --resolution revoked --comment "Révoqué et remplacé." --dry-run
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" list-secret-locations --repo "." --alert 11 --json
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" secret-scan-history --repo "." --json
python "<chemin-vers-la-competence>/scripts/manage_github_security_alerts.py" api-call --repo "." --endpoint /repos/OWNER/REPO/dependabot/alerts --query-param state=open --json

Skills associés