GitHub Actionsで利用するアクションのバージョンを指定する際に意識すべきこと

はじめに

DTダイナミクスで板金Webの開発をしている森口です。
今回は少し前に話題となっていた脆弱性についての話を取り上げ、そこから得られる教訓をまとめていきたいと思います。

皆さんはGitHub Actionsで外部のアクションを利用する際、バージョンをどのように設定していますか?
私は、なんの疑いもなく以下のように設定していました。

uses: actions/checkout@v3

しかし、この設定はセキュリティ上のリスクを孕んでいます。
今回取り上げる脆弱性の内容を理解してからは以下のように設定することを心がけるようになりました。

uses: actions/checkout@{コミットハッシュ}

それでは、なぜこのような設定が必要なのか、そしてどのような脆弱性があったのかを見ていきましょう。

脆弱性の内容

GitHub Actionsで広く利用されているアクション(reviewdog,tj-actions/changed-filesなど)に悪意のあるコードが埋め込まれ、このアクションを利用した場合にPAT(PersonalAccessTokens)が流出するという脆弱性が発見されました。

そもそも悪意のあるコードはどうやって埋め込まれたのか?

リポジトリのコントリビュータ管理に問題があり、コントリビュータに対して書き込み権限が与えられていたとのこと。
これにより、悪意のあるコントリビュータがコードを埋め込める状態となっていた。

アクションのバージョン指定方法とどう関係があるのか?

悪意のあるコントリビュータは既存のタグに対してコードをコミットし、タグが参照するコミットハッシュを上書きしていた。
これにより、タグを指定してアクションを利用していたユーザーがPAT流出のリスクにさらされていた。

イメージ画像

脆弱性イメージ

参考

今回取り上げた脆弱性の識別子は以下の通りです。

  • CVE-2025-30154
  • CVE-2025-30066

まとめ

  • アクションのバージョンを指定する際は、今回取り上げたリスクがあることを意識しておく
  • 外部ライブラリを利用する際は、信用できるソースからのものを選ぶ(脆弱性の有無や利用状況などを確認する)
  • GitHubの権限管理は適切に行う

さいごに

今回取り上げた脆弱性は、GitHub Actionsを利用する上で非常に重要な教訓となりました。
また「公式サイトに記載されている方法で実装しているから大丈夫」ということはないということを改めて認識しました。
わたしたちミスミ、そしてDTダイナミクスは一緒にmeviyを通して世界の製造業を支える仲間を募集しています!
少しでも興味のある方はぜひカジュアル面談しましょう!