odysseus/core
holden093 9e6e8b62d3 fix(oidc): security hardening — 11 fixes from multi-model review
Fixes 11 security/robustness issues identified across a 4-model review
(deepseek, gpt-5.5, claude-fable-5, gpt-5.6-sol) of the OIDC SSO
implementation:

UserInfo & claims integrity:
- Require non-empty matching sub before trusting UserInfo (P2)
- Reject non-dict/malformed UserInfo responses as unavailable
- Validate NumericDate strictly: reject bool, NaN, Inf
- Add iat future-token verification (60s tolerance)
- Initialize userinfo safely before try block

Callback hardening:
- Clear CSRF cookie on ALL 8 failure branches + 503 unconfigured
- Echo state parameter on IdP error redirects (OIDC Core §3.1.2.6)
- Check create_session_trusted() return value before setting cookie

Defense-in-depth:
- OIDC_MAX_AGE env var with auth_time verification (+60s skew)
- AuthManager.check_oidc_totp() with disk-reloaded TOTP enforcement
- SameSite=Lax proxy documentation in .env.example

UI fix:
- Preserve OIDC callback error after setMode() initialization

Tests: 164 passed (123 OIDC + 41 regression), +21 new regression tests
2026-07-25 18:32:56 +02:00
..
__init__.py Odysseus v1.0 2026-05-31 23:58:26 +09:00
atomic_io.py Reject non-string atomic text writes (#1819) 2026-06-29 14:36:21 +01:00
auth.py fix(oidc): security hardening — 11 fixes from multi-model review 2026-07-25 18:32:56 +02:00
constants.py refactor(constants): single source of truth for data dir (#3368) 2026-06-08 09:58:52 +02:00
database.py fix(db): restrict data/app.db to 0600 (#4420) 2026-07-11 21:15:49 +02:00
exceptions.py refactor(exceptions): dedupe src/exceptions via core re-export (#4785) 2026-06-24 16:50:07 +02:00
log_safety.py fix(security): redact credential-bearing URLs and PII from logs (#4750) 2026-06-22 23:12:39 +02:00
middleware.py Show thumbnails on past research cards 2026-06-30 08:00:01 +00:00
models.py fix: session context drifting — messages leaking between chats (#135) (#267) 2026-06-09 14:12:52 +01:00
oidc.py fix(oidc): security hardening — 11 fixes from multi-model review 2026-07-25 18:32:56 +02:00
platform_compat.py fix(platform): read proc version with utf-8 2026-06-11 21:58:22 +01:00
session_manager.py Merge verified Odysseus fixes 2026-07-23 14:49:02 +00:00