Версии XML::Sig до 0.71 для Perl допускают перенос подписи через дублирующийся идентификатор.
_get_signed_xml() в lib/XML/Sig.pm, вызываемый из методаverify(), преобразует SignedInfo Reference/@URI в узел с выражением XPath "//*[@ID='$id']" и возвращает первый узел результирующего набора узлов. Документ, в котором два элемента имеют одинаковое значение идентификатора, принимается: дайджест и подпись проверяются по тому элементу, который стоит первым в порядке документа, и дубликат не обнаруживается.
Такой документ успешно проверяется, в то время как приложение, которое независимо разрешает тот же идентификатор, может прочитать второй элемент, предоставленный злоумышленником; в контексте SAML2 это помещает содержимое утверждения под контроль злоумышленника.
Показать оригинальное описание (EN)
XML::Sig versions before 0.71 for Perl allow signature wrapping via duplicate ID. _get_signed_xml() in lib/XML/Sig.pm, called from verify(), resolves the SignedInfo Reference/@URI to a node with the XPath expression "//*[@ID='$id']" and returns the first node of the resulting node set. A document in which two elements share that ID value is accepted: the digest and signature are checked against whichever element comes first in document order, and the duplicate is not detected. Such a document verifies successfully while an application that resolves the same ID independently can read the second, attacker supplied element; in a SAML2 context this places the contents of an Assertion under attacker control.
Характеристики атаки
Последствия
Строка CVSS v3.1
Тип уязвимости (CWE)
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Xml\ \
cpe:2.3:a:xml\:\:sig_project:xml\:\:sig:*:*:*:*:*:perl:*:*
|
— |
0.71
|