Версии Net::SAML2 до 0.86 для Perl допускают обход аутентификации SAML посредством упаковки подписи XML, поскольку new_from_xml считывает идентификатор утверждения с помощью XPath для всего документа вместо подписанного поддерева.
new_from_xml считывает NameID, значения атрибутов, SessionIndex, Audience и другие поля идентификации с XPath для всего документа, такие как //saml:Assertion/saml:AttributeStatement/saml:Attribute и //saml:Subject/saml:NameID, которые выбирают первый соответствующий элемент в порядке документа, а не элемент, на который распространяется проверенная подпись. handle_response подтверждает, что подпись присутствует и, когда cacert настроен, что он связан с центром сертификации, но XML::Sig проверяет только элемент, указанный в ссылочном URI подписи, поэтому неподписанные одноуровневые утверждения в том же документе не рассматриваются. Злоумышленник, владеющий каким-либо одним утверждением, подписанным IdP, может добавить неподписанное утверждение, созданное злоумышленником, ранее в порядке документа; подпись все еще проверяется, и XPath порядка документов возвращает NameID и атрибуты злоумышленника.
Любой вызывающий объект, который передает недоверенный ответ на new_from_xml, может принимать поля идентификатора из утверждения, которое IdP никогда не подписывал, даже если настроена привязка доверия cacert, поэтому сторона, владеющая одним действительным утверждением, подписанным IdP, может аутентифицироваться как произвольный пользователь.
Показать оригинальное описание (EN)
Net::SAML2 versions before 0.86 for Perl allow SAML authentication bypass via XML signature wrapping because new_from_xml reads assertion identity with document-wide XPath instead of the signed subtree. new_from_xml reads the NameID, attribute values, SessionIndex, audience and other identity fields with document-wide XPath, such as //saml:Assertion/saml:AttributeStatement/saml:Attribute and //saml:Subject/saml:NameID, which select the first matching element in document order rather than the element covered by the verified signature. handle_response confirms that a signature is present and, when a cacert is configured, that it chains to the CA, but XML::Sig verifies only the element named by the signature's Reference URI, so unsigned sibling assertions in the same document are not covered. An attacker who holds any one IdP-signed assertion can add an unsigned attacker-authored assertion earlier in document order; the signature still verifies and the document-order XPath returns the attacker's NameID and attributes. Any caller that passes an untrusted Response to new_from_xml can accept identity fields from an assertion the IdP never signed, even when a cacert trust anchor is configured, so a party holding one valid IdP-signed assertion can authenticate as an arbitrary user.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Timlegge Net\
cpe:2.3:a:timlegge:net\:\:saml2:*:*:*:*:*:perl:*:*
|
— |
0.86
|