zizmorの audit。workflow / job レベルの permissions: が、その job が実際に必要とする以上の write 権限を持っているケースを検出する
検出例
permissions:
id-token: write
jobs:
build:
runs-on: ubuntu-latest
publish:
runs-on: ubuntu-latest
steps:
- uses: pypa/gh-action-pypi-publish@...
なぜ危険か
- 上の例は workflow ルートで
id-token: writeを宣言しており、実際に必要なのはpublishjob のみ。buildjob にも同じ権限が継承される build内で third-party action が侵害された場合(unpinned-uses)、本来不要なid-token: writeも奪われる- 被害は job が持つ GITHUB_TOKEN のスコープに比例する。最小権限の原則を CI トークンにも適用する
改善例
permissions: {}
jobs:
build:
runs-on: ubuntu-latest
publish:
runs-on: ubuntu-latest
permissions:
id-token: write
steps:
- uses: pypa/gh-action-pypi-publish@...