@@ -1374,7 +1374,7 @@ public void testContentIsAcceptedIfRestrictedToOurAudience() throws Exception {
1374
1374
}
1375
1375
1376
1376
public void testContentIsRejectedIfNotMarkedAsSuccess () throws Exception {
1377
- final String xml = getSimpleResponse ( clock . instant ()). replace ( StatusCode . SUCCESS , StatusCode . REQUESTER );
1377
+ final String xml = getStatusFailedResponse ( );
1378
1378
final SamlToken token = token (signDoc (xml ));
1379
1379
final ElasticsearchSecurityException exception = expectSamlException (() -> authenticator .authenticate (token ));
1380
1380
assertThat (exception .getMessage (), containsString ("not a 'success' response" ));
@@ -1408,8 +1408,7 @@ public void testSignatureWrappingAttackOne() throws Exception {
1408
1408
<ForgedAssertion></ForgedAssertion>
1409
1409
</ForgedResponse>
1410
1410
*/
1411
- final Element response = (Element ) legitimateDocument .
1412
- getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1411
+ final Element response = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1413
1412
final Element clonedResponse = (Element ) response .cloneNode (true );
1414
1413
final Element clonedSignature = (Element ) clonedResponse .
1415
1414
getElementsByTagNameNS ("http://www.w3.org/2000/09/xmldsig#" , "Signature" ).item (0 );
@@ -1443,8 +1442,7 @@ public void testSignatureWrappingAttackTwo() throws Exception {
1443
1442
<ForgedAssertion></ForgedAssertion>
1444
1443
</ForgedResponse>
1445
1444
*/
1446
- final Element response = (Element ) legitimateDocument .
1447
- getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1445
+ final Element response = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1448
1446
final Element clonedResponse = (Element ) response .cloneNode (true );
1449
1447
final Element clonedSignature = (Element ) clonedResponse .
1450
1448
getElementsByTagNameNS ("http://www.w3.org/2000/09/xmldsig#" , "Signature" ).item (0 );
@@ -1482,8 +1480,7 @@ public void testSignatureWrappingAttackThree() throws Exception {
1482
1480
</LegitimateAssertion>
1483
1481
</Response>
1484
1482
*/
1485
- final Element response = (Element ) legitimateDocument .
1486
- getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1483
+ final Element response = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1487
1484
final Element assertion = (Element ) legitimateDocument .
1488
1485
getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1489
1486
final Element forgedAssertion = (Element ) assertion .cloneNode (true );
@@ -1522,10 +1519,8 @@ public void testSignatureWrappingAttackFour() throws Exception {
1522
1519
</ForgedAssertion>
1523
1520
</Response>
1524
1521
*/
1525
- final Element response = (Element ) legitimateDocument .
1526
- getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1527
- final Element assertion = (Element ) legitimateDocument .
1528
- getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1522
+ final Element response = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1523
+ final Element assertion = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1529
1524
final Element forgedAssertion = (Element ) assertion .cloneNode (true );
1530
1525
forgedAssertion .setAttribute ("ID" , "_forged_assertion_id" );
1531
1526
final Element clonedSignature = (Element ) forgedAssertion .
@@ -1559,17 +1554,14 @@ public void testSignatureWrappingAttackFive() throws Exception {
1559
1554
<LegitimateAssertion></LegitimateAssertion>
1560
1555
</Response>
1561
1556
*/
1562
- final Element response = (Element ) legitimateDocument .
1563
- getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1564
- final Element assertion = (Element ) legitimateDocument .
1565
- getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1557
+ final Element response = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1558
+ final Element assertion = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1566
1559
final Element signature = (Element ) assertion .
1567
- getElementsByTagNameNS ("http://www.w3.org/2000/09/xmldsig#" , "Signature" ).item (0 );
1560
+ getElementsByTagNameNS ("http://www.w3.org/2000/09/xmldsig#" , "Signature" ).item (0 );
1568
1561
assertion .removeChild (signature );
1569
1562
final Element forgedAssertion = (Element ) assertion .cloneNode (true );
1570
1563
forgedAssertion .setAttribute ("ID" , "_forged_assertion_id" );
1571
- final Element issuer = (Element ) forgedAssertion .
1572
- getElementsByTagNameNS (SAML20_NS , "Issuer" ).item (0 );
1564
+ final Element issuer = (Element ) forgedAssertion .getElementsByTagNameNS (SAML20_NS , "Issuer" ).item (0 );
1573
1565
forgedAssertion .insertBefore (signature , issuer .getNextSibling ());
1574
1566
response .insertBefore (forgedAssertion , assertion );
1575
1567
final SamlToken forgedToken = token (SamlUtils .toString ((legitimateDocument .getDocumentElement ())));
@@ -1598,10 +1590,8 @@ public void testSignatureWrappingAttackSix() throws Exception {
1598
1590
</ForgedAssertion>
1599
1591
</Response>
1600
1592
*/
1601
- final Element response = (Element ) legitimateDocument .
1602
- getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1603
- final Element assertion = (Element ) legitimateDocument .
1604
- getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1593
+ final Element response = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1594
+ final Element assertion = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1605
1595
final Element forgedAssertion = (Element ) assertion .cloneNode (true );
1606
1596
forgedAssertion .setAttribute ("ID" , "_forged_assertion_id" );
1607
1597
final Element signature = (Element ) assertion .
@@ -1610,8 +1600,7 @@ public void testSignatureWrappingAttackSix() throws Exception {
1610
1600
getElementsByTagNameNS ("http://www.w3.org/2000/09/xmldsig#" , "Signature" ).item (0 );
1611
1601
forgedAssertion .removeChild (forgedSignature );
1612
1602
assertion .removeChild (signature );
1613
- final Element issuer = (Element ) forgedAssertion .
1614
- getElementsByTagNameNS (SAML20_NS , "Issuer" ).item (0 );
1603
+ final Element issuer = (Element ) forgedAssertion .getElementsByTagNameNS (SAML20_NS , "Issuer" ).item (0 );
1615
1604
forgedAssertion .insertBefore (signature , issuer .getNextSibling ());
1616
1605
signature .appendChild (assertion );
1617
1606
response .appendChild (forgedAssertion );
@@ -1642,11 +1631,9 @@ public void testSignatureWrappingAttackSeven() throws Exception {
1642
1631
</LegitimateAssertion>
1643
1632
</Response>
1644
1633
*/
1645
- final Element response = (Element ) legitimateDocument .
1646
- getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1634
+ final Element response = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1647
1635
final Element extensions = legitimateDocument .createElement ("Extensions" );
1648
- final Element assertion = (Element ) legitimateDocument .
1649
- getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1636
+ final Element assertion = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1650
1637
response .insertBefore (extensions , assertion );
1651
1638
final Element forgedAssertion = (Element ) assertion .cloneNode (true );
1652
1639
forgedAssertion .setAttribute ("ID" , "_forged_assertion_id" );
@@ -1683,10 +1670,8 @@ public void testSignatureWrappingAttackEight() throws Exception {
1683
1670
</ForgedAssertion>
1684
1671
</Response>
1685
1672
*/
1686
- final Element response = (Element ) legitimateDocument .
1687
- getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1688
- final Element assertion = (Element ) legitimateDocument .
1689
- getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1673
+ final Element response = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20P_NS , "Response" ).item (0 );
1674
+ final Element assertion = (Element ) legitimateDocument .getElementsByTagNameNS (SAML20_NS , "Assertion" ).item (0 );
1690
1675
final Element forgedAssertion = (Element ) assertion .cloneNode (true );
1691
1676
forgedAssertion .setAttribute ("ID" , "_forged_assertion_id" );
1692
1677
final Element signature = (Element ) assertion .
@@ -1695,8 +1680,7 @@ public void testSignatureWrappingAttackEight() throws Exception {
1695
1680
getElementsByTagNameNS ("http://www.w3.org/2000/09/xmldsig#" , "Signature" ).item (0 );
1696
1681
forgedAssertion .removeChild (forgedSignature );
1697
1682
assertion .removeChild (signature );
1698
- final Element issuer = (Element ) forgedAssertion .
1699
- getElementsByTagNameNS (SAML20_NS , "Issuer" ).item (0 );
1683
+ final Element issuer = (Element ) forgedAssertion .getElementsByTagNameNS (SAML20_NS , "Issuer" ).item (0 );
1700
1684
forgedAssertion .insertBefore (signature , issuer .getNextSibling ());
1701
1685
Element object = legitimateDocument .createElement ("Object" );
1702
1686
object .appendChild (assertion );
@@ -2034,7 +2018,7 @@ private void encryptElement(Element element, X509Certificate certificate, boolea
2034
2018
}
2035
2019
2036
2020
private Element buildEncryptedKeyElement (Document document , EncryptedKey encryptedKey , X509Certificate certificate )
2037
- throws XMLSecurityException {
2021
+ throws XMLSecurityException {
2038
2022
final XMLCipher cipher = XMLCipher .getInstance ();
2039
2023
final org .apache .xml .security .keys .KeyInfo keyInfo = new org .apache .xml .security .keys .KeyInfo (document );
2040
2024
final X509Data x509Data = new X509Data (document );
@@ -2054,6 +2038,23 @@ private Response toResponse(String xml) throws SAXException, IOException, Parser
2054
2038
return authenticator .buildXmlObject (doc .getDocumentElement (), Response .class );
2055
2039
}
2056
2040
2041
+ private String getStatusFailedResponse () {
2042
+ final Instant now = clock .instant ();
2043
+ return "<?xml version='1.0' encoding='UTF-8'?>\n " +
2044
+ "<proto:Response Destination='" + SP_ACS_URL + "' ID='" + randomId () + "' InResponseTo='" + requestId +
2045
+ "' IssueInstant='" + now + "' Version='2.0'" +
2046
+ " xmlns:proto='urn:oasis:names:tc:SAML:2.0:protocol'" +
2047
+ " xmlns:assert='urn:oasis:names:tc:SAML:2.0:assertion'" +
2048
+ " xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'" +
2049
+ " xmlns:xs='http://www.w3.org/2001/XMLSchema'" +
2050
+ " xmlns:ds='http://www.w3.org/2000/09/xmldsig#' >" +
2051
+ "<assert:Issuer>" + IDP_ENTITY_ID + "</assert:Issuer>" +
2052
+ "<proto:Status><proto:StatusCode Value='urn:oasis:names:tc:SAML:2.0:status:Requester'>" +
2053
+ "<proto:StatusCode Value='urn:oasis:names:tc:SAML:2.0:status:InvalidNameIDPolicy'/></proto:StatusCode>" +
2054
+ "</proto:Status>" +
2055
+ "</proto:Response>" ;
2056
+ }
2057
+
2057
2058
private String getSimpleResponse (Instant now ) {
2058
2059
return getSimpleResponse (now , randomAlphaOfLengthBetween (12 , 18 ), randomId ());
2059
2060
}
0 commit comments