[ 
https://issues.apache.org/jira/browse/RAMPART-402?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18087800#comment-18087800
 ] 

Robert Lazarski commented on RAMPART-402:
-----------------------------------------

 Deferring to 2.0.1.

  Investigated against the 2.0.0 codebase (WSS4J 4.x / Jakarta). The core of the
  reported bug is real: PolicyBasedResultsValidator.validateSignedPartsHeaders 
only
  validates a signed part when wsep.getName() equals the literal "Header" (or 
the part
  has an XPath). Named header parts carry the actual header local name (e.g. 
"To",
  "VitalHeader"), so policy-required signed headers are currently never 
verified as
  signed. The attached patch's fix (change that `else if` to `else` so all 
non-body
  parts are checked) is conceptually correct.

  However, applying that fix is not sufficient and is why the earlier attempt 
failed.
  It makes RampartTest.testWithPolicy case 31 fail with:
      Element must be signed : http://sample.com:VitalHeader

  Root cause (confirmed with temporary debug tracing):
   - Policy rampart/policy/31.xml uses AsymmetricBinding with 
<sp:EncryptBeforeSigning/>
     and lists VitalHeader in BOTH <sp:SignedParts> and <sp:EncryptedParts>.
   - Outbound, RampartUtil.getPartsAndElements DOES find 
{http://sample.com}VitalHeader
     and adds it to both the sign and encrypt parts lists.
   - But at the receiver, the signed set contains only Body and Timestamp; 
VitalHeader
     never appears in any signed set, and the server also reports "Expected 
encrypted
     part missing". Under EncryptBeforeSigning the header that is both 
encrypted and
     signed ends up neither verifiably signed nor encrypted on the wire - it is
     encrypted away and the by-name signature reference no longer resolves.
     The pre-existing test only passed because the broken validator never 
checked it.

  A complete fix therefore needs two parts:
   1. The validator change above (ready), and
   2. Fixing Rampart's encrypt-before-sign handling so a header that is both 
encrypted
      and signed is actually protected, plus teaching the validator to map the
      encrypted/signed form back to the original header QName.

  Part 2 is non-trivial WSS4J 4.x work and is being deferred out of the 2.0.0 
release
  to avoid rushing a change to the signature/encryption validation path. Moving 
Fix
  Version to 2.0.1.


> PolicyBasedResultsValidator does not correctly check signed parts
> -----------------------------------------------------------------
>
>                 Key: RAMPART-402
>                 URL: https://issues.apache.org/jira/browse/RAMPART-402
>             Project: Rampart
>          Issue Type: Bug
>    Affects Versions: 1.6.2
>            Reporter: Nathan Clement
>            Assignee: Robert Lazarski
>            Priority: Major
>              Labels: Patch
>             Fix For: 2.0.1
>
>         Attachments: check_signed_parts.patch
>
>
> PolicyBasedResultsValidator does not correctly check the signed parts from 
> the policy because it is checking that the element name is "Header".  
> Obviously this won't match the signed part element name in the policy.  I'm 
> not sure of the historical reason for this, but I've removed this check in my 
> attached patch.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to