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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-39866 — Proof-of-conceptラボ。GitHub Actionsのworkflow dispatchにおけるコマンドインジェクション(CVE-2026-39866)を実証します。教育目的の分析のため、脆弱なバージョンとパッチ適用済みバージョンを並行して実行します。 | Kitploit
ツール/GitHubGitHub/abhayclasher/cve-2026-39866
脆弱性分析エクスプロイトウェブアプリケーション悪用コマンド&コントロール学習と教育ラボと実践
GitHubabhayclasher/cve-2026-39866

CVE-2026-39866

Proof-of-conceptラボ。GitHub Actionsのworkflow dispatchにおけるコマンドインジェクション(CVE-2026-39866)を実証します。教育目的の分析のため、脆弱なバージョンとパッチ適用済みバージョンを並行して実行します。

リポジトリを見る
4ヶ月前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-39866 — 引用されていないworkflow dispatch入力によるコマンドインジェクション

CVE GHSA CWE-78 Patched

GitHub Actionsのworkflow dispatchにおけるコマンドインジェクションの概念実証ラボ


目的

CVE-2026-39866は、LawnchairのGitHub Actionsリリースワークフローにおけるコマンドインジェクションのバグです。release_update.ymlファイルは、ユーザー入力を引用符なしでbashに直接渡すため、攻撃者がコマンドを注入できます。このリポジトリは、脆弱なバージョンと修正済みバージョンの両方を並行して実行します。

クイックファクト

フィールド値
CVE IDCVE-2026-39866
GHSAGHSA-9prc-pp2c-3427
CWECWE-78 (OSコマンドに使用される特殊要素の不適切な無害化)
製品LawnchairLauncher/lawnchair
影響を受けるバージョンfcba413より前のすべてのバージョン
修正バージョンfcba413
発見者Abhay Kumar (@abhayclasher)

脆弱性の詳細

この脆弱性はrelease_update.ymlワークフローファイルに存在します。このアクションはartifactNameパラメータを受け取り、引用符なしでbashコマンドに直接渡します。

root@kitploit:~
- name: Rename artifact
  run: mv ${{ inputs.artifactName }}.zip lawnchair.zip

GitHub Actionsは、シェルが実行する前に変数値を文字列に置換します。${{ inputs.artifactName }}の周囲に引用符がないため、シェルはスペースやセミコロンをコマンド区切り文字として解釈します。

攻撃者がartifactNameとしてfile.zip; touch pwned.txt #を指定した場合:

GitHub Actionsが解析する方法: ${{ inputs.artifactName }} → file.zip; touch pwned.txt #

シェルが実行する方法:

root@kitploit:~
mv file.zip; touch pwned.txt #.zip lawnchair.zip

シェルはmv file.zipを実行し、次にtouch pwned.txtを実行し、残りをコメントとして無視します。

影響

  • GitHub Actionsランナー上で任意のコマンドを実行する。
  • ランナー環境に公開されているリポジトリのシークレット(GITHUB_TOKENやリリース署名キーなど)を窃取する。
  • アップロード前にリリース成果物を改ざんする。
  • ランナーがセルフホスト型の場合、接続されたインフラストラクチャに侵入する。

システム要件

  • Node.js 18以降
  • Docker(オプション、コンテナ化ラボ用)
  • 500 MBの空きディスク容量

セットアップ

オプション1: 直接実行

root@kitploit:~
git clone https://github.com/abhayclasher/CVE-2026-39866.git
cd CVE-2026-39866/app
npm install
node server.js

オプション2: Dockerで実行

root@kitploit:~
git clone https://github.com/abhayclasher/CVE-2026-39866.git
cd CVE-2026-39866
docker compose up -d

使用方法

サーバー起動後、以下のURLにアクセスしてください:

URL説明
http://localhost:3000/workflow/vulnerable脆弱なワークフロー — 送信時にコマンドインジェクションが実行されます
http://localhost:3001/workflow/patchedfcba413パッチが適用された同じワークフロー

脆弱なバージョンは、注入したコマンドをランナー上で実行します。修正済みバージョンは、入力をリテラル文字列として扱います。

スタンドアロンのPoCも実行できます:

root@kitploit:~
cd poc
node exploit.js

これにより、ポート3000で最小限のサーバーが起動し、完全なアプリケーションコンテキストなしで同じバグを実証します。

仕組み

検出フロー

root@kitploit:~
1. 攻撃者がartifactName入力パラメータを制御する
2. GitHub Actionsが${{ inputs.artifactName }}をYAMLに展開する
3. runステップがこれをbashに送る
4. bashが引用符なしの特殊文字を認識し、コマンド構文として扱う
5. コマンドがランナー環境の権限で実行される

攻撃チェーン

root@kitploit:~
┌────────────────────────────────────────────────────┐
│  1. 悪意のある入力:                                 │
│                                                     │
│     artifactName = "file.zip; id #"                │
│                                                     │
│  2. GitHub ActionsがYAMLに置換:                     │
│                                                     │
│     run: mv file.zip; id #.zip lawnchair.zip       │
│                                                     │
│  3. bashが認識する内容:                              │
│     - mv file.zip                                   │
│     - id                    <-- 任意のコマンド       │
│     - #.zip lawnchair.zip (無視される)              │
│                                                     │
│  4. シェルが任意のコマンドを実行                     │
└────────────────────────────────────────────────────┘

修正内容

fcba413バージョンでは、補間された変数の周囲に引用符が導入されています:

root@kitploit:~
- name: Rename artifact
  run: mv "${{ inputs.artifactName }}.zip" lawnchair.zip

引用符により、シェルが特殊文字を解析するのを防ぎます。ペイロードはリテラルなファイル名文字列として扱われ続けます。

ベストプラクティスとして、環境変数を使用してユーザー入力を完全に分離する方法があります:

root@kitploit:~
- name: Rename artifact
  env:
    ARTIFACT_NAME: ${{ inputs.artifactName }}
  run: mv "$ARTIFACT_NAME.zip" lawnchair.zip

完全なコミットを表示: fcba413

プロジェクト構造

root@kitploit:~
CVE-2026-39866/
├── README.md               # このファイル
├── docker-compose.yml      # Dockerラボ設定
├── app/
│   ├── Dockerfile          # コンテナビルド設定
│   ├── package.json        # Node.js依存関係
│   └── server.js           # 脆弱版 + 修正版ワークフローランナーシミュレーション
└── poc/
    └── exploit.js          # スタンドアロンの最小概念実証

参考情報

  • NVD — CVE-2026-39866
  • GitHub Security Advisory
  • パッチコミット
  • CWE-78

Abhay Kumarによって報告されました。このリポジトリはローカルでの教育目的のみを対象としています。脆弱なサーバーを公開ネットワークにデプロイしないでください。

教育目的のみ — 隔離された環境で使用してください

ツールをダウンロード