fix(security): token exposed in git-push argv via http.extraheader — use askpass or credential helper #381
Labels
No labels
bump
major
bump
minor
bump
patch
kind/bug
kind/chore
kind/docs
kind/feature
priority/critical
priority/high
priority/low
priority/medium
size/L
size/M
size/S
size/XL
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
frankenbit/release-toolkit#381
Loading…
Add table
Add a link
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?
Empirical finding (external cold-read round 4)
git -c http.extraheader='Authorization: token TOKEN' push ...puts the token into the process argv. Visible viaps auxwwand captured by system audit logs (auditd on many distros). Same class as embedding tokens in remote URLs (alcatraz-infra#89 fixed that adjacent case).Meta-class: grep-sweep-missed-siblings — the alcatraz-infra#89 fix targeted URL-embedded tokens; the sibling argv-embedded token case survived because the sweep was for the URL pattern, not the semantic class of 'token visible outside process env.'
Blocking rationale
v1.0.0 signals broad-adoption readiness. Adopters running release-toolkit on shared runners (multi-tenant self-hosted, CI providers with sidecar containers) leak the release token to co-tenants and audit logs. Security-blocking for v1.0.0.
Fix path
Options:
Option A (preferred):
GIT_ASKPASSscript echoing token from env — token stays in env, never in argvOption B:
git credential-storecredential helper — matches alcatraz-infra#89's discipline patternOption C: pipe token via stdin using
--credential-fill— clean but git-version-sensitiveVerification AC
ps auxww | grep gitduring release-cut shows no token in argvAnchor
External outside-model cold-read round 4 (fresh ChatGPT session, 2026-07-03 late). Verdict: 'promising but not yet trustworthy' — SAME TIER as round-3 despite round-3 delta cycle. Meta-pattern named this round: grep-sweep-missed-siblings — the sweep-pattern targeted the literal grep-target, not the semantic class, so class-axis closed PARTIALLY per round. Operator ratified filing round-4 trackers 2026-07-04. This tracker addresses one of the round-4 findings. Success criterion: subsequent external cold-read returns no further objections of this class.
BLOCKING v1.0.0.