1. GitHub Actionsのバージョンタグ指定は脆弱
「もし、いつものバージョン指定があなたの合鍵を盗んでいく入口になっていたら?」
GitHub Actions で様々なActionsを使うとき、@v1のようなタグ指定を当たり前のように書きますよね。
自分でもよく書いていましたし、CI の設定ファイルでは割と見る気がします。
でも、もしもその@v1タグが...
あなたが思っているコードではなく、まったく別の commit を指すように書き換わっていたら?
あなたの CI が“別人のコード”を実行してしまうなんて、にわかには信じがたい話かもしれません。
けれど現実には、たった 1 行のタグ指定だけで 機密情報が外部へ流れる事故 は十分に起こり得るのです。
2. Github Actionsのバージョン指定
「バージョンタグ指定は脆弱」と言われても、そもそもどんなバージョン指定の方法があるのか知らないと話ははじまりません。
なので、最初に @v1.0.0 / @v1 / SHAの違いを説明しておきます。
◆固定タグ:v1.0.0
「この commit がバージョン 1.0.0」という“固定版のラベル”
- 基本的にCommitは動かさない
- 利用者も “これは固定” と期待して使う
※ただし技術的には force push で書き換え可能。←脆弱性の元凶
◆メジャーバージョンタグ:v1
“v1 系の最新” を指す 動くタグ
-
v1.0.0 → v1.1.0 → v1.2.0…のように更新で動いていく - GitHub Actions では一般的な運用
基本的に破壊的変更がある場合は v1→v2のようにメジャーバージョンアップがあることが多いが、個人開発のOSSなどではセマンティックバージョニングに沿っていないケースもある
◆ SHA:コミットハッシュ
絶対に動くことはなく、commitそのものを指す
- commit を直接指す
- 後から動かせない
- 一番安全
バージョン指定のまとめ
| 指定方法 | 動く? | 書き換え? | 実務での安全度 |
|---|---|---|---|
| SHA | 動かない | 不可 | ★★★★★ |
| v1.0.0 | 動かさない前提 | 可能 | ★★★☆☆ |
| v1 | 動く前提 | 可能 | ★★☆☆☆ |
3. OSS で実際に起きた reviewdog の「v1 タグすり替え」事件
Github Actions のバージョン指定について理解したところで、実際にあった事件をもとにバージョンタグの脆弱性を知っていきましょう。
reviewdog は、PR に lint 結果をコメントする有名な OSS です。
しかしある時期、
reviewdog/action-setup の v1 タグが、本家ではなく fork の 悪意のあるcommit を指す状態
になっていました。
そして、他の Actions からこの改ざんされた reviewdog/action-setup@v1 が実行されてしまいました。
その結果、実行した Actions の PAT(認証トークン)が盗まれてしまうという事態が発生しました。
どのように reviewdog/action-setup の v1 タグが書き換えられ、どのような影響があったのかの詳細についてはインシデントレポートを読んでみてください。
この事件、なにが怖いのかというと
利用者側はタグが改ざんされていることに気付きにくい
という点です。
タグ指定とSHA指定のイメージ
4. 今日からできる安全な運用
今、Github Actions で@v1などでバージョン指定をしている方も今日からできる対策があります。
| 方法 | 説明 |
|---|---|
| SHA で固定する | Commitが変わることは絶対にありません。 |
| 公式リポジトリか確認する | owner, コミット署名, どこから fork されたか などは見るようにする |
| PATのPermissions を最小化する | Actions で勝手に push されたり、Secrets を抜かれたりするリスクを下げられます。 |
※SHAで固定すれば完全に防げるようにも思えますが、使用しているActionの中でバージョンタグ指定がある場合に連鎖的に被害を受ける可能性はあります。なのでPATのPermissionsの最小化も併せて行うことで自衛することも重要です。
まとめ
タグ指定は見やすいし便利ですが、
@v1と書いたとき、本当に動かしたい commit が動くのかは考える必要があります。
reviewdog の事件は、
“タグは悪意のある攻撃者によって改ざんされる可能性がある”
という脆弱性が露わになっただけです。
あなたのプロジェクトでも、同じことは起こりえます。
“便利さは、安心とは違う。”
安全なバージョン指定は「知って使う」だけで実現できます。
あなたのプロジェクトや、あなたのプロジェクトの利用者を守るためにも、今一度見直してみることが大事かもしれません。
おわりに
今回は、冒頭に少し強い言葉を置いてみました。
「最初に印象の強い一文を置くと、
内容が同じでも最後まで読まれやすくなるらしい」
という話をどこかで聞いて、純粋に気になったので試しています。
まんまと最後までよんでくれた方は教えてください笑
また内容に誤りや、「ここは言い過ぎ」「ここはもう少し正確に書いた方がいい」
といった点があれば、気軽に教えてください。


