Skip to content

Cet outil n'est ni affilié à GitHub, Inc. ou à Microsoft Corporation, ni approuvé ou sponsorisé par elles. GitHub et GitHub Actions sont des marques de GitHub, Inc. Les autres noms sont des marques de leurs propriétaires respectifs.

Forensique des journaux d’audit · dans votre navigateur

Notre organisation GitHub a-t-elle été compromise ?

Déposez vos exports du journal d'audit GitHub — et, si vous les avez, les événements Git et les logs d'exécution Actions — pour obtenir un verdict, une chronologie de l'incident supply chain et un plan de remédiation. Analyse dans votre navigateur en WebAssembly : rien n'est envoyé.

  • 31 règles de détection
  • Rust → WebAssembly
  • aucun envoi

Déposez ici vos exports du journal d'audit

Journal d'audit d'organisation ou d'entreprise (export JSON / CSV, sortie de l'API REST, streaming .json.log.gz), export des événements Git (.json.gz), archives de logs Actions (.zip), alertes secret scanning (JSON). Fichiers, dossiers ou ZIP — plusieurs à la fois.

L'exemple est un incident fictif (organisation « northwind-labs ») : le token d'un développeur volé par un infostealer, rejoué depuis un VPS.

Tout s'exécute dans votre navigateur. Vos journaux ne quittent jamais cet appareil. · Outil indépendant — non affilié à GitHub.

Comment récupérer vos données

De zéro à un fichier dans la zone de dépôt en deux minutes environ. Commencez par le premier onglet : il fonctionne avec tous les forfaits.

  1. 1. CollecterExportez le journal d'audit (ci-dessous)
  2. 2. DéposerLe fichier, dossier ou ZIP, dans l'outil
  3. 3. Reste en localAnalysé dans votre navigateur, rien n'est envoyé

Journal d'audit de l'organisation, depuis l'interface web

Prérequispropriétaire de l'organisation. Tous les forfaits (Free, Team, Enterprise Cloud).

  1. Sur GitHub, ouvrez l'organisation → Settings → Archive → Logs → Audit log.
  2. Facultatif : saisissez un filtre de date dans la recherche, par exemple created:>=2026-09-01, puis Entrée.
  3. Cliquez sur Export → JSON (le CSV fonctionne aussi, le JSON conserve les champs imbriqués).
  4. Déposez le fichier .json téléchargé dans l'outil.

Une exécution de workflow suspecte ? Récupérez aussi ses logs

Prérequisaccès en lecture au dépôt. Tous les forfaits.

  1. Dépôt → Actions → ouvrez l'exécution.
  2. Menu ⋯ (en haut à droite) → Download log archive.
  3. Déposez le ZIP tel quel, avec le journal d'audit.

Pièges

  • Rétention : 180 jours pour le journal d'audit, 7 jours pour les événements Git, 90 jours par défaut pour les logs Actions. Exportez aujourd'hui, les événements Git d'abord.
  • L'export web ne contient pas les événements Git et s'arrête à 100 Mo compressés ou 10 minutes de traitement : découpez les longues périodes avec des filtres created:>= / created:<=. Les chevauchements ne posent pas de problème.
  • Pas d'adresses IP tant qu'un propriétaire n'a pas activé leur affichage (Enterprise Cloud) : sans elles, les détections de nouvelle IP et de nouveau pays ne peuvent pas se déclencher. Les heures sont en UTC.

Ce que fait cet outil

GitHub est souvent la première porte d'entrée dans le cloud : un seul token d'accès personnel volé donne à l'attaquant votre code source, vos pipelines CI/CD et — via les secrets Actions — vos comptes cloud. Le journal d'audit de l'organisation en garde l'essentiel : qui s'est authentifié avec quel token, depuis quelle IP, a cloné quoi, a modifié quel paramètre.

Cet outil lit ces exports dans votre navigateur, applique un ensemble de règles de détection publiées et donne un verdict global (Sain / Suspect / Compromis), les constats avec leurs preuves et techniques MITRE ATT&CK, une chronologie de l'incident, un pivot par entité (acteurs, tokens, IP, dépôts, workflows, runners, applications) et un plan de remédiation.

