Use PKCS5 instead of ISO10126 padding for secrets encryption (4.3 backport) #14212
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
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