Bug 2142087

Summary: In FIPS mode, openssl should reject RSASSA-PSS salt lengths larger than the output size of the hash function used, or provide an indicator
Product: Red Hat Enterprise Linux 9 Reporter: Clemens Lang <cllang>
Component: opensslAssignee: Clemens Lang <cllang>
Status: CLOSED ERRATA QA Contact: Alicja Kario <hkario>
Severity: medium Docs Contact: Jan Fiala <jafiala>
Priority: high    
Version: 9.0CC: cllang, dbelyavs, gfialova, hkario, ssorce
Target Milestone: rcKeywords: Triaged, ZStream
Target Release: ---   
Hardware: x86_64   
OS: Linux   
Whiteboard:
Fixed In Version: openssl-3.0.7-2.el9 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of:
: 2144012 2144013 (view as bug list) Environment:
Last Closed: 2023-05-09 08:20:47 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On:    
Bug Blocks: 2144012, 2144013    
Attachments:
Description Flags
Reproducer that prints the indicator after creating a PSS signature none

Description Clemens Lang 2022-11-11 15:18:42 UTC
Description of problem:
FIPS 186-4, section 5 "The RSA Digital Signature Algorithm", subsection 5.5 "PKCS #1" says:

For RSASSA-PSS […] the length (in bytes) of the salt (sLen) shall satisfy 0 ≤ sLen ≤ hLen, where hLen is the length of the hash function output block (in bytes).

Our current copy of OpenSSL does not enforce this.

Version-Release number of selected component (if applicable):
3.0.1-43.el9_0

How reproducible:


Steps to Reproduce:
1. openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 -out rsa2048.pem
2. should work: openssl dgst -sha256 -sign rsa2048.pem -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:32 -out rsa2048.pem.sha256sig rsa2048.pem
3. should not work: openssl dgst -sha256 -sign rsa2048.pem -sigopt rsa_padding_mode:pss -sigopt rsa_pss_saltlen:33 -out rsa2048.pem.sha256sig rsa2048.pem, because the output length of SHA256 is 32 bytes.

Actual results:
Both commands succeed

Expected results:
Signature parameter error "rsa_pss_saltlen:33"
80BB4A493E7F0000:error:1C800070:Provider routines:rsa_set_ctx_params:invalid salt length:providers/implementations/signature/rsa_sig.c:1302:
or an indication that this is not a FIPS-approved operation

Additional info:
Older versions of OpenSSL default to using the maximum salt length supported by the RSA key length, so implementing an indicator may be preferable here.

Comment 6 Clemens Lang 2022-11-24 18:53:55 UTC
Created attachment 1927157 [details]
Reproducer that prints the indicator after creating a PSS signature

Comment 19 errata-xmlrpc 2023-05-09 08:20:47 UTC
Since the problem described in this bug report should be
resolved in a recent advisory, it has been closed with a
resolution of ERRATA.

For information on the advisory (Low: openssl security and bug fix update), and where to find the updated
files, follow the link below.

If the solution does not work for you, open a new bug report.

https://access.redhat.com/errata/RHSA-2023:2523