Re: BUG #17593: min key size 112 bits from FIPS SP800-131 requirement for HMAC-SHA raises exception in SCRAM-SHA-256

From: Scott Zelenka <szelenka(at)gmail(dot)com>
To: Scott Zelenka <szelenka(at)gmail(dot)com>, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #17593: min key size 112 bits from FIPS SP800-131 requirement for HMAC-SHA raises exception in SCRAM-SHA-256
Date: 2022-08-26 00:22:15
Message-ID: CAMq7iZPyquenFPto5O5QJq5xMTQzczbsH762WY0tFbFft0P6Gw@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

This patch seems to mitigate the issue. Not sure if this is the best
approach, or if there's another place we should watch out for empty
passwords when dealing with SCRAM-SHA-256 and FIPS.

diff -Nruw postgresql/src/backend/libpq/auth-scram.c
postgresql.new/src/backend/libpq/auth-scram.c
--- postgresql/src/backend/libpq/auth-scram.c 2022-08-08 20:44:29.000000000
+0000
+++ postgresql.new/src/backend/libpq/auth-scram.c 2022-08-26
00:10:57.812215180 +0000
@@ -522,6 +522,13 @@
return false;
}
+ if (strlen(password) == 0)
+ {
+ ereport(LOG,
+ (errmsg("invalid SCRAM password for user \"%s\"", username)));
+ return false;
+ }
+
/* Normalize the password */
rc = pg_saslprep(password, &prep_password);
if (rc == SASLPREP_SUCCESS)

On Thu, Aug 25, 2022 at 1:27 PM PG Bug reporting form <
noreply(at)postgresql(dot)org> wrote:

> The following bug has been logged on the website:
>
> Bug reference: 17593
> Logged by: Scott Zelenka
> Email address: szelenka(at)gmail(dot)com
> PostgreSQL version: 14.5
> Operating system: Ubuntu 20.04
> Description:
>
> Running postgres with:
>
> postgres -D /home/postgres/pgdata/pgroot/data \
> --password_encryption=scram-sha-256 \
> --ssl=on \
> --ssl_cert_file='/run/certs/server.crt' \
> --ssl_key_file='/run/certs/server.key'
>
> Will raise an error when attempting to create a ROLE with a SCRAM-SHA-256
> password:
>
> CREATE ROLE "test-enc-pw" LOGIN ENCRYPTED PASSWORD
>
> 'SCRAM-SHA-256$4096:RlI0UDRNeEFSRUp0Y29kWA==$knE29fNkMKTvocaIou0vfZ+J+lwp4hawGKrXPVDOA08=:ZMQb8JU1qRdMv0wjFUBuD/E2G+YJhHV+KBSVzDC6ifA=';
>
> Running on Postgres 125 BETA 3 gives more context into the error:
>
> ERROR: could not compute server key: invalid key length
>
> The "invalid key length" is returned from the FIPS Validated OpenSSL
> library
> Postgres is linked to. Where it is enforcing FIPS SP800-131 requirement for
> HMAC-SHA, minimum key size is 112 bits when used for security purposes.
>
> This appears to be triggered during the NULL password check during CREATE
> ROLE:
>
> https://github.com/postgres/postgres/blob/REL_15_BETA3/src/backend/commands/user.c#L373
>
> Attaching a debugger, we can see that in normal code execution path, the
> plain_crypt_verify method should return STATUS_ERROR (because the password
> is not actually empty) then continue on it’s way to perform the actual
> encryption. But because we specify SCRAM-SHA we trigger
> scram_verify_plain_password:
>
> https://github.com/postgres/postgres/blob/REL_15_BETA3/src/backend/libpq/crypt.c#L236-L239
>
> Which causes it to error out, rather than returning a STATUS_ERROR like the
> working path(s).
>
> There seems to be a conflict with how the NULL password is checked for, and
> enforcement of FIPS SP800-131 by a FIPS Validated OpenSSL library.
>
>

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Amit Kapila 2022-08-26 01:34:12 Re: Excessive number of replication slots for 12->14 logical replication
Previous Message Tom Lane 2022-08-25 20:49:09 Re: BUG #17594: conditional hash indexes size (hash index ignore WHERE condition during CREATE INDEX?)