Files
KNELAgentIdentityProvisioning/skills/agent-provisioning/references/incident-log.md
T
mrcharles f7d54a30ae incident-log: pwvault web-vault EncString crash case (2026-09-09)
Full symptom/root-cause/repair record for the InvalidTypeSymm
web-vault crash so it is never re-derived.
https://projects.knownelement.com/issues/942
2026-09-09 18:59:11 -05:00

75 lines
4.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Incident log — what broke and what it taught (append-only)
## 2026-09-07 ~20:00 CT — shared-box degradation (RESOLVED 09-08)
One box (152.53.37.179, mail.knownelement.com) hosts gitea, redmine,
discourse, GLPI, pwvault, and fronts my.knownelement.com. During the
incident:
- Gitea `git-receive-pack` → HTTP 500 on ANY ref (pushes impossible);
`POST /api/v1/repos` → plain-text 404. Reads + `POST /api/v1/markdown`
worked fine — partial failure, not an outage.
- my.knownelement.com → HTTP 500 leaking
`"Access denied for user 'root'@'localhost'"` (a MySQL root credential
breakage in whatever backs that vhost).
- pwvault: unauthenticated endpoints answered in 0.2s, but AUTHENTICATED
`/api/sync` hung to timeout — a lock/db-layer signature. All vault item
reads fleet-wide were down; nothing credential-driven could proceed.
- tsys-cloudron (tailscale 100.107.35.78, self-signed cert — use `curl -k`)
404'd its hostname; with `Host: my.knownelement.com` it served the same
JSON as the public vhost (proxy topology). devbox/preprod/sectestbed
cloudron peers were offline for 12 days.
Lessons: (1) when several "unrelated" systems on that box fail at once,
treat it as one box incident — file one ticket, verify recovery per system;
(2) HTTP-status-only checks lie — the vault was "up" (200s on static paths)
while 100% of useful reads hung; test the authenticated path you actually
need; (3) correlate carefully — the MySQL leak was the public box's vhost,
not the cloudron control box; wrong attribution sent diagnosis down a
rabbit hole (see #939 correction).
## 2026-09-07 — identity/SSO archaeology (the reason this skill exists)
- The August "10 identities enrolled + TOTP" batch captured NO seeds. coo's
TOTP is therefore enforced-but-unrecoverable; no admin reset exists in
this Cloudron version. Every future enrollment MUST store the seed.
- `creds/sec-*` / `creds/sre-*` (Sep 07 batch, by VpEngOps) used ONE shared
password across cloudron+gitea+redmine+discourse, and the stored password
already fails Cloudron auth (401 tested). Shared passwords are banned
(#942); treat those items as stale until their owning lane remediates.
- Several "admin" vault candidates resolved to reachableceo's personal
reachableceo accounts (gitea id 3, redmine user 5) and none were admin
(gitea: 403 "user should be the site admin"; redmine: 403 on /users.json).
They now carry RESTRICTED notes. The compliant Cloudron admin lever is the
`api-token` user's token in `creds/cloudron`.
- Debug order that works for auth weirdness: (1) what identity does this
credential ACTUALLY resolve to (call /user or /users/current)?
(2) does the route exist at all (SPA-bundle grep beats guessing)?
(3) is the failure at nginx (HTML status pages) or the app (JSON errors)?
---
**Records:** Redmine #942 — https://projects.knownelement.com/issues/942 · Discourse docs home: https://community.turnsys.com (skill topic pending admin-key provisioning, tracked on #942)
## 2026-09-09 — pwvault web-vault crash: EncString InvalidTypeSymm
- Symptom: web vault (all browsers, incl. fresh private windows) spins
forever after successful password + authenticator 2FA login; zero items.
iPad native app + extension worked throughout; CLI (API key) worked.
- Root cause: the account's `accountKeys.publicKeyEncryptionKeyPair.publicKey`
stored a RAW base64 public key ("MI…", not an EncString). The 2026.7.0
web client's strict SDK parser rejects it → `InvalidTypeSymm { enc_type:
"0", parts: 1 }` → unhandled Angular error aborts vault render.
Upstream: vaultwarden discussions #7334, #7464; issue #7469.
- Repair: `UPDATE users SET public_key = NULL` (MySQL db for the app;
coo@ = user uuid 98954ef9-…), then client login regenerates the pair.
Cloudron app backup taken first via the backup API (backup_sites →
task poll). Verified end-to-end same day.
- Diagnostic technique that found it: Firefox F12 → Console tab captured
the unhandled Angular exception; server logs + API probes showed
everything healthy; the crash was client-render only.
- Related: CLI-style logins (client_id=cli) are offered only the recovery
code 2FA provider — authenticator TOTP codes from a vault seed are
rejected for CLI logins even with the authenticator correctly enrolled.
Automation uses API keys (bypass 2FA), not passwords+TOTP.