PR-Agentは、LLMを使用してGitHubのPull Requestのレビューを自動化するOSSのGitHub Actionsであり、いくつかの企業で採用している例を見かける。

しかし、このPR-Agentの実装にはサプライチェーン攻撃のリスクがあり、そのリスクを認識した上で採用する必要がある。

  1. Dockerベースイメージをpinningしていない
  2. pip installをHash-checking Modeで実行していない
  3. Dockerイメージのビルドプロセスが不明瞭

1. Docker ベースイメージをpinningしていない

PR-AgentはDockerコンテナを使用したActionだが、そのDockerfileのベースイメージが以下のようにpinningされていない。

FROM python:3.12.10-slim AS base

via Dockerfile.github_action#L1

Dockerレジストリのタグは上書き可能であり、悪意あるバージョンのDocker ベースイメージが使用される可能性がある。

ref. Building best practices | Docker Docs

2. pip installをHash-checking Modeで実行していない

前述のDockerfileではpip installしているが、それに --require-hashes オプションが付与されておらず、requirements.txtの各依存ライブラリにも --hash オプションが付与されていないため、Axiosのnpmパッケージ侵害のようなパッケージ侵害の影響を受ける可能性がある。

via Dockerfile.github_action#L6-L8

3. Dockerイメージのビルドプロセスが不明瞭

1,2の対策としてPR-Agentの特定のバージョンを使用する方法がドキュメントに記載されている。

steps:
  - name: PR Agent action step
    id: pragent
    uses: docker://pragent/pr-agent@sha256:a0b36966ca3a197ca739fa1e65c16703076fc1c744cd423ca203b8c21707d71c

via SECURITY.md

Dockerイメージのversionはpinningされており一見問題なさそうに見えるが、このDockerイメージのビルドプロセスが不明瞭であり、その妥当性を第三者が検証できない他、image自体の検証もしづらい。

(同様の問題提起をissue commentでされている方もいる)

3rd-party GitHub Actionsを採用する際の注意点

pinactやGitHubのEnforce SHA Pinning機能によって、3rd-partyのGitHub Actionsを使用する際にpinningすることの重要性は広く普及してきたように思える。

しかし、GitHub ActionsをpinningしたとしてもそのGitHub Actions自体のリスク評価についてはまだ認識が広がっていないように思える。

3rd-partyのGitHub Actionsを採用する際には、自分は以下のように注意している。

まとめ

3rd-partyのGitHub Actionsは気軽に使えて開発生産性に大きく寄与する一方、LLMの発展によりサプライチェーン攻撃などのセキュリティリスクが高まっている現代においては、そのリスクを適切に評価した上でその採用の是非を決定する必要がある。

...嫌な世の中になってしまったな...