Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use PKCS5 instead of ISO10126 padding for secrets encryption (4.3 backport) #14212

Merged
merged 1 commit into from Dec 14, 2022

Conversation

mpfz0r
Copy link
Member

@mpfz0r mpfz0r commented Dec 14, 2022

If Graylog is run in an FIPS environment there is no crypto provider available that supports "AES/CBC/ISO10126Padding". This is likely because this padding standard was withdrawn from ISO in 2007.
It is considered bad practice to leave a subliminal channel in the padding.

We tried to workaround this by explicitly using BouncyCastle for the encryption/decryption.

This however creates problems with Oracle Java, because we strip the signature off the bouncy castle jar while repackaging it into our Uber-Jar.
In contrast to OpenJDK, Oracle Java does not allow the use of unsigned Security Providers.

Solution:

Change our secret encryption to using PKCS5Padding instead. There is a FIPS compatible provider "SunPKCS11-NSS-FIPS" available which supports "AES/CBC/PKCS5Padding".

For backwards compatibility, we decrypt the ISO10126Padded keys without stripping the padding, and do that manually.

Fixes #14153

Refs #13525

use explicit type to simplify backport

Also try legacy decoding when catching a ProviderException

This seems to happen with FIPS enabled OpenJDK 17

Try decrypting legacy keys on any Exception

improve wording on comments

improve changelog

If Graylog is run in an FIPS environment there is no
crypto provider available that supports "AES/CBC/ISO10126Padding".
This is likely because this padding standard was withdrawn from ISO in
2007.
It is considered bad practice to leave a subliminal channel in the
padding.

We tried to workaround this by explicitly using BouncyCastle
for the encryption/decryption.

This however creates problems with Oracle Java, because
we strip the signature off the bouncy castle jar while repackaging
it into our Uber-Jar.
In contrast to OpenJDK, Oracle Java does not allow the use
of unsigned Security Providers.

Solution:

Change our secret encryption to using PKCS5Padding instead.
There is a FIPS compatible provider "SunPKCS11-NSS-FIPS"
available which supports "AES/CBC/PKCS5Padding".

For backwards compatibility, we decrypt the ISO10126Padded keys
without stripping the padding, and do that manually.

Fixes #14153

Refs #13525

use explicit type to simplify backport

Also try legacy decoding when catching a ProviderException

This seems to happen with FIPS enabled OpenJDK 17

Try decrypting legacy keys on any Exception

improve wording on comments

improve changelog
@mpfz0r mpfz0r requested review from bernd and thll December 14, 2022 09:35
@bernd bernd merged commit 0c1538e into 4.3 Dec 14, 2022
@bernd bernd deleted the issue-14153-4.3 branch December 14, 2022 10:27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

3 participants