security: validate version_files paths against traversal (Sprint 5 security audit finding) #181
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit#181
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Audit finding
Sprint 5 security audit (#156) flagged a low-medium severity path traversal vector in
scripts/manifest-check.sh:112-139:The
version_files:config field accepts arbitrary paths without../rejection. A malicious config likeversion_files: [../../../../etc/passwd]would be read + text-parsed bymanifest-check.sh, potentially leaking file contents.Severity assessment
LOW-MEDIUM:
../-bearing path before mergeThe realistic exploit surface: a malicious PR that adds
version_files: [../../some/secret]torelease-toolkit.yml, which gets merged and the next cut leaks the file contents to the rolling PR body or release notes.Mitigations
../inconfig.sh'sversion_filesparser/etc/passwd)git rev-parse --show-toplevel)Plus bats coverage for the new rejection paths.
Composition
What this PR will NOT do
version_filessemantics for legitimate pathssubdir/VERSION(those are valid within the consumer repo)manifest-check.sh(path validation is sufficient)Refs
scripts/manifest-check.shlines 112-139 (the audit finding's location)scripts/lib/config.sh(the validation site)quartermaster referenced this issue2026-06-27 14:27:35 +02:00
..\paths, recover-pending-cut joins an absolute changelog, an atomic write fails over a read-only file #1526changelog:is read as given by decide and manifest-check, but prep and release join it under the repo root #1528