Ce que vous pouvez déposer

  • Journal d'audit d'organisation ou d'entreprise exporté depuis l'interface web (JSON ou CSV).
  • Sortie de l'API REST (GET /orgs/{org}/audit-log, avec include=all pour les événements Git), pages concaténées ou non.
  • Fichiers de streaming du journal d'audit (Amazon S3, Azure Blob, Google Cloud Storage) : arborescence YYYY/MM/DD/HH/MM/<uuid>.json.log.gz, JSON lines compressé en gzip — déposez le dossier entier.
  • Export des événements Git (export-<entreprise>-<timestamp>.json.gz) : git.clone, git.fetch et git.push avec les métadonnées de token.
  • Archives de logs d'exécution GitHub Actions (le ZIP de « Download log archive »).
  • Alertes secret scanning telles que renvoyées par l'API REST (JSON).

Ce qui est détecté

Les détections sont des données, pas du code : chaque règle est une entrée JSON relisible (conditions, seuil ou référence, gravité, techniques ATT&CK, remédiation) avec des cas de test positifs et négatifs. Les règles de cette version :

RègleGravitéATT&CK
Une étape de workflow encode ou exfiltre des secrets
actions-secret-exfil
CritiqueT1552.001, T1567
Token utilisé depuis un nouveau pays
token-new-country
ÉlevéeT1550.001, T1078.004
Clonage massif de dépôts
git-clone-burst
ÉlevéeT1213.003
Dépôt rendu public
repo-made-public
ÉlevéeT1567
Dépôt transféré à l'extérieur
repo-transferred
ÉlevéeT1537
Plusieurs dépôts supprimés
repo-mass-delete
ÉlevéeT1485
Propriétaire d'organisation ou d'entreprise ajouté
owner-granted
ÉlevéeT1098.003
Exigence de double authentification désactivée
two-factor-disabled
ÉlevéeT1556
SSO SAML désactivé ou reconfiguré
sso-changed
ÉlevéeT1556
Liste d'adresses IP autorisées désactivée
ip-allowlist-disabled
ÉlevéeT1562.007
Streaming du journal d'audit supprimé ou modifié
audit-stream-changed
ÉlevéeT1562.008
Protection de branche ou ruleset supprimé
branch-protection-removed
ÉlevéeT1562
Protection d'environnement de déploiement supprimée
environment-protection-removed
ÉlevéeT1562
Compte actif depuis un nouveau pays
actor-new-country
MoyenneT1078.004
Nombreuses archives de code téléchargées
archive-download-burst
MoyenneT1213.003
Accès admin donné à un collaborateur
collaborator-admin
MoyenneT1098
Restrictions des applications tierces désactivées
oauth-restrictions-disabled
MoyenneT1562
Politique des tokens d'accès personnels affaiblie
pat-policy-weakened
MoyenneT1562
Protection de branche contournée
branch-protection-override
MoyenneT1562
Runner auto-hébergé enregistré
self-hosted-runner-registered
MoyenneT1072
Longue chaîne encodée affichée dans un log de workflow
actions-encoded-output
MoyenneT1552.001, T1027
Le secret scanning a trouvé un secret divulgué
secret-leak-alert
MoyenneT1552.001
Protection push des secrets contournée
push-protection-bypass
MoyenneT1552.001
Clé SSH ou clé de déploiement ajoutée
deploy-key-added
MoyenneT1098.004
Token utilisé depuis une nouvelle adresse IP
token-new-ip
FaibleT1550.001
Fork des dépôts privés autorisé
private-forking-enabled
FaibleT1537
Secret Actions créé ou modifié
actions-secret-created
Faible
Exécution de workflow depuis une branche jamais vue
workflow-new-branch
FaibleT1677
Token fine-grained demandé ou autorisé
fine-grained-token-granted
FaibleT1550.001
Application installée ou application OAuth approuvée
app-authorized
FaibleT1528
Webhook créé
webhook-created
FaibleT1567

Comment le verdict est décidé

  • Compromis : au moins un constat critique (par exemple des secrets affichés par un workflow), ou plusieurs constats distincts de gravité élevée sur le même acteur, token ou adresse IP.
  • Suspect : au moins un constat de gravité élevée ou moyenne.
  • Sain : aucun constat au-dessus de faible. Cela ne couvre que ce que contiennent les journaux — vérifiez les notes de couverture (affichage des IP, événements Git, métadonnées de token) et la période couverte.

Quand des clés cloud ont fuité

Les secrets Actions sont le plus souvent des identifiants cloud. Quand ils apparaissent dans les preuves, l'étape suivante est le compte cloud lui-même — poursuivez avec les outils frères de cette série :

Limites

  • Le journal d'audit n'enregistre pas le contenu des fichiers : un workflow modifié est déduit des exécutions (nouvelle branche, secrets affichés dans le log), pas du diff. Vérifiez vous-même l'historique de .github/workflows.
  • Sans « Display IP addresses », les exports n'ont pas d'actor_ip et la localisation est limitée : les détections basées sur l'IP ne peuvent pas se déclencher.
  • Les événements Git (clones, fetchs, pushs) ne sont conservés que 7 jours et ne figurent pas dans l'export JSON/CSV de l'interface web : sans eux, le clonage massif est invisible.
  • Les règles sont des heuristiques avec des seuils (10 dépôts clonés en une heure environ, une référence de 24 heures pour les nouvelles IP et nouveaux pays) : adaptez-les à votre organisation. Un verdict sain n'est pas une preuve d'absence.
  • Le tableau liste les 100 000 premiers événements ; tous sont analysés. Les journaux de sécurité des comptes personnels ne sont pas couverts.

FAQ

Mes journaux d'audit sont-ils envoyés quelque part ?

Non. L'analyseur est écrit en Rust, compilé en WebAssembly, et s'exécute dans un Web Worker de votre navigateur ; les fichiers sont lus en flux depuis le disque et décompressés localement. Il n'y a aucun point d'envoi, et l'outil fonctionne hors ligne une fois la page chargée.

Comment savoir si un token GitHub a été volé ?

Cherchez le même hashed_token utilisé depuis une nouvelle adresse IP ou un nouveau pays, des rafales de git.clone sur de nombreux dépôts, et une activité du token hors des horaires de son propriétaire. Le journal d'audit enregistre hashed_token, programmatic_access_type et token_scopes pour les événements authentifiés par token ; cet outil établit une référence par token et signale les nouvelles localisations.

Comment retrouver le token correspondant à un hashed_token ?

hashed_token est le SHA-256 du token encodé en base64. Si vous avez un token candidat, calculez-le avec : echo -n TOKEN | openssl dgst -sha256 -binary | base64 — puis cherchez hashed_token:"VALEUR" dans le journal d'audit. Les propriétaires d'entreprise peuvent aussi exporter l'inventaire des identifiants, qui liste les valeurs hashed_token.

Pourquoi je ne vois pas d'événements git.clone ?

Les événements Git ne figurent pas dans l'export JSON/CSV du journal d'audit de l'interface web. Récupérez-les via le menu « Export Git Events » de l'entreprise, l'API REST avec include=git ou include=all, ou le streaming du journal d'audit — et vite : ils ne sont conservés que 7 jours.

Un workflow peut-il divulguer des secrets alors que GitHub les masque ?

Oui. GitHub remplace les valeurs connues des secrets par *** dans les logs, mais un script qui les encode en base64 (deux fois, ou inversés) affiche une chaîne non masquée qui se décode en secret. Cet outil signale les scripts qui envoient des secrets ou l'environnement dans des encodeurs ou vers des points externes, ainsi que les longues chaînes encodées dans la sortie.

Est-ce un outil officiel de GitHub ?

Non. C'est un outil indépendant, ni affilié à GitHub, Inc. ni approuvé par elle. Il lit les formats d'export documentés du journal d'audit.

Que faire ensuite

Si le verdict est Suspect ou Compromis, commencez par le plan de remédiation généré par l'outil, conservez les exports d'origine en lecture seule et suivez la documentation officielle de GitHub (sur docs.github.com) :

Documentation officielle de GitHub, Inc. ; ce site en est indépendant.

Ce que le journal d'audit GitHub n'enregistre pas : rétention de 180 et 7 jours, API et événements Git selon l'offre, IP masquées, ni contenus ni secrets lus.
Attaque supply chain GitHub fictive analysée de bout en bout : PAT volé, 38 dépôts clonés, clés AWS affichées par un workflow, protection de branche retirée.
Clés AWS, Google Cloud ou Azure fuitées depuis GitHub Actions ou un dépôt : désactivez la clé, tracez-la dans les logs d'audit cloud, puis passez à OIDC.

Cet outil n'est ni affilié à GitHub, Inc. ou à Microsoft Corporation, ni approuvé ou sponsorisé par elles. GitHub et GitHub Actions sont des marques de GitHub, Inc. Les autres noms sont des marques de leurs propriétaires respectifs.