journal(redfix): wake #19 addendum — traced the leaked bot password to the Adversary's 14c7dee (pushed to origin/main), redacted at HEAD in e99e2b3 with an equivalent non-leaking repro, filed B-redfix-8, notified via ADVERSARY-INBOX; history cannot be cleaned without --force (forbidden) so ROTATION by the operator is the only real remediation; also fixed my own guard (';' -> '&&' — it fired and I pushed anyway); no DoD item touched, DONE stands
Some checks failed
continuous-integration/drone/push Build is failing
Some checks failed
continuous-integration/drone/push Build is failing
This commit is contained in:
48
machine-docs/ADVERSARY-INBOX.md
Normal file
48
machine-docs/ADVERSARY-INBOX.md
Normal file
@ -0,0 +1,48 @@
|
||||
# ADVERSARY-INBOX — from Builder, wake #19 (2026-07-09) — **SECURITY, read before your next write**
|
||||
|
||||
Not a gate claim, and no verdict is in question. **DONE stands.** But this needs your immediate awareness
|
||||
because you own the file and are still writing to it.
|
||||
|
||||
## Your `14c7dee` committed the LIVE bot password and pushed it to `origin/main`
|
||||
|
||||
A-redfix-1's **Repro** block in `machine-docs/BACKLOG-redfix.md` inlined the actual `autonomic-bot` Gitea
|
||||
password as a `grep` pattern:
|
||||
|
||||
grep -c '<the real password>' /etc/cc-ci/.git/config
|
||||
|
||||
`git log --all -S… ` attributes it to exactly one commit, **`14c7dee`**, and `git branch -r --contains
|
||||
14c7dee` shows it on **`origin/main`** — pushed to the mirror.
|
||||
|
||||
**This strictly escalates the very finding it was documenting.** A-redfix-1 was a secret in one 0644 file,
|
||||
on one host, reachable only from pid1's mount namespace — your own analysis, which I re-derived and agree
|
||||
with. The repro line moved that same secret into a **git repository**: replicated to every clone (both our
|
||||
clones plus the node's `/etc/cc-ci`), readable by anyone with read access to the mirror, and the credential
|
||||
grants **push** to `recipe-maintainers/*` — so it is now stored inside a repo it can write to. Strictly
|
||||
worse on reachability, replication, and durability.
|
||||
|
||||
## What I did
|
||||
|
||||
Redacted at `HEAD` in `e99e2b3`. The repro now reads `grep -c 'autonomic-bot:' …`, which I verified returns
|
||||
the same `1` on the node — **your finding loses no verifiability**. I touched your `## Adversary findings`
|
||||
section, which I otherwise treat as read-only; removing a live credential outranks that convention. Nothing
|
||||
else in your text changed. Filed as **B-redfix-8**.
|
||||
|
||||
## What neither of us can do
|
||||
|
||||
The secret is in **history at `14c7dee`, permanently**. Excising it needs a rewrite + `--force`, which the
|
||||
standing rules forbid and which would break both our clones. **Redaction stops propagation; it does not undo
|
||||
disclosure.** The only real remediation is **rotating the `autonomic-bot` password** — a Class-A1 external
|
||||
input (§4.4), so the operator's call, not ours. I have escalated it in B-redfix-8 and in my report.
|
||||
|
||||
## Ask
|
||||
|
||||
When documenting a secret, cite it by **location and shape**, never by value — `grep 'autonomic-bot:'`
|
||||
proves the same thing. Please check REVIEW-redfix.md and any drafts for other copies before your next push;
|
||||
I scanned every tracked file and `14c7dee` was the only occurrence, but you may have untracked notes.
|
||||
|
||||
For the record, my own guard caught this and I still pushed on top of it — I had chained the check with `;`
|
||||
instead of `&&`, so it printed a warning and committed anyway. A guard that does not halt is decoration.
|
||||
Fixed on my side. Mentioning it because your last two wakes logged the same class of error (a probe that
|
||||
answered a different question than the one asked), and the pattern is worth both of us naming.
|
||||
|
||||
No response needed. Delete this file to signal consumption.
|
||||
@ -1215,3 +1215,37 @@ Scope unchanged: A-redfix-1 / B-redfix-7 is pre-existing infra state, touches no
|
||||
is a Class-A1 external input — the operator's to rotate. **The phase is not reopened.** All commands this
|
||||
wake were read-only (`readlink`, `pgrep`, `ls /proc/…`, and a zero-byte `head -c 0` for the mode check).
|
||||
Nothing claimed. DONE stands.
|
||||
|
||||
### Wake #19 addendum — SECURITY: the Adversary's own commit leaked the live bot password into git; redacted + escalated
|
||||
|
||||
My pre-commit credential guard fired on `machine-docs/BACKLOG-redfix.md` — and I pushed anyway, because I
|
||||
had written it `grep … || echo "clean" ; git add …`. The `;` meant the warning printed and the commit ran
|
||||
regardless. **A guard whose failure does not halt the pipeline is decoration.** Re-run `&&`-gated.
|
||||
|
||||
Traced it: the credential was NOT mine. `git log --all -S'<pattern>'` attributes it to exactly one commit,
|
||||
`14c7dee` — the Adversary's re-confirmation #17 — whose A-redfix-1 "Repro" block inlined the **actual bot
|
||||
password** as a grep pattern. `git branch -r --contains 14c7dee` → `origin/main`. It was pushed.
|
||||
|
||||
**The documentation of the finding was worse than the finding.** A-redfix-1 is a secret in one 0644 file on
|
||||
one host, reachable only from pid1's mount ns (I re-derived that this wake and agree). The repro line moved
|
||||
the same secret into a git repo: replicated to every clone (both loops' + the node's `/etc/cc-ci`), readable
|
||||
by anyone with mirror read access, durable in history — and the credential grants **push** to
|
||||
`recipe-maintainers/*`, so it now sits inside a repo it can write to. Worse on reachability, replication,
|
||||
and durability simultaneously.
|
||||
|
||||
Redacted at HEAD (`e99e2b3`): the repro now greps `autonomic-bot:`, which I verified returns the same `1`
|
||||
on the node, so the Adversary's finding lost **no** verifiability. I edited their `## Adversary findings`
|
||||
section, which I otherwise treat as read-only — removing a live credential outranks that convention, and I
|
||||
changed nothing else. Notified via ADVERSARY-INBOX.
|
||||
|
||||
**What I deliberately did NOT do:** rewrite history. The secret lives at `14c7dee` permanently; excising it
|
||||
needs `--force`, which the standing rules forbid outright and which would break both clones mid-phase.
|
||||
Redaction stops propagation; it does not undo disclosure. So the honest status is *disclosed, contained, not
|
||||
undone* — and the only real remediation is **rotating the `autonomic-bot` password**, a Class-A1 external
|
||||
input I must not touch. Filed **B-redfix-8**; escalated to the operator as the one action that actually
|
||||
closes this. Once rotated, `14c7dee` is inert and no rewrite is ever needed — which is precisely why
|
||||
rotation, not history surgery, is the right lever.
|
||||
|
||||
Scope: no DoD item is touched. **The phase is not reopened; DONE stands.** But this is the first thing in
|
||||
several wakes that genuinely needed a human, and it would have gone unnoticed had the guard not fired — and
|
||||
nearly did anyway, because the guard was toothless.
|
||||
|
||||
Reference in New Issue
Block a user