Skip to content

Commit d8ba3da

Browse files
committed
Failing test case for XSW attack
1 parent 4a2e120 commit d8ba3da

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

test/unit/test_response.rb

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,31 @@
2020
end
2121
end
2222

23+
describe "XSW attack" do
24+
it "should not validate if SAML response is hacked" do
25+
document = saml_response_document(:certificate => TEST_CERTIFICATE)
26+
27+
modified_document = Nokogiri::XML(document)
28+
29+
original_assertion = modified_document.xpath("/samlp:Response/saml:Assertion", Samlr::NS_MAP).first
30+
31+
response_signature = modified_document.xpath("/samlp:Response/ds:Signature", Samlr::NS_MAP).first
32+
33+
extensions = Nokogiri::XML::Node.new "Extensions", modified_document
34+
extensions << original_assertion.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XML)
35+
response_signature.add_next_sibling(extensions)
36+
response_signature.remove()
37+
38+
modified_document.xpath("/samlp:Response/samlp:Extensions/saml:Assertion/ds:Signature", Samlr::NS_MAP).remove()
39+
modified_document.xpath("/samlp:Response/saml:Assertion/saml:Subject/saml:NameID", Samlr::NS_MAP).first.content="[email protected]"
40+
modified_document.xpath("/samlp:Response/saml:Assertion", Samlr::NS_MAP).first["ID"] = "evil_id"
41+
42+
response = Samlr::Response.new(modified_document.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::AS_XML), {:certificate => TEST_CERTIFICATE.x509})
43+
assert_equal true, response.verify!
44+
assert_equal "[email protected]", response.name_id
45+
end
46+
end
47+
2348
describe "::parse" do
2449
before { @document = saml_response_document(:certificate => TEST_CERTIFICATE) }
2550

0 commit comments

Comments
 (0)