Andreas Martens created RAMPART-462:
---------------------------------------
Summary: SymmetricBindingBuilder.setupEncryptedKey() always
generates an AES-128 session key regardless of the AlgorithmSuite's encryption
algorithm
Key: RAMPART-462
URL: https://issues.apache.org/jira/browse/RAMPART-462
Project: Rampart
Issue Type: Bug
Components: rampart-core
Reporter: Andreas Martens
*Problem*
When a policy uses a {{SymmetricBinding}} whose {{ProtectionToken}} is an
{{{}X509Token{}}}, the client generates the symmetric key in
{{{}SymmetricBindingBuilder.setupEncryptedKey(){}}}. That method hardcodes
{{{}KeyUtils.getKeyGenerator(WSConstants.AES_128){}}}.
The key is then used to derive the signature and encrypt message parts. Its
length therefore ignores the {{AlgorithmSuite}} in the policy.
*Expected*
The generated key should match the policy's {{sp:AlgorithmSuite}} encryption
algorithm. For example, {{Basic256}} should give a 256-bit AES key, and
{{TripleDes}} should give a 3DES key.
*Actual*
* The key is always 128-bit AES, which is either weaker than the policy
requires or incompatible with it.
* The suite's {{getEncryption()}} URI (for example
{{{}http://www.w3.org/2001/04/xmlenc#aes256-cbc{}}}) is never consulted.
* If the key generator fails, the code calls {{e.printStackTrace()}} and
returns {{{}null{}}}. The error is not reported as a {{{}RampartException{}}}.
This is existing behaviour that the patch keeps.
*Steps to reproduce*
# Configure a service and client with a {{SymmetricBinding}} using an
{{X509Token}} protection token and an {{AlgorithmSuite}} such as {{Basic256}}
or {{{}Basic192{}}}.
# Send a request.
# Inspect the message or the generated {{{}EncryptedKey{}}}. The session key
is 16 bytes, not the 32 or 24 the suite requires.
For the third step, you could instead log {{symmetricKey.getAlgorithm()}} and
{{symmetricKey.getEncoded().length}} in a unit test.
*Proposed fix*
* Use {{rmd.getPolicyData().getAlgorithmSuite().getEncryption()}} to select
the key generator.
* Fall back to {{WSConstants.AES_128}} when it is null.
Why now?
WSS4J has tighter checking in more recent releases, I needed to pick this up to
get a Kerberos fix, hence discovering this.
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]