Umbrella tracking issue for the security posture of the self-serve MDR feature shipped under issues #882, #883, and #884. Filed at PM request for visibility.
Each item below is a gap or concern that warrants its own analysis (and, in most cases, its own follow-up issue or PR). Pre-existing security findings caught during the 2026-05-26 dev re-deploy session are at the bottom.
Authentication / identity
Cryptographic material
Invite tokens
Tenant isolation correctness
IAM / least privilege
Logging / audit / leakage
Operational (CFN drift; demo prep finding)
Related issues
Umbrella tracking issue for the security posture of the self-serve MDR feature shipped under issues #882, #883, and #884. Filed at PM request for visibility.
Each item below is a gap or concern that warrants its own analysis (and, in most cases, its own follow-up issue or PR). Pre-existing security findings caught during the 2026-05-26 dev re-deploy session are at the bottom.
Authentication / identity
Cryptographic material
mdr__auth__jwt_secret_keycurrently signs HS256 JWTs and HMACs the workspace cookie and HMACs invite tokens. Rotating the key atomically invalidates all three (operationally noisy). Consider separating per concern. Seecomponents/lif/mdr_auth/{workspace_cookie,invite_token}.py.MdrAuthJwtSecretKeyrotated, and what's the downstream blast radius? Not currently documented.Invite tokens
Tenant isolation correctness
SET search_pathper request. We should have an integration test that asserts a request bearing tenant A's cookie cannot read data in tenant B's schema, including via SQL injection vectors and accidental superuser fallthrough.search_pathfallback — When the resolved tenant schema doesn't exist (e.g., the bug we hit on 2026-05-26 where Lambda failed silently to provision), what's the documented fallback? Should it be "deny" rather than "silently use the next schema in search_path"?IAM / least privilege
AdminAddUserToGroup. Audit whether it's exactly that or wider.Logging / audit / leakage
eval-<sub>. Subs aren't strictly secret, but they're stable identifiers; surfacing them in UI / cookies / URLs is a minor information-leak concern.Operational (CFN drift; demo prep finding)
mainhad moved past what was deployed. Should we wire a drift detector that alerts whendev-lif-mdr-cognitoordev-lif-mdr-apifalls more than N commits behindmain? Same risk on demo.flyway_schema_historydoesn't match the expected highest version baked into the image.Related issues