Skip to content

[DeepSec] PR CI が書き込み権限付きトークンで PR 側コードを実行している #45

@TkymHrt

Description

@TkymHrt

概要

DeepSec の診断で、.github/workflows/ci.ymlpull_request CI が、書き込み権限付きの GITHUB_TOKEN を持った状態で PR 側コードを実行していることが検出されました。

影響

quality job は pull_request で実行され、contents: writepull-requests: write を付与したうえで pnpm install、lint、format、tsc など PR で変更可能なコードやスクリプトを実行しています。

同一リポジトリ内 PR、または fork PR に write token が付与される設定の場合、悪意ある PR が package script や lifecycle hook、実行される tooling を改変し、checkout に残った認証情報を悪用してリポジトリへの push や PR 内容の改変を試みる余地があります。

対象

  • .github/workflows/ci.yml
  • 関連行: 3, 5, 19, 20, 21, 23, 26, 27, 44, 48, 51, 53, 58
  • DeepSec severity: MEDIUM
  • Confidence: medium
  • Slug: other-ci-token-exposure

修正案

  • PR 検証用の job は contents: read を基本にする
  • actions/checkout では persist-credentials: false を指定する
  • format の auto-commit など write 権限が必要な処理は、PR 側コードを実行しない別 workflow または信頼済みコンテキストへ分離する
  • write 権限を付与する前に pnpm install や package script が実行されない構成にする

受け入れ条件

  • pull_request で実行される検証処理が write token を持たない
  • PR 側コード実行時に checkout credential が永続化されない
  • 自動修正 commit が必要な場合も、未信頼コード実行と write 権限が同じ job に混在していない

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions