Skip to content

chore(secrets): rotate the Alertmanager webhook topic - #45

Merged
Gerrrt merged 1 commit into
mainfrom
chore/rotate-alertmanager-webhook
Aug 20, 2026
Merged

chore(secrets): rotate the Alertmanager webhook topic#45
Gerrrt merged 1 commit into
mainfrom
chore/rotate-alertmanager-webhook

Conversation

@Gerrrt

@Gerrrt Gerrrt commented Aug 20, 2026

Copy link
Copy Markdown
Owner

Follow-on from #11 and #41.

The previous ntfy topic was found in plaintext in a local Claude Code session transcript on the monitoring host. The transcript was redacted in place — but on public ntfy.sh the topic name is the credential. There is no token to revoke and topics cannot be deleted, so the only meaningful response is to move to a new topic and stop listening to the old one. Anyone who had the old one can still publish to it; nothing will be subscribed.

Rotated to a fresh 32-character topic.

Verification

  • make render rewrote .rendered/webhook_url (mode 600, gitignored); confirmed in sync with the sops value
  • Test publish returned HTTP 200 and the notification arrived on the subscribed device — 200 alone only proves ntfy accepted it, not that anyone was listening
  • First live exercise of the fix(secrets): stop the editor keeping a decrypted copy of the secrets #41 fix: this edit went through the hardened make secrets-edit and left zero entries in ~/.local/state/nvim/undodir/. The same action created one before fix(secrets): stop the editor keeping a decrypted copy of the secrets #41
  • The new topic appears in exactly one file on disk, the gitignored rendered artefact
  • Diff is ciphertext-only — ALERTMANAGER_WEBHOOK_URL, lastmodified, mac; 26 encrypted fields intact, no plaintext URL in the tracked file

Not in scope

No reload — Alertmanager reads url_file at notify time, not at config load (scripts/reload-config.sh preamble).

The five SNMP communities were not rotated. That exposure never left the host and never reached git, and rotating the switch's community reruns the neo residual in SECURITY.md.

Refs #11

🤖 Generated with Claude Code

The previous ntfy topic was found in plaintext in a local Claude Code session
transcript on the monitoring host while working #11 — one record holding the
webhook URL, four holding the MokerLink SNMP community. The transcript was
redacted in place, but on the public ntfy.sh instance the topic name *is* the
credential: there is no token to revoke and topics cannot be deleted, so the
only meaningful response is to move to a new one and stop listening to the old.

Rotated to a fresh 32-character topic. Verified end to end: ntfy accepted the
publish and the notification arrived on the subscribed device — HTTP 200 alone
would only have proven the server took it, not that anyone was listening, which
is the failure mode worth ruling out before an outage rather than during one.

Ciphertext-only change: ALERTMANAGER_WEBHOOK_URL, plus lastmodified and mac.

No reload accompanies this. Alertmanager reads .rendered/webhook_url at notify
time rather than at config load, so `make render` alone is sufficient — see the
preamble to scripts/reload-config.sh.

The five SNMP communities were deliberately not rotated. That exposure never
left the host and never reached git, and rotating the switch's community means
the `neo` residual in SECURITY.md all over again.

Refs #11
@Gerrrt
Gerrrt merged commit d2b0ecd into main Aug 20, 2026
3 checks passed
@Gerrrt
Gerrrt deleted the chore/rotate-alertmanager-webhook branch August 21, 2026 03:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant