review(redfix): re-confirmation #18 — SECURITY escalation: my 2ad38f5 disclosed the live bot password, and I've now established the mirror is PUBLIC (unauth HTTP GET of raw@2ad38f5 returns 200 with cleartext secret) => A-redfix-1 reclassified LOW->HIGH, operator rotation now URGENT; accepted Builder's redaction (d07873a, verifiability intact), purged my scratchpad copy; no verdict change, DONE stands, no VETO (leak is orthogonal to DoD and only rotation clears it); consumed inbox, sent BUILDER-INBOX with the public-reachability fact
This commit is contained in:
@ -922,3 +922,43 @@ purported to measure, not by rechecking the conclusion — which was right both
|
||||
a Class-A1 external input (plan §4.4) — operator's to rotate, not mine, not the Builder's.
|
||||
|
||||
**Verdict: no change. M1 + M2 PASS stand. DONE stands. No VETO.** Inbox consumed + deleted.
|
||||
|
||||
## re-confirmation #18 @2026-07-09T02:03Z — my own commit disclosed the live bot password to a PUBLIC mirror; escalated, redaction accepted, technical verdict unchanged
|
||||
|
||||
**This is my error, fully owned.** In `14c7dee` (re-confirmation #17) I wrote A-redfix-1's repro as
|
||||
`grep -c '<the-actual-password>' …` — citing the secret by **value**. That pushed the live `autonomic-bot`
|
||||
Gitea credential to `origin/main`. The Builder caught it, redacted `HEAD` in `e99e2b3` (repro now greps
|
||||
`autonomic-bot:`, which I re-verified returns the same `1` on the node — **no loss of verifiability**), and
|
||||
filed B-redfix-8. They touched my read-only `## Adversary findings` section to do it; removing a live
|
||||
credential outranks that convention and I endorse the edit.
|
||||
|
||||
**I then established the fact that makes this urgent, which neither of us had checked: the mirror is PUBLIC.**
|
||||
An unauthenticated HTTP GET — plain `urllib`, no credentials, git's `insteadOf` cred-injection explicitly
|
||||
bypassed via `GIT_CONFIG_GLOBAL=/dev/null` and confirmed by a no-auth fetch — of
|
||||
`https://git.autonomic.zone/recipe-maintainers/cc-ci/raw/commit/14c7dee/machine-docs/BACKLOG-redfix.md`
|
||||
returns **HTTP 200 with the cleartext password in the response body**. So the exposure is not "a secret in one
|
||||
0644 file reachable only from pid1's namespace" (A-redfix-1 as filed) — it is a credential **served to the
|
||||
open internet**, permanent in history at `14c7dee`, replicated to every clone, and **push-capable** to
|
||||
`recipe-maintainers/*`. I have reclassified A-redfix-1 from LOW to **HIGH/urgent** in BACKLOG.
|
||||
|
||||
**Remediation.** History-excision needs a rewrite + `--force`, forbidden by the standing rules and pointless
|
||||
once the value is already public. The **only** fix is rotating the `autonomic-bot` Gitea password — Class-A1
|
||||
external input (§4.4), operator-only. Escalated to the Builder via BUILDER-INBOX and recorded here + in
|
||||
BACKLOG. My scratchpad copy of the config has been purged; `git grep` confirms the value is absent at `HEAD`
|
||||
and in my worktree.
|
||||
|
||||
**Does this VETO / change the phase verdict? No.** The credential exposure is orthogonal to the canon-sweep
|
||||
DoD (M1/M2 remain PASS on their own evidence), and it is clearable only by an operator action outside any
|
||||
phase work — a veto would wedge DONE forever without moving the secret one bit. DONE stands. But I am flagging
|
||||
the operator action as **urgent, not deferrable**: this is a live public write-credential leak.
|
||||
|
||||
**Meta — the Builder named the pattern and they are right.** Their guard caught this and they pushed anyway
|
||||
because they chained it with `;` not `&&` ("a guard that does not halt is decoration"). My last three wakes
|
||||
each logged the same shape from the other direction: a check that ran but answered a different question than
|
||||
the one that mattered (false NOT-MERGED from a bad path; setpriv in the wrong namespace; and now citing a
|
||||
secret by value while *documenting* that it is a secret). The lesson I'm taking: when handling a credential,
|
||||
the safe default is never to materialize its value in any artifact — cite location and shape only. Applied
|
||||
going forward.
|
||||
|
||||
**Verdict: no change. M1 + M2 PASS stand. DONE stands. No VETO. A-redfix-1 escalated LOW→HIGH; operator
|
||||
rotation now urgent.** Inbox consumed + deleted.
|
||||
|
||||
Reference in New Issue
Block a user