Версии Net::SAML2 до 0.86 для Perl позволяют обходить аутентификацию SAML путем проверки ответов по встроенному в ответ сертификату вverify_xml, когда привязка доверия не настроена.
verify_xml в Net::SAML2::Role::VerifyXML запускает «return if !$anchors && !$cacert;» как только проверка XML::Sig завершится успешно, и эта проверка использует сертификат X.509, взятый из собственного элемента dsig:KeyInfo/dsig:X509Certificate ответа, поэтому незакрепленный ответ проверяется только по ключу, который он несет. Binding::POST объявляет cacert как необязательный параметр Maybe[Str] без значения по умолчанию, поэтому привязка POST, созданная без него, использует этот путь, а _verify_encrypted_assertion возвращает таким же образом раньше с «return $xml, если только $cacert;».
Любой вызывающий объект, который создает Binding::POST или вызывает Assertion->new_from_xml без аргумента cacert, cert_text или привязки, принимает ответ, подписанный сгенерированным злоумышленником ключом, самозаверяющий сертификат которого встроен в этот ответ, аутентифицируя произвольное утверждение.
Показать оригинальное описание (EN)
Net::SAML2 versions before 0.86 for Perl allow SAML authentication bypass by verifying responses against the response-embedded certificate in verify_xml when no trust anchor is configured. verify_xml in Net::SAML2::Role::VerifyXML runs "return if !$anchors && !$cacert;" as soon as the XML::Sig check succeeds, and that check uses the X.509 certificate taken from the response's own dsig:KeyInfo/dsig:X509Certificate element, so an unanchored response is checked only against the key it carries. Binding::POST declares cacert as an optional Maybe[Str] with no default, so a POST binding built without one takes that path, and _verify_encrypted_assertion returns early the same way with "return $xml unless $cacert;". Any caller that constructs Binding::POST or calls Assertion->new_from_xml without a cacert, cert_text, or anchors argument accepts a response signed by an attacker generated key whose self-signed certificate is embedded in that response, authenticating an arbitrary assertion.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Timlegge Net\
cpe:2.3:a:timlegge:net\:\:saml2:*:*:*:*:*:perl:*:*
|
— |
0.86
|