CME-402

FIPS 140-3 Mode

Description

Enforces exclusive use of FIPS 140-3 validated cryptographic modules for all system cryptographic operations. Enabled via the fips=1 kernel boot parameter (dracut fips module) and fips-mode-setup on RHEL, or FIPSAlgorithmPolicy registry key on Windows. When active, the kernel crypto API restricts to validated implementations (AES, SHA-256+, RSA 2048+, ECDSA P-256/P-384, HMAC), the OpenSSL FIPS provider replaces the default provider, and GnuTLS/NSS restrict to FIPS-approved algorithms. Non-validated algorithms (MD5, RC4, DES, Blowfish, Camellia, IDEA) are removed from available cipher lists entirely — operations requesting them fail with an error rather than falling back to a weaker option. FIPS mode imposes significant compatibility constraints: some TLS cipher suites become unavailable, HMAC-MD5 is prohibited (breaking some Kerberos configurations), Ed25519 SSH keys are rejected, and applications using non-validated crypto (custom OpenSSL builds, BoringSSL, Go's crypto/tls) are unaffected. On RHEL, FIPS mode automatically sets the crypto policy to FIPS, which is stricter than DEFAULT but less restrictive than FUTURE for non-FIPS-relevant parameters. The primary value is compliance attestation (FedRAMP, CMMC, DISA STIG) combined with the security benefit of using audited, CAVP-tested implementations.

CVSS Vector Impacts

Metric Transition Rationale
Attack Complexity (AC) L → H Without FIPS mode, system crypto libraries offer both validated and non-validated algorithm implementations — an attacker exploiting a protocol downgrade vulnerability can force negotiation to a non-validated, potentially weaker implementation (e.g., MD5-based HMAC, RC4 stream cipher, DES). With FIPS mode active, non-validated algorithms are removed from the kernel crypto API and userspace library provider lists entirely — the negotiation cannot select them because they do not exist in the available set. The attacker must find an exploitable flaw in the FIPS-validated implementation itself, which has undergone NIST CAVP testing and third-party lab validation. Does not increase complexity for vulnerabilities that do not involve cryptographic algorithm selection (memory corruption, logic bugs, injection)

CWE Relationships

Verification

Verify FIPS mode is enabled at boot, kernel, and crypto library levels

$ fips-mode-setup --check
# Expected: FIPS mode is enabled
Platform: rhel
$ cat /proc/sys/crypto/fips_enabled
# Expected: 1
Platform: linux
$ grep -qw fips=1 /proc/cmdline && echo 'enabled' || echo 'disabled'
# Expected: enabled
Platform: linux
$ openssl list -providers 2>/dev/null | grep -c 'fips'
# Expected: 1
Platform: linux
$ Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy' -Name Enabled -ErrorAction SilentlyContinue | Select-Object -ExpandProperty Enabled
# Expected: 1
Platform: windows

Remediation

rhel Enable FIPS 140-3 mode via fips-mode-setup

fips-mode-setup --enable
systemctl reboot
windows Enable FIPS algorithm policy via registry

Set-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\Lsa\FIPSAlgorithmPolicy' -Name 'Enabled' -Value 1 -Type DWord
Restart-Computer -Force

Applicability (CVE 5.2.0 Schema)

Vendor Product CPEs Platforms Status
redhat enterprise_linux cpe:2.3:o:redhat:enterprise_linux:8:*:*:*:*:*:*:*
cpe:2.3:o:redhat:enterprise_linux:9:*:*:*:*:*:*:*
cpe:2.3:o:redhat:enterprise_linux:10:*:*:*:*:*:*:*
All applicable

References

← CME-401: System-wide Crypto Policy (FUTURE) CME-403: TLS 1.3 Enforcement →