Обход верификации в библиотеке xml-crypto, насчитывающей миллион загрузок в неделю

В JavaScript-библиотеке xml-crypto, используемой в качестве зависимости у 402 проектов и загружаемой из каталога NPM около миллиона раз каждую неделю, выявлена уязвимость (CVE-2024-32962), которой присвоен максимальный уровень опасности (10 из 10). Библиотека предоставляет функции для шифрования и верификации по цифровой подписи XML-документов. Уязвимость даёт возможность атакующему заверить фиктивный документ, который в конфигурации по умолчанию будет успешно верифицирован библиотекой, несмотря на то, что он подписан не тем ключом, что указан для проверки подписей. Проблема проявляется начина с версии xml-crypto 4.0.0 и без лишней огласки устранена в январском выпуске 6.0.0.

Уязвимость вызвана тем, что в конфигурации по умолчанию библиотека не авторизирует создателя подписи, а проверяет только корректность самой подписи. В частности, библиотека доверяет любому сертификату, размещённому в подписанном документе в XML-элементе KeyInfo, даже если в настройках указано использование конкретного сертификата для проверки цифровых подписей. Таким образом, для успешной верификации модифицированного документа атакующему достаточно заменить оригинальную цифровую подпись на подпись, сформированную своим закрытым ключом, и разместить связанный с этим закрытым ключом сертификат (открытый ключ) в элементе KeyInfo.

Release. Ссылка here.