APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

GitHub Actionsのセキュリティ対策

ACS事業部 亀崎です。

今年もやってまいりました、5月4日。2022年から毎年5月4日に記事を1つ投稿してまいりました。

2022年は AKS x Dapr 、 2023年は Platform Engineeringにおける責任共同モデルと関心事の分離 、そして昨年2024年は BackstageのKubernetes Plugin x AKS というテーマで記事を投稿していました。

techblog.ap-com.co.jp

5月4日がなんなの?? とお思いの方もいらっしゃるとは思いますが、一応特別な意味のある日付なのです。

ということで今年もこの日5月4日に記事を投稿したいと思いますのでお付き合いください。

GitHub Actionsのセキュリティ対策

背景

昨今、ソフトウェアサプライチェーンのセキュリティ対策の重要性が増しています。2021年にソフトウェアセキュリティ強化に関する米国大統領令がだされ、以降さまざまなツールが登場し対策も実施されています。

Cloud Native界隈での大きなイベントでもあるKubeConでも2022年にはいくつものセッションがあり、対応が紹介されていたものです。

techblog.ap-com.co.jp

こうした中でも、ソフトウェアサプライチェーンの脆弱性をつく攻撃等はおこなわれていました。そして2025年3月にはGitHub Actionsの3rd party action である tj-actions/changed-files にバックドアが仕掛けられ、タグも書き換えられてしまったため、Actionでタグ名で指定していた利用者が影響を受けるといった事象も発生しています。

https://www.cve.org/CVERecord?id=CVE-2023-51664

以降GitHub Actionsのセキュリティ強化のため、actionをcommit hashでピン留めするようにしましょう、ということがあちこちで言われていました。

何をすべきか

実際に使っているものではありませんが、以前はaction部分を以下のようにタグ(バージョン)指定で記載するような例が多かったと思います。

    steps:
      - uses: actions/checkout@v4

ここで @v4 と指定していた場合タグ名まで書き換えられてしまうと、気づかないうちに問題のあるコードで実行されかねないわけです。 このため、以前よりGitHub社のドキュメントでは commit hash を利用するとよい、といった案内をしていました。

docs.github.com

つまり上記の例では以下のようにするとよいということになります。

    steps:
      - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2

なお上記の例では GitHub社が公開している action なので厳密には3rd party actionではないため、バージョンタグ指定のままでもよいということになっていますが、commit hash値にすること自体には問題はありません。

実際にはどうすれば・・・

とはいえ、いくつもある GitHub Action workflowの各ステップを書き換えるのは大変ですし、新しいバージョンが出たときの更新もどうするんだ、ということになります。

そこについてはとても便利なツールがありますのでここでご紹介したいと思います。

TagをHashに置き換えるツール

まず actions/checkout@v4actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 といったcommit hash形式に書き換えてくれるツールです。それが pinact です。 今回私が管理するリポジトリをどうやって対応していこうかと考えていたときに偶然見かけたツールですが、とても簡単に使えるものです。

zenn.dev

ツールをインストールし、pinact run と実行すれば変換をすべて行ってくれます。あとはそれを Commitするだけ。簡単です。

OSSの dapr backstage pluginのリポジトリでも同様の対応を実施させていただきました。

github.com

actionのバージョンアップ

pinact を使ってcommit hash指定にしたら、次に考えるのは更新が発生した場合の対応です。 実は、すでにdependabot や renovate は commit hash 形式の検知と更新を行ってくれます。

私が管理しているリポジトリでは dependabot で以前から以下のように指定していました。

.github/dependabot.yaml

  ...

  - package-ecosystem: "github-actions"
    directory: "/"

今回何も設定変更していませんが、これまで同様github actionの更新も検知してくれました。指定は commit hash 形式で出力してくれていますので、自分でなにか作業することもありません。

こうしたツールのおかげで、GItHub Actionsのセキュリティ対策(の1つ)は完了です。もっと大変なことになるのかと考えていましたが、あっさりと完了したので、「もっと早くやっとけばよかった」と思いました。

ということで5月4日

内容は5月4日とはなんら関係がありません。 ただ、世代的に、この日はこの言葉で締めたい、それだけのために記事を投稿しています。 脆弱性を攻撃するようなダークサイドに負けないためにも、皆さんもGitHub Actionのセキュリティ対策を実施しましょう。 それでは。

May (the) force(4th) be with you.

最後に

弊社ではCloud Nativeなシステム開発に関するご支援をさせていただいております。サービス内容については以下のリンク先でご紹介させていただいておりますのでぜひご覧ください。

www.ap-com.co.jp

www.ap-com.co.jp