先に結論
CodeQL 2.25.5 で大きいのは、GitHub Actions の review 対象が workflow 本体だけでは足りなくなったことです。
今回から actions/unpinned-tag は composite action の action.yml と action.yaml まで解析します。さらに poisonable_steps は python -m と go run の実行パターンを追加で拾うようになりました。
つまり、これまで alert が出ていなかったから安全とは言い切りにくくなります。github.com を使っているなら新しい query は自動反映されるので、待つより先に見直した方が早い更新です。
何が変わったのか
一番分かりやすい変更は、actions/unpinned-tag の解析範囲です。
これまでは workflow files が主な確認対象でした。CodeQL 2.25.5 では、composite action metadata も対象に広がりました。社内で再利用している action が @main や mutable tag を参照しているなら、今までより見つかりやすくなります。
もうひとつ大きいのが poisonable_steps の modeling 拡張です。GitHub の changelog では Python modules 経由の script 実行と、ディレクトリ付きの go run が追加 sink として検知対象に入ったと説明しています。
加えて actions/untrusted-checkout/* 系は help description が直り、actions/untrusted-checkout/high の名前も privileged context が伝わる形に調整されました。新機能というより、triage 時に意味を取り違えにくくする修正です。
まず見直すべき 3 か所
1. composite action の action.yml
いま一番見落としやすいのはここです。
workflow 側を pin していても、社内 action や共通 action の action.yml で mutable tag を参照していれば、そこが supply chain の穴になります。今回から CodeQL はその metadata も見るので、review 対象に入っていない repo があるなら先に棚卸しした方が安全です。
2. python -m を使った実行ステップ
Python module 実行を多用している workflow では、今まで見えていなかった alert が増える可能性があります。
たとえば wrapper script を直接呼ばず、python -m で task runner や internal tool を起動している構成です。CodeQL はその実行形も poisonable step の候補として扱うようになりました。
3. ディレクトリ付きの go run
Go 製の補助ツールを CI から直接起動しているチームも要注意です。
CodeQL 2.25.5 では、ディレクトリ付きの go run に加え、go とサブコマンドの間に入る flag を無視して判定できるように変わりました。少し回りくどい書き方でも、以前より検知されやすくなります。
どの query に効くのか
この更新は actions/unpinned-tag だけの話ではありません。
CodeQL の changelog では、poisonable_steps の変更によって次の query で検知結果が増える可能性があると案内しています。
actions/untrusted-checkout/highactions/untrusted-checkout/criticalactions/untrusted-checkout-toctou/highactions/untrusted-checkout-toctou/criticalactions/cache-poisoning/poisonable-stepactions/cache-poisoning/direct-cacheactions/artifact-poisoning/path-traversal
要するに、checkout 後の危険な実行、cache、artifact 周りまで連鎖します。GitHub Actions security 全体の見え方が少し厳しくなる更新だと考えた方が近いです。
CI/CD 全体の設計まで見直したいなら、GitHub Actions security roadmap 2026 で何が変わるか もつながります。
github.com と GHES で違う点
github.com なら、新しい CodeQL は自動で入ります。
一方で GitHub は、この変更を GHES 3.22 に含めると案内しています。つまり GHES 3.21 以前では、同じ repository でも query 挙動がずれる可能性があります。
enterprise で github.com と GHES が混在しているなら、alert 差分を「設定ミス」と決めつけない方が安全です。まず CodeQL version の差を疑うべきです。
いま実務でやること
最初にやるべきなのは、workflow を全部書き換えることではありません。
- composite action を持つ repository を洗い出す
action.ymlとaction.yamlの mutable tag 参照を確認するpython -mとgo runを含む workflow を一覧化する- 新しい alert が出たときの triage 担当を決める
この順なら、更新の影響を小さく把握できます。いきなり suppression を増やすより、どこで検知が増えるかを見る方が先です。
GHAS の予算や code scanning 運用まで含めて考えるなら、GitHub Advanced Security に hard budget limits 追加 も合わせて読むと、運用側の判断がしやすくなります。
どんなチームに効くか
一番影響が大きいのは、GitHub Actions を共通基盤として使い回しているチームです。
特に次の条件に当てはまるなら、今回の更新は実務差が出ます。
- reusable workflow や composite action を社内標準として配布している
- platform team が CI テンプレートを管理している
- code scanning の alert を security team だけでなく開発チームも処理している
- github.com と GHES を併用している
逆に、単発の workflow が少数あるだけの小さな repo では、すぐに大きな差が出ないこともあります。それでも action.yml の pin 漏れは見つけておく価値があります。
まとめ
CodeQL 2.25.5 の GitHub Actions 改善は、派手な新機能ではありません。
ただ、実務への効き方はかなり直線的です。
actions/unpinned-tagが composite action metadata まで広がったpython -mとgo runが poisonable step の検知対象に増えたactions/untrusted-checkout/*の説明と名称が分かりやすくなった- github.com では自動反映、GHES は 3.22 から取り込まれる
workflow 本体だけ見ていた review から、shared action まで含めた review へ切り替える。そのきっかけとしては十分強いアップデートです。