Skip to content
KitploitKITPLOIT
OutilsExploitsBlog
Log in
Soumettre
OutilsExploitsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

FluxContactConfidentialité© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2026-44590 — Preuve de concept pour CVE-2026-44590, une injection de commande dans le workflow GitHub Actions de Sherlock permettant une exécution de code à distance (RCE) et l'exfiltration de GITHUB_TOKEN via pull_request_target. | Kitploit
Outils/GitHubGitHub/astaruf/cve-2026-44590
Analyse des VulnérabilitésExploitationExploitation d'Applications WebSécurité de la Chaîne LogistiqueApprentissage et ÉducationRed Teaming
GitHubastaruf/cve-2026-44590

CVE-2026-44590

Preuve de concept pour CVE-2026-44590, une injection de commande dans le workflow GitHub Actions de Sherlock permettant une exécution de code à distance (RCE) et l'exfiltration de GITHUB_TOKEN via pull_request_target.

Voir le dépôt
21il y a 5 moisPas encore vérifié
Site web

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2026-44590 - sherlock-project/sherlock CI - RCE via pull_request_target Injection → Supply Chain Compromise

Découvert et signalé par : Astaruf

Analyse complète : https://nstsec.com/en/posts/sherlock-rce-pull-request-target-cve-2026-44590/

Avis en amont : Avis GHSA de sherlock-project/sherlock

Entrée NVD : https://nvd.nist.gov/vuln/detail/CVE-2026-44590

Enregistrement CVE : https://www.cve.org/CVERecord?id=CVE-2026-44590


Ce dépôt contient la preuve de concept pour CVE-2026-44590, une injection de commande dans le workflow GitHub Actions validate_modified_targets.yml de sherlock-project/sherlock. N'importe quel utilisateur GitHub peut ouvrir une pull request qui déclenche l'exécution arbitraire de commandes dans le contexte CI privilégié, exfiltrer le GITHUB_TOKEN du workflow et auto-approuver la PR malveillante, le tout sans aucune interaction humaine.

Pour l'analyse technique complète (analyse de la cause racine, déroulement de l'exploitation, discussion sur l'impact et un chapitre sur ce qu'un attaquant pourrait faire dans des scénarios réels), consultez l'article de blog :

nstsec.com/en/posts/sherlock-rce-pull-request-target-cve-2026-44590

Ce README se concentre exclusivement sur le script PoC : ce qu'il fait, comment l'exécuter et à quoi s'attendre.

À propos de poc.py

poc.py est un script Python autonome unique (stdlib uniquement) qui automatise toute la chaîne d'attaque de bout en bout :

  • fork sherlock-project/sherlock si nécessaire
  • (optionnellement) ramène le master du fork au commit précédant le correctif afin que le bug puisse être reproduit même après le correctif en amont
  • lance un écouteur OAST (interactsh-client)
  • crée et pousse une branche de PR malveillante
  • déclenche le workflow vulnérable
  • extrait le GITHUB_TOKEN du rappel OAST (en --mode exfil) et le décode en clair
  • utilise le jeton volé pour auto-approuver la même PR via l'API GitHub
  • affiche un verdict final clair : VULNERABILITY CONFIRMED ou FIX VERIFIED
  • nettoie après lui-même (supprime la branche PoC, termine interactsh-client)

Il y a exactement une étape manuelle requise (cliquer sur la bannière « I understand my workflows » de GitHub la première fois par fork), car aucune API publique ne permet de la faire disparaître. Le script détecte ce cas et fait une pause avec une invite claire.

Démarrage rapide

Vérifier que le correctif en amont fonctionne (comportement par défaut)

python3 poc.py --fork-owner <votre-nom-d-utilisateur-github>

Fork le dépôt (si nécessaire), synchronise avec l'amont (master corrigé), ouvre une PR malveillante, exécute la chaîne d'attaque et rapporte FIX VERIFIED car le workflow corrigé bloque la charge utile avant qu'aucune commande shell ne s'exécute.

Reproduire la vulnérabilité d'origine

python3 poc.py --fork-owner <votre-nom-d-utilisateur-github> --vulnerable

