You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fixes all 4 Critical and 5 High findings, plus 5 of 6 Medium and all 3
Low findings from the pre-release security audit.
Critical:
- [#1] State validation is now unconditional; missing state throws
StateMismatch, closing the CSRF / authorization code injection vector
- [#2] Public IDmeAuth constructor now requires Context and defaults to
EncryptedCredentialStore; CredentialStore demoted to internal
- [#3] JWKSClient cache fields are @volatile and all access is serialised
through a Mutex, eliminating the race condition
- [#4] policies() sends credentials via HTTP Basic Auth header instead of
GET query parameter, keeping the client secret out of server logs
High:
- [#5] Demo network_security_config.xml removes user-cert trust and sets
cleartextTrafficPermitted=false
- [#6] iss and aud JWT claims are now mandatory; tokens that omit either
throw JWTClaimInvalid instead of silently passing
- [#7] JWTValidator validates nbf with 30-second clock skew tolerance and
applies the same skew window to exp
- [#8] IDmeAuthManager replaces the single CompletableDeferred with a
ConcurrentHashMap keyed by state; IDmeAuth passes state as sessionId
so callbacks cannot be routed to the wrong flow
- [#9] extractJSON is now suspend and calls JWTValidator before decoding,
ensuring userinfo JWT signatures are verified before claims are exposed
Medium:
- [#10] Log.isEnabled flag (default false) gates all SDK log output to
prevent credential leakage in release builds
- [#11] Redirect URI validation rejects http/https/javascript/file/data
schemes in IDmeAuth, AuthorizationRequest, and GroupsRequest
- [#12] clearSync() cancels the refresh deferred before nulling state,
reducing the window for concurrent-write races
- [#13] expiresIn is coerced to [0, 86400] seconds before multiplication,
preventing integer-overflow-induced negative expiry timestamps
- [#14] AuthViewModel extends AndroidViewModel (provides Context to
IDmeAuth); clientSecret is only forwarded in OAUTH mode
Low:
- [#15] secure-pipeline-ast.yml pinned to immutable commit SHA instead
of mutable @master ref
- [#17] Demo release build enables minification
- [#18] Base64URL.decode() throws IDmeAuthError.InvalidJWT on failure
instead of returning null; JWTDecoder call sites cleaned up accordingly
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
0 commit comments