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
Copy file name to clipboardExpand all lines: SECURITY.md
+94-15Lines changed: 94 additions & 15 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -416,23 +416,19 @@ Certificate pinning adds defense-in-depth protection for TLS connections to Sigs
416
416
417
417
### Implementation Status
418
418
419
-
**Current State:** Infrastructure complete, enforcement pending HTTP client support
419
+
**Current State:** ✅ Fully implemented and enforced
420
420
421
-
The wsc library includes complete certificate pinning infrastructure:
422
-
- SHA256 fingerprint validation
423
-
- Configurable pins via environment variables
421
+
The wsc library includes complete certificate pinning with enforcement:
422
+
- SHA256 fingerprint validation for Fulcio and Rekor endpoints
423
+
- Custom `PinnedRustlsConnector` using ureq's `Connector` trait
424
424
- Custom `ServerCertVerifier` implementation using rustls
425
425
- Support for multiple pinned certificates (rotation)
426
-
427
-
**Limitation:** The current HTTP client (`ureq` v3.x) does not expose APIs for custom TLS certificate verification. Certificate pinning will be automatically enforced once:
428
-
429
-
1. `ureq` adds support for custom `ServerCertVerifier`, OR
430
-
2. wsc migrates to `reqwest` or another HTTP client with TLS customization
426
+
- Configurable pins via environment variables
431
427
432
428
**Current Behavior:**
433
-
- Standard WebPKI validation is performed
434
-
- Pinning checks are logged for monitoring
435
-
- Connections succeed even if pins don't match
429
+
- Certificate pinning is enforced for all Fulcio/Rekor connections
430
+
- Connections fail if certificates don't match expected pins
431
+
- Falls back to standard WebPKI validation only if pinning initialization fails
436
432
437
433
### Configuration
438
434
@@ -544,6 +540,79 @@ wsc's keyless signing **is built on** Sigstore infrastructure (Fulcio + Rekor) b
544
540
545
541
---
546
542
543
+
## Known Limitations
544
+
545
+
This section documents known security limitations that users should be aware of.
546
+
547
+
### 1. No OCSP/CRL Certificate Revocation (IEC 62443 Gap)
548
+
549
+
**Limitation:** WSC does not implement OCSP (Online Certificate Status Protocol) or CRL (Certificate Revocation Lists) checking.
550
+
551
+
**Impact:** Cannot revoke a compromised signing certificate before its natural expiration.
552
+
553
+
**Mitigation:** Fulcio certificates have a 10-minute validity window, inherently limiting the exposure window. For long-lived certificates (non-Fulcio deployments), use short validity periods (1-7 days).
554
+
555
+
**Roadmap:** OCSP stapling planned for Q2 2026 for non-Fulcio deployments.
**Limitation:** Hardware Security Module support is scaffolded but not complete.
560
+
561
+
**Impact:** Cannot achieve Security Level 3+ under IEC 62443 without hardware-backed key storage.
562
+
563
+
**Mitigation:** Use file-based keys with strict permissions (0600), process isolation, and encrypted filesystems. The `platform/` module provides the interface for future HSM integration.
564
+
565
+
**Roadmap:** HSM integration for ATECC608A, TPM 2.0, and NXP SE050 planned for Q2 2026.
566
+
567
+
### 3. Swap File Exposure
568
+
569
+
**Limitation:** Key material in memory could be swapped to disk by the operating system.
570
+
571
+
**Impact:** Forensic recovery of key material from swap space theoretically possible.
572
+
573
+
**Mitigation:**
574
+
- Use `mlock()` on production systems to prevent swapping
**Do not open public issues for security vulnerabilities.**
@@ -560,6 +629,17 @@ Include:
560
629
561
630
## Security Changelog
562
631
632
+
### v0.5.0 (Security Hardening Release)
633
+
- ✅ **Fixed timing attack vulnerability** - Replaced `==` with constant-time comparison (`ct_codecs::verify`) for all cryptographic material comparisons in `simple.rs` and `multi.rs`
634
+
- ✅ **Added intermediate buffer zeroization** - Message buffers now wrapped with `Zeroizing<Vec<u8>>` to prevent secret residue in memory
635
+
- ✅ **Release profile hardening** - Added `overflow-checks = true` to detect integer overflow in release builds
636
+
- ✅ **Certificate pinning enforcement** - Created custom `PinnedRustlsConnector` using ureq's `Connector` trait to enforce certificate pinning for Fulcio and Rekor connections
637
+
- ✅ **TARA compliance documentation** - Added comprehensive documentation for ISO/SAE 21434 and IEC 62443 compliance:
0 commit comments