Версии XML::Sig до 0.71 для Perl допускают внедрение XPath при поиске идентификатора.
verify() и _get_signed_xml() в lib/XML/Sig.pm создают выражения XPath путем объединения значения SignedInfo/Reference/@URI, считанного из проверяемого документа. Значение не экранируется и не проверяется на соответствие грамматике NCName, которую XML требует от идентификатора, поэтому URI, содержащий одинарную кавычку, закрывает строковый литерал в сгенерированном выражении и добавляет произвольные операторы XPath.
Созданный URI может обеспечить соответствие поиска элементам, которые ссылка не называет, или каждому элементу в документе, поэтому выбор узла для проверки дайджеста определяется введенным выражением, а не ссылкой.
Показать оригинальное описание (EN)
XML::Sig versions before 0.71 for Perl allow XPath injection in ID lookup. verify() and _get_signed_xml() in lib/XML/Sig.pm build XPath expressions by concatenating the SignedInfo/Reference/@URI value read from the document being verified. The value is neither escaped nor checked against the NCName grammar that XML requires of an ID, so a URI containing a single quote closes the string literal in the generated expression and appends arbitrary XPath operators. A crafted URI can make the lookup match elements the reference does not name, or every element in the document, so which node is selected for digest verification is decided by the injected expression rather than by the reference.
Характеристики атаки
Последствия
Строка CVSS v3.1
Уязвимые продукты 1
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Xml\ \
cpe:2.3:a:xml\:\:sig_project:xml\:\:sig:*:*:*:*:*:perl:*:*
|
— |
0.71
|