secrets(kuma): rotate the Uptime Kuma password that AutoKuma logs in with #347

Merged
hermes merged 1 commit from task/kuma-pw-rot into main 2026-09-17 17:03:27 -06:00
Collaborator

secrets(kuma): rotate the Uptime Kuma password AutoKuma logs in with

uptime-kuma-autokuma-env held a Kuma login that no longer matches the
account: the value in the store fails bcrypt verification against the live
user row (bcrypt.compareSync(env_password, user.password) = false) and a
login attempt with it is rejected ("Incorrect username or password for user
truva"). AutoKuma was only still working because it kept the session it
opened before the account password was changed at the issuer - the next
autokuma restart would have taken declarative monitor reconciliation down
with it. The value is rotated here to one that is known-good again.

Rotation was done at the issuer with Uptime Kuma's own reset path
(extra/reset-password.js semantics: User.resetPassword + a fresh
initJWTSecret), then verified by logging in over the local socket with
the new value (accepted) and the old one (rejected).

Also declares restartUnits for the secret: AutoKuma reads its login from
the environment file at start, so the rotated value only takes effect once
the unit is restarted - without it the deploy would leave the old password
in the running process until something else happened to bounce it.

secrets(kuma): rotate the Uptime Kuma password AutoKuma logs in with `uptime-kuma-autokuma-env` held a Kuma login that no longer matches the account: the value in the store fails bcrypt verification against the live user row (`bcrypt.compareSync(env_password, user.password)` = false) and a login attempt with it is rejected ("Incorrect username or password for user truva"). AutoKuma was only still working because it kept the session it opened before the account password was changed at the issuer - the next autokuma restart would have taken declarative monitor reconciliation down with it. The value is rotated here to one that is known-good again. Rotation was done at the issuer with Uptime Kuma's own reset path (`extra/reset-password.js` semantics: `User.resetPassword` + a fresh `initJWTSecret`), then verified by logging in over the local socket with the new value (accepted) and the old one (rejected). Also declares `restartUnits` for the secret: AutoKuma reads its login from the environment file at start, so the rotated value only takes effect once the unit is restarted - without it the deploy would leave the old password in the running process until something else happened to bounce it.
secrets(kuma): rotate the Uptime Kuma password AutoKuma logs in with
All checks were successful
NixOS Build Check / Flake input regression guard (pull_request) Successful in 3s
NixOS Build Check / Scope changed deployable hosts (pull_request) Successful in 4s
NixOS Build Check / Eval giga (scope + liveness + offline fallback) (pull_request) Successful in 3s
PR base guard / Base drift / conflict check (pull_request) Successful in 2s
Secret Scan / gitleaks scan (pull_request) Successful in 6s
NixOS Build Check / Build mail closure (on mail) (pull_request) Successful in 12s
NixOS Build Check / Build vpn closure (on vpn) (pull_request) Successful in 23s
NixOS Build Check / Eval giga natively (authoritative, on giga) (pull_request) Successful in 38s
NixOS Build Check / Build public closure (on public) (pull_request) Successful in 1m9s
9c5707d20e
`uptime-kuma-autokuma-env` held a Kuma login that no longer matches the
account: the value in the store fails bcrypt verification against the live
user row (`bcrypt.compareSync(env_password, user.password)` = false) and a
login attempt with it is rejected ("Incorrect username or password for user
truva"). AutoKuma was only still working because it kept the session it
opened before the account password was changed at the issuer - the next
autokuma restart would have taken declarative monitor reconciliation down
with it. The value is rotated here to one that is known-good again.

Rotation was done at the issuer with Uptime Kuma's own reset path
(`extra/reset-password.js` semantics: `User.resetPassword` + a fresh
`initJWTSecret`), then verified by logging in over the local socket with
the new value (accepted) and the old one (rejected).

Also declares `restartUnits` for the secret: AutoKuma reads its login from
the environment file at start, so the rotated value only takes effect once
the unit is restarted - without it the deploy would leave the old password
in the running process until something else happened to bounce it.
hermes merged commit 5f1c3b202e into main 2026-09-17 17:03:27 -06:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
ymrtech/nix-config!347
No description provided.