2.4 KiB
2.4 KiB
A09: Security Logging and Monitoring Failures
Last updated: March 1, 2026
Findings addressed
- Security-sensitive auth/account outcomes were not consistently logged as structured audit events.
- Incident triage required better request correlation for failed auth/CSRF and account-deletion attempts.
Fixes implemented
- Added centralized structured security logging helper in API:
logSecurityEvent(req, event, outcome, details)- Includes request correlation fields (
requestId,ip,userAgent).
- Added audit logging for critical security events:
auth.unauthenticated_request(JWT auth failure)csrf.validation(CSRF check failure)auth.registersuccess/blockedauth.loginsuccess/failure/blocked (including lockout cases)auth.logoutsuccessauth.verifysuccess/failureauth.verify_resendsuccess/failure/blockedauth.password_reset.requestsuccess/blockedauth.password_reset.emailsuccess/failureauth.password_reset.confirmsuccess/failureaccount.delete_requestsuccess/failure/blockedaccount.confirm_deletesuccess/failure/blocked
- Reduced sensitive data exposure in logs:
- Added email fingerprinting (
sha256prefix) for event context instead of plain-text credentials.
Files changed
api/src/server.tsapi/tests/security-logging-monitoring-failures.test.tsapi/vitest.security.config.tsapi/tests/forgot-password.security.test.tsSECURITY_FORGOT_PASSWORD.md
Verification
Command:
cd api
npx vitest run -c vitest.security.config.ts tests/security-logging-monitoring-failures.test.ts
Verified output:
- Test Files:
1 passed (1) - Tests:
2 passed (2)
Dedicated A09 checks in security-logging-monitoring-failures.test.ts:
- Runtime check emits structured
auth.unauthenticated_requestsecurity event for protected-route access failures. - Runtime check emits structured
csrf.validationsecurity event for CSRF failures. - Validates correlation fields (
requestId,ip,outcome) are present in emitted security events. - Runtime check emits
auth.password_reset.requestevents and confirms raw token fields are absent.
Residual notes
- Event logs are currently emitted through app logs; ensure production log shipping/alerting (e.g., SIEM rules on repeated
auth.loginfailure/blocked events). - Next step for A09 maturity is alert thresholds and automated incident notifications.