概要
- nixpkgs で発見された重大な GitHub Actions の脆弱性についての解説
- pull_request_target イベントの危険性と実際の攻撃手法
- コマンドインジェクション や ローカルファイルインクルージョン の具体例
- 修正対応と セキュリティ教訓
- 今後の 安全な運用方法 と参考リソース紹介
NixpkgsのGitHub Actions脆弱性発見と経緯
- NixCon で発表された、nixpkgsに存在した深刻な 脆弱性 の発見事例
- 発見者は lexi 氏と筆者、調査から報告・修正まで約1日で完了
- GitHub Actions の設定ミスを悪用した サプライチェーン攻撃 の危険性
- pull_request_target イベントが標的、デフォルトで リポジトリ書き込み権限 と シークレットアクセス を有効化
- GitHub公式ドキュメント でもpull_request_targetの危険性を警告
pull_request_targetの危険性
- pull_request_target は、 フォークからのPR でも 書き込み権限 と シークレット にアクセス可能
- 通常のpull_requestイベントとは異なり、 悪意あるコード の混入リスクが高まる
- nixpkgs 内でpull_request_targetを利用したワークフローを調査、14個を発見
- 一部は安全な実装(例:信頼できるアクションのみ利用)
コマンドインジェクション脆弱性(EditorConfigチェック)
- EditorConfigルール 検証用ワークフローで コマンドインジェクション を発見
- PRで変更されたファイルリストを取得し、 xargs でeditorconfig-checkerに渡す処理
- xargs のmanページにも「安全に使えない」と明記
- 攻撃例:
--helpというファイル名をPRに追加→editorconfig-checkerのヘルプが表示される - 任意コマンド実行 の可能性、さらなる調査で深刻な被害も想定
ローカルファイルインクルージョン脆弱性(CODEOWNERSチェック)
- CODEOWNERSファイル 検証ワークフローで ローカルファイルインクルージョン を発見
- PR内のOWNERSファイルを シンボリックリンク で任意ファイルに差し替え可能
- 攻撃例:OWNERSを GitHub Actionsの認証情報ファイル へのリンクに変更
- バリデータがファイルを読み込み、エラーメッセージとして トークン情報 をログ出力
- 結果: nixpkgsリポジトリ への 直接push権限 を取得、通常のレビュー手順をバイパス可能
修正対応とセキュリティ教訓
- nixpkgsメンテナー(infinisil氏) による即時対応
- 脆弱なワークフローの 無効化 と 安全な実装 への修正
- pull_request_targetの ブランチ指定の落とし穴 にも注意し、ワークフロー名を変更
- 重要な教訓
- 未信頼データ と シークレット情報 の混在を避ける
- 最小限の権限 のみ許可
- 公式ドキュメント で権限仕様を必ず確認
- 組織全体で不審なGitHub Actionsがある場合、 一括無効化 も検討
- Settings→Actions→General→Policiesで「All repositories」を「Disable」に設定
まとめ・参考リソース
- 脆弱性発見から修正まで1日 で対応、nixpkgs全体のセキュリティを守る
- pull_request_target 利用時は特に注意が必要
- 関連資料・発表
- GitHub Actions 運用時は常に 安全性 を最優先に
- みなさんも 安全なCI/CD運用 を心がけてください