[5.22.0] - 2026-05-06
๐ Features
- HSM Linux aarch64: extend HSM support (softhsm2, smartcardhsm,
othermodel) to Linux aarch64; proprietary HSMs (Proteccio, Utimaco, Crypt2Pay) remain x86_64-only (#902) - Docker CORS defaults: set default
KMS_CORS_ALLOWED_ORIGINSin the Docker image so the bundled Web UI works out-of-the-box on localhost/::1/0.0.0.0port 9998 (#926)
๐ Security
- Integer overflow checks: enable
overflow-checks = truein[profile.release](ANSSI LANG-ARITH compliance) (#921) - OTLP TLS enforcement: reject plaintext HTTP OTLP endpoints by default; add
--otlp-allow-insecureflag for explicit dev opt-in - Log sanitization: remove sensitive cryptographic material (plaintext, ciphertext, key bytes, HMAC values, hash data) from tracing span fields across all KMIP operations
- SECURITY.md: rewrite with 17-entry vulnerability disclosure list (5.0.0 onward), OpenSSL-style format with severity ratings
- Hardening fixes (#928):
- VULN-01: wrap MS DKE scope with full authentication middleware (previously unauthenticated)
- VULN-02: clear unwrap cache on key revocation/destruction
- VULN-03: add SSRF validation on Google CSE
original_kacls_url - VULN-04: derive session salt from private server-side config instead of hardcoded default
- VULN-05: use
AtomicOperationin Activate/Revoke to prevent TOCTOU races - VULN-06: move
/server-infobehind authentication middleware - VULN-07: return generic "Internal server error" for 5xx responses
- VULN-12: mask sensitive fields in
ServerParamsDebug output - VULN-13: fix HSM Locate leaking internal KEK when a
Namefilter was provided โName/ApplicationSpecificInformationfilters now return zero HSM results (#935)
๐ Bug Fixes
KMIP Interoperability
- FortiGate / KMIP 1.0โ1.4: fix
Authenticationdeserialization to correctly handle theAuthentication { Credential { CredentialType, CredentialValue } }nesting; fixLocatename filter silently dropped for KMIP 1.0/1.1 clients (FortiGate wraps filterAttributeitems inTemplateAttribute) (#824)
HSM
- Sensitive (non-extractable) keys: fix
ModifyAttributefailing for non-extractable HSM keys โ fall back toget_key_metadata()stub for attribute-only operations (#933)
Server Concurrency & Performance
- Span-across-await crash: fix server crash/hang under concurrent load caused by
span.enter()across.awaitboundaries โ replaced all 31 occurrences in KMIP operations withtracing::Instrument - AWS XKS bottleneck: move
sigv4_verify()(HMAC-SHA256 over ~85 KB body) tospawn_blocking; move all PKCS#11 FFI operations inBaseHsmtospawn_blockingto unblock the async runtime - Unwrap cache: optimize fingerprint by serializing
KeyBlockonly; eliminate sequential write-lock contention via existing mpsc channel - SQLite concurrency: implement read/write connection split (dedicated writer + reader pool, default 2รCPU capped at 10) leveraging WAL mode; honor previously ignored
max_connections
Auth / Session
- OIDC/PKCE
SameSiteregression: downgrade session cookie fromSameSite=StricttoSameSite=LaxโStrictblocked the IdP redirect-back cookie, causing "Missing PKCE verifier" errors - PKCS#12 in FIPS mode: skip P12 generation on Linux/Windows where the FIPS provider lacks
PKCS12KDF; PEM files are used instead (#928)
Miscellaneous
- Fix
cargo fmtissue insession_impl.rs; remove unusedcosmian_loggerdev-dependency fromcrypt2pay_pkcs11_loader - Fix
delete_attributetracing span incorrectly named"encrypt"
๐งช Testing
- Add 4 security non-regression tests validating sensitive data never appears in tracing span fields (encrypt, decrypt, hash, MAC)
- Add KMIP 1.2 protocol test vector for issue #933 (sensitive HSM key
ModifyAttribute) - Add integration test for issue #935 (
Locate+Namefilter does not leak the server KEK) - Fix intermittent
test_privileged_usersrace via dedicatedONCE_SERVER_WITH_MULTI_PRIVILEGED_USERScell - Fix KMIP documentation generator to produce markdownlint-compliant output
๐ง Build
- Bump
rand0.9 โ 0.10 (migrateTryRngCore/OsRng/RngCoreAPI); bumpactix-http3.10 โ 3.12
โ๏ธ CI
- Crypt2Pay: make CI resilient to
prepare_crypt2pay.shself-test failures; striproute-nopullfrom OpenVPN config; add TCP connectivity check (30 retries); fix CA installation path, HSM port (3001), and bridge CA for old issuer DN; clean up staletun0interface before OpenVPN start