Context
Found in review round 2 of the hardening (the first-order fix left a second-order bypass); fixed in PR #28.
Problem
config-file (caller input) flows through dirname into the WORK_DIR step output, which was then re-interpolated
as WORK_DIR="${{ steps.bump_version.outputs.WORK_DIR }}" in later run: bodies. A config-file like
$(cmd)/pyproject.toml surfaces as WORK_DIR="$(cmd)" and executes — a second-order bypass of the first-order
input-hardening.
Affected locations
| File |
Location |
actions/release/github/action.yml |
Extract-notes / Fold-lockfile / Create-release / Release-summary steps |
Fix (PR #28)
Routed every steps.bump_version.outputs.* (plus github.server_url / github.repository) through env: — no
run: body in the action interpolates ${{ }} anymore.
Severity / Effort
Low (caller-derived) · XS
Definition of Done
Context
Found in review round 2 of the hardening (the first-order fix left a second-order bypass); fixed in PR #28.
Problem
config-file(caller input) flows throughdirnameinto theWORK_DIRstep output, which was then re-interpolatedas
WORK_DIR="${{ steps.bump_version.outputs.WORK_DIR }}"in laterrun:bodies. Aconfig-filelike$(cmd)/pyproject.tomlsurfaces asWORK_DIR="$(cmd)"and executes — a second-order bypass of the first-orderinput-hardening.
Affected locations
actions/release/github/action.ymlFix (PR #28)
Routed every
steps.bump_version.outputs.*(plusgithub.server_url/github.repository) throughenv:— norun:body in the action interpolates${{ }}anymore.Severity / Effort
Low (caller-derived) · XS
Definition of Done
${{ steps.*.outputs.* }}re-interpolated into anyrun:body of the action