saml2 2.2.7 → 2.2.8
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c16820ad8709894d30598abdc66c7258eaaa4bcce559a3f540e898226ecad9b7
|
4
|
+
data.tar.gz: cb81f7ca257db3e1aa45896749961cfb0ab63473499d70614931b02de5a975cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9aacff1311c151b1f8e53d9e63f519b5ff4d21c9c664c22ffcaff42519d9e22530445f8f287c8ab797f0ae7df12aee9d35e9ca9539e782262b2ff4c940a0626a
|
7
|
+
data.tar.gz: f7287daba3d0a8d5671f109c30deb9dabce202cbe5b0e7d821c50fb09afbc7cbd056dadf43f2d7ef16582a6bf46b271caf14e131b1f622520e48b1bdaa78d26d
|
data/lib/saml2/response.rb
CHANGED
@@ -131,6 +131,18 @@ module SAML2
|
|
131
131
|
response_signed = true
|
132
132
|
end
|
133
133
|
|
134
|
+
assertion = assertions.first
|
135
|
+
|
136
|
+
# this might be nil, if the assertion was encrypted
|
137
|
+
if assertion&.signed?
|
138
|
+
unless (signature_errors = assertion.validate_signature(fingerprint: idp.fingerprints,
|
139
|
+
cert: certificates,
|
140
|
+
allow_expired_certificate: allow_expired_certificate)).empty?
|
141
|
+
return errors.concat(signature_errors)
|
142
|
+
end
|
143
|
+
assertion_signed = true
|
144
|
+
end
|
145
|
+
|
134
146
|
find_decryption_key = ->(embedded_certificates) do
|
135
147
|
key = nil
|
136
148
|
embedded_certificates.each do |cert_info|
|
@@ -160,6 +172,8 @@ module SAML2
|
|
160
172
|
if decypted_anything
|
161
173
|
# have to re-validate the schema, since we just replaced content
|
162
174
|
super()
|
175
|
+
# also clear this cached value so that we can see cached assertions
|
176
|
+
remove_instance_variable(:@assertions)
|
163
177
|
return errors unless errors.empty?
|
164
178
|
end
|
165
179
|
end
|
@@ -169,13 +183,15 @@ module SAML2
|
|
169
183
|
return errors
|
170
184
|
end
|
171
185
|
|
172
|
-
assertion
|
186
|
+
assertion ||= assertions.first
|
173
187
|
unless assertion
|
174
188
|
errors << "no assertion found"
|
175
189
|
return errors
|
176
190
|
end
|
177
191
|
|
178
|
-
if assertion
|
192
|
+
# if we didn't previously check the assertion's signature (because it was encrypted)
|
193
|
+
# check it now
|
194
|
+
if assertion.signed? && !assertion_signed
|
179
195
|
unless (signature_errors = assertion.validate_signature(fingerprint: idp.fingerprints,
|
180
196
|
cert: certificates,
|
181
197
|
allow_expired_certificate: allow_expired_certificate)).empty?
|
data/lib/saml2/version.rb
CHANGED
@@ -0,0 +1,116 @@
|
|
1
|
+
<samlp:Response xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion" ID="_9a15e699-2d04-4ba7-a521-cfa4dcd21f44" Version="2.0" IssueInstant="2015-02-12T22:51:29Z" Destination="https://siteadmin.test.instructure.com/saml_consume" InResponseTo="_bec424fa5103428909a30ff1e31168327f79474984">
|
2
|
+
<saml:Issuer>issuer</saml:Issuer>
|
3
|
+
<samlp:Status>
|
4
|
+
<samlp:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/>
|
5
|
+
</samlp:Status>
|
6
|
+
<saml:Assertion ID="_cdfc3faf-90ad-462f-880d-677483210684" Version="2.0" IssueInstant="2015-02-12T22:51:29Z">
|
7
|
+
<saml:Issuer>issuer</saml:Issuer><Signature xmlns="http://www.w3.org/2000/09/xmldsig#">
|
8
|
+
<SignedInfo>
|
9
|
+
<CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
10
|
+
<SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#rsa-sha256"/>
|
11
|
+
<Reference URI="#_cdfc3faf-90ad-462f-880d-677483210684">
|
12
|
+
<Transforms>
|
13
|
+
<Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
|
14
|
+
<Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
|
15
|
+
</Transforms>
|
16
|
+
<DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/>
|
17
|
+
<DigestValue>r/MVi1aNDe8SSyvsDVmyQHNvl+sW0CjFeCnRnV5KL0w=</DigestValue>
|
18
|
+
</Reference>
|
19
|
+
</SignedInfo>
|
20
|
+
<SignatureValue>jRdOoXHY7uEg/ryIL+o8qXBlIlPJyw3nk27VkXWAOG28n17BDCUm5/qAngTK9eUB
|
21
|
+
4vkudLuRKs7bgSSa7UcAf0lytddqylJ561sb3+xFcggt5g5BDUpgjPOsdETuRyQ8
|
22
|
+
IGCPt+dsR2L5qWbZch4JkZwaOqs7EZUJ8dqljPObmYuMNzmyZ6VCIVFvOuVO0a8l
|
23
|
+
Ps4rqrwQ4BWGWyT0YPHXCAWWGxgDiWvpFEeTZ4T6XoSQlL+gzwUkBT07Q1l/iWaE
|
24
|
+
7JLrIBt4rglJE+FrWjJp7rV8y3UlFpOjlow6tZiCHUS9b1DhOn02A5dW1KiusmGs
|
25
|
+
gnL0yJLDPfDo1+2+YzWo3A==</SignatureValue>
|
26
|
+
<KeyInfo>
|
27
|
+
<X509Data>
|
28
|
+
<X509Certificate>MIID+jCCAuKgAwIBAgIJAIz/He5UafnhMA0GCSqGSIb3DQEBBQUAMFsxCzAJBgNV
|
29
|
+
BAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQKEw5Db2R5IFNBTUwgVGVzdDEk
|
30
|
+
MCIGA1UEAxMbaHR0cDovL3Nzby5jYW52YXMuZGV2L1NBTUwyMB4XDTE1MDIwOTIy
|
31
|
+
MTkxOVoXDTE1MDMxMTIyMTkxOVowWzELMAkGA1UEBhMCVVMxDTALBgNVBAgTBFV0
|
32
|
+
YWgxFzAVBgNVBAoTDkNvZHkgU0FNTCBUZXN0MSQwIgYDVQQDExtodHRwOi8vc3Nv
|
33
|
+
LmNhbnZhcy5kZXYvU0FNTDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
34
|
+
AQCwlbZhVkDi6YAHFpkxSoInc9Jrmezv0XKi8YzrDzO9Y7zHJlYygUQmgvD4I5fQ
|
35
|
+
tVW8sbp7gS5cCBmjbGJRXx3996qLq12//WLYMDkHktrbU1zZ6vsJ8ajHyQv4OFvq
|
36
|
+
qBnForSkuJbNi/QVTKiwbbBOZ75CbNBs1InoMN5MY2S5NhG9JhLjpktxNKfXFEi5
|
37
|
+
Wr0rc2T0lSbTHv7L6DUFKeKX7uK9bNREozZDwkyYUHZl1Vez88WiJw7CmzNEnm5v
|
38
|
+
13M6e60788M7E5FZBkTDkFK5+RV10ycYYNN7E8l0HzWSaB4+aJhKsK/Q7Yv+MG/j
|
39
|
+
Oj8KMeZvEJfhxx1Dz8idgy8RAgMBAAGjgcAwgb0wHQYDVR0OBBYEFOvkP77RRJET
|
40
|
+
X//KwdohNVfZBSvbMIGNBgNVHSMEgYUwgYKAFOvkP77RRJETX//KwdohNVfZBSvb
|
41
|
+
oV+kXTBbMQswCQYDVQQGEwJVUzENMAsGA1UECBMEVXRhaDEXMBUGA1UEChMOQ29k
|
42
|
+
eSBTQU1MIFRlc3QxJDAiBgNVBAMTG2h0dHA6Ly9zc28uY2FudmFzLmRldi9TQU1M
|
43
|
+
MoIJAIz/He5UafnhMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAQ6
|
44
|
+
iucYVoOHBXHGybLUj8i3yZEI8C0mZQ/NBsihMGBP58vNSSKUJr4JPvYUIudwkLVH
|
45
|
+
T1FWdfMVVVUxqJvCFWfWcpCyKTe4FQ0WyTasq1F9LtCaeMczlkpK+E2XBlNyPGoo
|
46
|
+
1fCDO6pXD7EIOprIFl3blspb5ROF8lCESjFKmyxVGHEOMs2GA0cX3xvW+AvCbYUC
|
47
|
+
Cg8Yo62X9vWW6PaKXHs3N+g1Ig16NwjdVIYvcxLc2KY0vrqu/R5c8RbmCxMZyss9
|
48
|
+
5y5OLZblsTw3CPgxgMcCiBSYXnO0VTpT9ANW/SpeSE8XnfumxUjsUtxO4qN4O2es
|
49
|
+
ZtltN+yN40INHGRWnHc=</X509Certificate>
|
50
|
+
</X509Data>
|
51
|
+
</KeyInfo>
|
52
|
+
</Signature>
|
53
|
+
<saml:Subject>
|
54
|
+
<saml:EncryptedID>
|
55
|
+
<EncryptedData xmlns="http://www.w3.org/2001/04/xmlenc#" Type="http://www.w3.org/2001/04/xmlenc#Element">
|
56
|
+
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#aes128-cbc"/>
|
57
|
+
<KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
|
58
|
+
<X509Data>
|
59
|
+
<X509Certificate>MIID+jCCAuKgAwIBAgIJAIz/He5UafnhMA0GCSqGSIb3DQEBBQUAMFsxCzAJBgNV
|
60
|
+
BAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQKEw5Db2R5IFNBTUwgVGVzdDEk
|
61
|
+
MCIGA1UEAxMbaHR0cDovL3Nzby5jYW52YXMuZGV2L1NBTUwyMB4XDTE1MDIwOTIy
|
62
|
+
MTkxOVoXDTE1MDMxMTIyMTkxOVowWzELMAkGA1UEBhMCVVMxDTALBgNVBAgTBFV0
|
63
|
+
YWgxFzAVBgNVBAoTDkNvZHkgU0FNTCBUZXN0MSQwIgYDVQQDExtodHRwOi8vc3Nv
|
64
|
+
LmNhbnZhcy5kZXYvU0FNTDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
|
65
|
+
AQCwlbZhVkDi6YAHFpkxSoInc9Jrmezv0XKi8YzrDzO9Y7zHJlYygUQmgvD4I5fQ
|
66
|
+
tVW8sbp7gS5cCBmjbGJRXx3996qLq12//WLYMDkHktrbU1zZ6vsJ8ajHyQv4OFvq
|
67
|
+
qBnForSkuJbNi/QVTKiwbbBOZ75CbNBs1InoMN5MY2S5NhG9JhLjpktxNKfXFEi5
|
68
|
+
Wr0rc2T0lSbTHv7L6DUFKeKX7uK9bNREozZDwkyYUHZl1Vez88WiJw7CmzNEnm5v
|
69
|
+
13M6e60788M7E5FZBkTDkFK5+RV10ycYYNN7E8l0HzWSaB4+aJhKsK/Q7Yv+MG/j
|
70
|
+
Oj8KMeZvEJfhxx1Dz8idgy8RAgMBAAGjgcAwgb0wHQYDVR0OBBYEFOvkP77RRJET
|
71
|
+
X//KwdohNVfZBSvbMIGNBgNVHSMEgYUwgYKAFOvkP77RRJETX//KwdohNVfZBSvb
|
72
|
+
oV+kXTBbMQswCQYDVQQGEwJVUzENMAsGA1UECBMEVXRhaDEXMBUGA1UEChMOQ29k
|
73
|
+
eSBTQU1MIFRlc3QxJDAiBgNVBAMTG2h0dHA6Ly9zc28uY2FudmFzLmRldi9TQU1M
|
74
|
+
MoIJAIz/He5UafnhMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAQ6
|
75
|
+
iucYVoOHBXHGybLUj8i3yZEI8C0mZQ/NBsihMGBP58vNSSKUJr4JPvYUIudwkLVH
|
76
|
+
T1FWdfMVVVUxqJvCFWfWcpCyKTe4FQ0WyTasq1F9LtCaeMczlkpK+E2XBlNyPGoo
|
77
|
+
1fCDO6pXD7EIOprIFl3blspb5ROF8lCESjFKmyxVGHEOMs2GA0cX3xvW+AvCbYUC
|
78
|
+
Cg8Yo62X9vWW6PaKXHs3N+g1Ig16NwjdVIYvcxLc2KY0vrqu/R5c8RbmCxMZyss9
|
79
|
+
5y5OLZblsTw3CPgxgMcCiBSYXnO0VTpT9ANW/SpeSE8XnfumxUjsUtxO4qN4O2es
|
80
|
+
ZtltN+yN40INHGRWnHc=</X509Certificate>
|
81
|
+
</X509Data>
|
82
|
+
<EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
|
83
|
+
<EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5"/>
|
84
|
+
<CipherData>
|
85
|
+
<CipherValue>N0tORClqCAyqs4XhId26gk7HpP4ApuqwYuzy/VrkRACAsWZeM4OXfjcrFfJPlcf1
|
86
|
+
gLx5tV/tTW/mHw98hXsGCGul/8LVazqGfsjTOtHXkO0i/RPgwVw/aa5+/Ggb+PQ9
|
87
|
+
o09y2HII5cmlCSJyUMaqk4g653y6PWF1emRtI6OxMK2St5YKQGzVq5KeWkiV7d7b
|
88
|
+
A6ZeR/n0qzjJ2z/qJzzOul4jjlz0/XR2Xb7FrkImza9zS2L7AwRqCpVkRw64/XAM
|
89
|
+
/d/SnpgbcNo/RAJzjbOCndBGu6G161nOnQF1+rrVBsDx4HIuImzuvbNBOz0YFe0F
|
90
|
+
DyLeXfOpHKgikh4wKa2okQ==</CipherValue>
|
91
|
+
</CipherData>
|
92
|
+
</EncryptedKey>
|
93
|
+
</KeyInfo>
|
94
|
+
<CipherData>
|
95
|
+
<CipherValue>TTwKeCn5Kqlhjqcj3XFZQ8o64rpYG8uohhBMAwxtqBojTOHe0Itn720Mb7BHHXwI
|
96
|
+
KrQn29N8SfC18/daWcNwGTH5njZFYYkHlhBXvb9q8z97jYTiTlNEi1GoWhalLYex
|
97
|
+
GnfLxpoBl2EaJw1j2mibbA==</CipherValue>
|
98
|
+
</CipherData>
|
99
|
+
</EncryptedData>
|
100
|
+
</saml:EncryptedID>
|
101
|
+
<saml:SubjectConfirmation Method="urn:oasis:names:tc:SAML:2.0:cm:bearer">
|
102
|
+
<saml:SubjectConfirmationData NotOnOrAfter="2015-02-12T22:54:29Z" Recipient="https://siteadmin.test.instructure.com/saml_consume" InResponseTo="_bec424fa5103428909a30ff1e31168327f79474984"/>
|
103
|
+
</saml:SubjectConfirmation>
|
104
|
+
</saml:Subject>
|
105
|
+
<saml:Conditions NotBefore="2015-02-12T22:51:24Z" NotOnOrAfter="2015-02-12T22:51:59Z">
|
106
|
+
<saml:AudienceRestriction>
|
107
|
+
<saml:Audience>http://siteadmin.instructure.com/saml2</saml:Audience>
|
108
|
+
</saml:AudienceRestriction>
|
109
|
+
</saml:Conditions>
|
110
|
+
<saml:AuthnStatement AuthnInstant="2015-02-12T22:51:29Z">
|
111
|
+
<saml:AuthnContext>
|
112
|
+
<saml:AuthnContextClassRef>urn:oasis:names:tc:SAML:2.0:ac:classes:unspecified</saml:AuthnContextClassRef>
|
113
|
+
</saml:AuthnContext>
|
114
|
+
</saml:AuthnStatement>
|
115
|
+
</saml:Assertion>
|
116
|
+
</samlp:Response>
|
data/spec/lib/response_spec.rb
CHANGED
@@ -278,6 +278,12 @@ module SAML2
|
|
278
278
|
expect(response.errors).to eq []
|
279
279
|
end
|
280
280
|
|
281
|
+
it "doesn't break the signature by decrypting elements first" do
|
282
|
+
response = Response.parse(fixture("response_with_signed_assertion_and_encrypted_subject.xml"))
|
283
|
+
sp_entity.valid_response?(response, idp_entity, verification_time: Time.parse('2015-02-12T22:51:30Z'))
|
284
|
+
expect(response.errors).to eq []
|
285
|
+
expect(response.assertions.first.subject.name_id.id).to eq 'jacob'
|
286
|
+
end
|
281
287
|
end
|
282
288
|
end
|
283
289
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: saml2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Cody Cutrer
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-06-
|
11
|
+
date: 2018-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: nokogiri
|
@@ -194,6 +194,7 @@ files:
|
|
194
194
|
- spec/fixtures/response_tampered_signature.xml
|
195
195
|
- spec/fixtures/response_with_attribute_signed.xml
|
196
196
|
- spec/fixtures/response_with_encrypted_assertion.xml
|
197
|
+
- spec/fixtures/response_with_signed_assertion_and_encrypted_subject.xml
|
197
198
|
- spec/fixtures/service_provider.xml
|
198
199
|
- spec/fixtures/test3-response.xml
|
199
200
|
- spec/fixtures/test6-response.xml
|
@@ -267,6 +268,7 @@ test_files:
|
|
267
268
|
- spec/fixtures/noconditions_response.xml
|
268
269
|
- spec/fixtures/entities.xml
|
269
270
|
- spec/fixtures/xml_signature_wrapping_attack_duplicate_ids.xml
|
271
|
+
- spec/fixtures/response_with_signed_assertion_and_encrypted_subject.xml
|
270
272
|
- spec/fixtures/othercertificate.pem
|
271
273
|
- spec/fixtures/xslt-transform-response.xml
|
272
274
|
- spec/fixtures/response_with_encrypted_assertion.xml
|