Vikunja audit: revoked sessions keep receiving live WebSocket pushes
A batch of Vikunja advisories dropped October 9 covering a session-revocation gap: the WebSocket endpoint accepts any valid user JWT without resolving its sid against the sessions table, so revoked sessions keep receiving live pushes indefinitely, and new connections are accepted with tokens from deleted sessions. The release also disclosed CORS trusting any localhost origin with credentials, OAuth token escalation, and DoS vectors.
The transferable lesson for client portals: revocation features must cover every transport, not just HTTP. If your stack pushes over WebSockets, verify a deleted session cannot open a new connection.