コンテンツにスキップ
Zenn Dev Kou Pg 0131 Articles Ghasec Introduction

セキュリティ重視の GitHub Actions 静的解析ツール「ghasec」の紹介

  • URL: https://zenn.dev/kou_pg_0131/articles/ghasec-introduction
  • 日付: 2026-06-26
  • Tier: Tier 3
  • 要旨: GitHub Actionsのセキュリティに特化した静的解析ツール「ghasec」の作者による紹介記事。既存のactionlint・zizmor・ghalintをそれぞれの良い部分を統合して一本化したツールで、v0.10.0時点で20個のセキュリティルールをサポートする。デフォルトパーミッション未設定・タイムアウト未設定・コミットSHA未固定・persist-credentials未設定・スクリプトインジェクション・なりすましコミットなどを検出でき、Markdown形式出力でAIエージェントに修正を委譲することも想定している。goccy/go-yamlでYAMLをパースし、ルールごとに個別の検出ロジックを実装した構造で、GitHub Actionsワークフロー内での実行用アクションも提供している。

詳細

  • 開発背景: actionlint・zizmor・ghalint の3ツールを毎回実行する手間を解消するため、それぞれの好みの部分を統合して作成
  • インストール: brew install koki-develop/tap/ghasec / go install github.com/koki-develop/ghasec@latest / Docker実行も可能
  • デフォルト対象ファイル: .github/workflows/*.{yml,yaml} と **/action.{yml,yaml}
  • 主な検出ルール(v0.10.0時点で20ルール):
    • default-permissions: 権限が明示されていない(permissions: {}未設定)
    • job-timeout-minutes: ジョブのタイムアウト未設定(デフォルト360分)
    • checkout-persist-credentials: persist-credentials: false未設定
    • unpinned-action: コミットSHA未固定のリモートアクション参照
    • script-injection: run内で ${{}} を直接使用
    • impostor-commit: リポジトリに存在しないコミットSHAの参照
  • オンラインモード: –online フラグでGitHub APIを使うルールも有効化(トークンはGHASEC_GITHUB_TOKENまたはGITHUB_TOKEN環境変数)
  • 無視コメント: # ghasec-ignore または # ghasec-ignore:ルール名 で個別無効化(無意味なignoreはエラー)
  • 出力フォーマット: デフォルトはSHA/行番号付きの詳細表示(シンタックスハイライト付き)、–format=markdownでAIエージェント連携向け出力
  • 表示ライブラリ: 自作のkoki-develop/annotate-go(シンタックスハイライト: alecthomas/chroma)