review(redfix): wake #39 — B-redfix-8 re-probed and CONFIRMED at value level: the live, push-capable GITEA_PASSWORD appears verbatim in the publicly-served blob (HTTP 200/33408, sha256 1994fd8d = git object; sentinel still 3fcea78925015fc9 ⇒ unrotated). Stronger than prior wakes, which only showed blob==git-object. Also caught two broken probes and recorded their tells: curl/wget absent on the orchestrator (use python3 urllib), and .testenv lives on the orchestrator NOT cc-ci — hashing it over ssh yields sha256("")=e3b0c44298fc1c14, which reads like a rotation but is an empty-input artifact. Terminal condition intact (DONE, M1+M2 PASS, no VETO, no gate claimed, no inboxes). Item stays OPEN/HIGH/operator-only. Loop standing down.

This commit is contained in:
autonomic-bot
2026-07-09 07:33:43 +00:00
parent d4fcb683b8
commit 2a61c09503

View File

@ -1146,3 +1146,42 @@ so the two digests are never again conflated in this file.
VETO cleared, both inboxes absent, no gate claimed. **DONE stands. No VETO.** B-redfix-8 remains **OPEN,
HIGH, operator-rotation-only**; sole close path is a future sentinel differing from `3fcea78925015fc9`.
Loop terminal — standing down again (as at wake #37); nothing here is mine to advance.
### Post-reboot re-confirmation #39 @2026-07-09T07:34Z — DONE stands, no VETO. B-redfix-8 re-probed **value-level** (stronger than prior wakes)
Cold start, fresh clone state, `git pull --rebase` first. Terminal condition re-checked and intact:
`## DONE` @2026-07-09T00:18Z in STATUS-redfix.md; M1 PASS @2026-06-18T01:18Z + M2 PASS @2026-07-09T00:18Z;
every `## VETO` string in this file is the single **CLEARED** F-redfix-4; no gate CLAIMED (the
`Gate: M2 — RE-CLAIMED` at line ~298 sits inside the block STATUS explicitly marks as retained historical
record); no `ADVERSARY-INBOX.md` / `BUILDER-INBOX.md`.
**B-redfix-8 — still OPEN, still HIGH, still operator-rotation-only.**
- **Exposure:** unauthenticated `GET https://git.autonomic.zone/recipe-maintainers/cc-ci/raw/commit/14c7dee/machine-docs/BACKLOG-redfix.md`
(no auth header, no cookies) → `http=200`, `bytes=33408`,
`sha256=1994fd8de3fc780337098f72491f829c00743f7d82f6c9e5a373a7d639613f37`, byte-identical to
`git cat-file blob 14c7dee:machine-docs/BACKLOG-redfix.md`. Still public.
- **Rotation sentinel:** `sha256(GITEA_PASSWORD)[:16]` = `3fcea78925015fc9` (len 14) = committed sentinel
⇒ **operator has NOT rotated.**
- **NEW this wake — value-level containment.** Prior wakes only established *blob equality* (served bytes ==
git object). That is weaker than the claim being made. This wake I additionally checked the **live
credential value itself** against the served body: `grep -qF -- "$GITEA_PASSWORD" <served-body>` → **match**.
So the assertion is no longer "the public web serves a blob that once contained a secret" but
"the public web serves the **currently-valid, push-capable** Gitea bot password verbatim." Same verdict,
materially stronger evidence.
**Probe hygiene — two failed probes this wake, neither a finding (recorded so they are never misread):**
1. `curl` is **not on PATH** on the orchestrator (nor `wget`); the fetch must go through `python3 urllib`.
The earlier `curl: command not found` produced an empty output file, not an empty HTTP response.
2. `/srv/cc-ci/.testenv` lives on the **orchestrator**, *not* on `cc-ci`. Running the sentinel over
`ssh cc-ci` hits `No such file or directory`, hashes **empty input**, and yields `e3b0c44298fc1c14` —
which is exactly `sha256("")[:16]`. Read naively that looks like the credential *rotated*.
**`e3b0c44298fc1c14` is the empty-string tell, not a rotation.** Verified: `printf '' | sha256sum` →
`e3b0c442…`. Any future wake seeing that digest should fix its probe, not close B-redfix-8.
(Companion to wake #38's note: `1994fd8d…` = sha256(whole served blob); `3fcea789…` = sha256(credential
value)[:16]. Three distinct digests, three distinct meanings — do not conflate.)
**Verdict: no new finding, no change. M1 + M2 PASS stand. `## DONE` stands. No VETO.** B-redfix-8 remains
**OPEN, HIGH, operator-only**; the sole close path is a future sentinel differing from `3fcea78925015fc9`
(and it must be a *correctly computed* sentinel — see the empty-string tell above). Nothing here is mine to
advance: the phase has no defect, and re-confirming an operator-blocked item on a 10-minute cadence adds
nothing. Loop terminal — standing down.