All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
This release represents the culmination of the OathMesh 3-Phase Security and Maturation Roadmap. OathMesh is now a mathematically proven, polyglot-consistent, and ecosystem-interoperable zero-trust engine, ready for production perimeter defense.
- Config Rename:
ClockSkewhas been renamed toClockSkewLeewayacross all SDKs to reflect its purpose accurately. The default value has been increased from10sto30sto accommodate NTP drift in distributed systems. - Environment Variables:
OATHMESH_PRIVATE_KEY_FILEis now deprecated. Please migrate toOATHMESH_PRIVATE_KEY_PATH. - Pkl Policy Sandbox: Broad
file:///access and external HTTP imports are no longer permitted in Pkl policies. Policies are now strictly sandboxed tofile://<dir>/relative to the policy root to neutralize SSRF and LFI vectors. - Cache Failover Behavior:
RevocationListcache failures (e.g., Redis network partitions) now strictly fail-closed. All SDKs return a secure denial (verification_failed/ HTTP 401) rather than failing open.
- Clock Leeway: Updated verification pipeline to correctly apply
ClockSkewLeewaytoexp,iat, andnbfclaims. - Algorithm Confusion: Added strict regression tests guaranteeing
alg:noneand symmetric algorithm attacks fail immediately. - Secure Keygen: Introduced
oathmesh keygenCLI command, enforcing strict0600POSIX file permissions on generated private keys. - Pkl Sandboxing: Hardened Pkl evaluation execution with
--allowed-modulesand scoped--allowed-resources.
- Error Parity: Implemented the unified
token_malformederror across Go, Node.js, and Python SDKs. - Revocation Caches: Added
InMemoryRevocationCacheandRedisRevocationCacheimplementations to Node.js and Python SDKs, establishing exact behavioral parity with Go. - Conformance: Augmented cross-SDK conformance runners to dynamically test caching limits, TTL clamping, and
subject_revokedtriggers with a 0% mismatch rate.
- Envoy
ext_authzService: Introduced a standalone Go binary (cmd/oathmesh-envoy) implementing the gRPCext_authzinterface. InjectsX-OathMesh-*context headers directly into Envoy'sOkResponse. - Kong Go PDK Plugin: Engineered a high-performance external Kong plugin (
plugins/kong) using the Kong Go PDK, reusing the core Go verification pipeline via msgpack. - Performance Proven: Published
docs/PERFORMANCE.mddetailing K8s/k6 benchmarks, mathematically proving the "Zero-Trust Overhead Delta" is <1ms at p99. - Audit Readiness: Synthesized architecture, threat models, and scope into
docs/security/AUDIT_RFP.mdfor top-tier security evaluation firms.
- Fixed SSRF vulnerability in JWKS fetch (CodeQL go/request-forgery)
- Added
NewFixedJWKS()with hardcoded URL - user input completely ignored - Pre-computed JWKS URLs in config - no string concatenation
- Rate limiting added to test suite
- Added
- Updated Go toolchain to 1.26.2
- Cross-SDK conformance test suite with fixtures and runners
- Replay cache support in Node.js SDK
- Replay cache support in Python SDK
- JSON policy evaluation in Node.js SDK
- JSON policy evaluation in Python SDK
make benchtarget for performance benchmarksmake conformancetarget for cross-SDK testing- Dockerfile.gateway for separate gateway deployment
- Emergency JWKS cache TTL override (
OATHMESH_JWKS_CACHE_TTL_EMERGENCY) - Request binding requirement (
RequireRequestBinding)
- BREAKING: Key ID format changed to
issuer-key-YYYY-MM-{4-char-random-hex}for improved uniqueness - BREAKING: ES256 deprecated - tokens signed with ES256 will now log warnings
- Default TTL reduced to 120 seconds (was 300)
- Maximum TTL capped at 300 seconds
- Gateway now requires explicit policy configuration in production
- JWKS cache now properly respects TTL with emergency override capability
- Demo script health polling loop fixed
- SDK parity across Go, Node.js, and Python implementations
- Conformance cases expanded with
alg_none_rejection,subject_format_validation,binding_required_semantics, andiat_future_rejection
- Added request binding requirement (rqh claim) enforcement
- NetworkPolicy in Kubernetes deployment
- TLS enforcement for production issuer URLs
- Replay attack defense with in-memory and Redis-backed cache
- Node.js and Python verifier behavior tightened toward canonical Go step semantics for conformance-critical checks
- Revocation-list behavior remains optional in Node.js/Python SDKs and is currently SKIP/N/A in cross-SDK conformance
- Core Go implementation (issuer, gateway, CLI)
- Node.js SDK
- Python SDK
- Docker Compose deployment
- Kubernetes deployment guide
- TLS configuration guide
- Security documentation (threat model, key management, replay defense)