GitHub Actions ハンドラーの脆弱性により、Nixpkgs 内のパッケージが侵害される可能性があります。

NixOSディストリビューションおよびNixパッケージマネージャエコシステムで使用されているNixpkgsパッケージリポジトリへのプルリクエスト送信時に自動的に呼び出されるGitHub Actionsハンドラに脆弱性が発見されました。この脆弱性により、権限のないユーザーがNixpkgsにホストされているすべてのパッケージのソースコードへの読み取りおよび書き込みアクセス権を付与するトークンを抽出できる可能性がありました。このトークンにより、プロジェクトのGitリポジトリを介して任意のパッケージを直接変更することができ、レビューおよび承認プロセスを回避できました。

Nixpkgs を侵害し、任意のパッケージにカスタムコードを挿入する能力は、昨年 10 月の NixCon カンファレンスでセキュリティ研究者によって実証され、プロジェクトのインフラストラクチャにすぐにパッチが適用されました。しかし、攻撃の詳細は 1 年後にようやく明らかになりました。この問題は、Nixpkgs GitHub リポジトリにおける GitHub Actions ハンドラーの使用に関連していました。これらのハンドラーは「pull_request_target」イベントにバインドされ、新しいプルリクエストに対して自動チェックを実行します。

「pull_request」イベントとは異なり、「pull_request_target」内のハンドラーにはビルド環境への読み取り/書き込みアクセス権が付与されるため、プルリクエストで渡されたデータの処理には特別な注意が必要です。「pull_request_target」にバインドされたハンドラーの1つは、codeowners-validatorユーティリティをビルドして呼び出すことで、プルリクエストで提供された「OWNERS」ファイルを検証しました。手順: — uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf with: ref: refs/pull/$/merge path: pr — run: nix-build base/ci -A codeownersValidator — run: result/bin/codeowners-validator env: OWNERS_FILE: pr/ci/OWNERS

問題は、OWNERSファイルのフォーマットが誤っている場合、codeowners-validatorユーティリティが不正な文字列の内容を標準の公開ログに出力してしまうことでした。攻撃は、プルリクエストにOWNERSという名前のシンボリックリンクを配置し、ビルド環境の認証情報を保存する「.credentials」ファイルを指すようにすることでした。その結果、このファイルの処理でエラーが発生し、リポジトリアクセストークンを含む最初の行が公開ログに出力されました。

 GitHub Actions ハンドラーの脆弱性により、Nixpkgs 内のパッケージが侵害される可能性があります。

さらに、editorconfigルールをチェックするハンドラーにも別の脆弱性が見つかりました。手順: — 名前: PRから変更されたファイルのリストを取得 実行: gh api […] | jq [ … ] > «$HOME/changed_files» — 使用: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 参照: refs/pull/$/merge — 名前: EditorConfigをチェック 実行: cat «$HOME/changed_files» | xargs -r editorconfig-checker

このケースでは、プルリクエスト内の各ファイルに対してeditorconfig-checkerを実行する際に「xargs」ユーティリティが使用されていたことが問題でした。ファイル名が検証されていなかったため、攻撃者は特殊文字を含むファイルをプルリクエストに含めることができ、editorconfig-checker実行時にコマンドライン引数として処理される可能性がありました。例えば、「--help」ファイルを作成すると、editorconfig-checkerは利用可能なオプションに関するヒントを表示していました。

出所: オープンネット.ru

コメントを追加します