概要
DeepSec の診断で、.github/workflows/ci.yml の pull_request CI が、書き込み権限付きの GITHUB_TOKEN を持った状態で PR 側コードを実行していることが検出されました。
影響
quality job は pull_request で実行され、contents: write と pull-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 に混在していない
概要
DeepSec の診断で、
.github/workflows/ci.ymlのpull_requestCI が、書き込み権限付きのGITHUB_TOKENを持った状態で PR 側コードを実行していることが検出されました。影響
qualityjob はpull_requestで実行され、contents: writeとpull-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.ymlother-ci-token-exposure修正案
contents: readを基本にするactions/checkoutではpersist-credentials: falseを指定するpnpm installや package script が実行されない構成にする受け入れ条件
pull_requestで実行される検証処理が write token を持たない