Identique à ci-dessus, mais ramène d'abord le master du fork au commit précédant le correctif (271608fb). Verdict attendu : VULNERABILITY CONFIRMED.

Démontrer l'impact complet (exfiltration du jeton + auto-approbation de la PR)

python3 poc.py --fork-owner <votre-nom-d-utilisateur-github> --vulnerable --mode exfil

La charge utile d'exfiltration envoie git config --list à l'OAST et dort pendant 180 secondes pour maintenir le workflow (et donc le GITHUB_TOKEN) actif. Pendant que le workflow dort, le script extrait le jeton du journal OAST, le décode et appelle immédiatement l'API GitHub pour approuver la PR. La PR se retrouve approuvée par github-actions[bot].

Prérequis

  • Python 3.8+ (aucune dépendance tierce, uniquement la stdlib)
  • gh (GitHub CLI), authentifié :
    gh auth login
    
  • git
  • interactsh-client (optionnel mais recommandé). Lorsqu'il est installé, le script le lance automatiquement et vérifie le rappel dans le script :
    go install github.com/projectdiscovery/interactsh/cmd/interactsh-client@latest
    
    Si vous préférez utiliser votre propre point de terminaison OAST (Burp Collaborator, oast.fun via l'interface web, requestbin, etc.), transmettez-le avec --oast-url et l'étape de vérification automatique sera ignorée.

Le script ne nécessite pas qu'un fork existe au préalable, il en crée un automatiquement.

Modes

--mode harmless (par défaut)

La charge utile est un seul POST curl avec une chaîne de confirmation statique. Aucun secret n'est lu, aucun appel API n'est effectué, le seul effet secondaire est le rappel OAST. Utilisez ce mode pour confirmer que la vulnérabilité existe sans exposer aucune information d'identification.

--mode exfil

La charge utile envoie git config --list (qui contient le GITHUB_TOKEN encodé en base64 sous http.https://github.com/.extraheader) à l'OAST, puis dort pendant 180 secondes. Le script ensuite :

  1. Interroge le journal OAST jusqu'à ce que le dump arrive.
  2. Extrait le blob base64 avec une expression régulière.
  3. Le décode et affiche l'information d'identification en clair : x-access-token:ghs_XXXXXXXX....
  4. Supprime le préfixe x-access-token: et utilise le jeton brut pour appeler POST /repos/<fork>/pulls/<n>/reviews avec la charge utile d'approbation standard ({"event":"APPROVE","body":"All checks passed. LGTM!"}).
  5. La PR apparaît comme approuvée par github-actions[bot], impossible à distinguer d'une automatisation CI légitime.

Une fois l'approbation enregistrée, le script ignore le reste de la période de sommeil de 180 secondes du workflow, car la chaîne d'attaque est terminée et attendre que le runner expire n'apporte rien.

Options

DrapeauDescription
--fork-owner <user>Obligatoire. Nom d'utilisateur GitHub qui possède (ou possédera) le fork
--fork-name <name>Nom du dépôt du fork (par défaut : sherlock)
--oast-url <url>Point de terminaison OAST recevant le rappel. S'il est omis, le script lance automatiquement interactsh-client et exécute le verdict dans le script
--mode harmless|exfilType de charge utile (par défaut : harmless)
--vulnerableForce la réinitialisation du master du fork au commit précédant le correctif (271608fb) avant l'exécution. Implique --no-sync
--no-syncIgnore la synchronisation du fork avec l'amont (utile lors du test d'un commit épinglé)
--base-branch <name>Branche cible de la PR sur le fork (par défaut : master)
--keep-branchNe supprime pas la branche PoC après la fin
--no-pollIgnore l'interrogation de l'exécution du workflow et quitte après la création de la PR

Pourquoi la PR cible le fork, et non le dépôt en amont

Par conception, le PoC ouvre la PR depuis une branche du fork vers le master du même fork. Il ne cible pas directement sherlock-project/sherlock. Il y a deux raisons à cela.

1. Éviter la divulgation publique d'un exploit

Télécharger l’outil