
redos
CVE-2024-27088
26 февраля 2024 г.
ReDoS в пакете node.js
Часть проекта rebob
/^\sfunction\s([\0-')-\uffff]+)\s(([\0-(-\uffff]))\s*{/
Эта уязвимость может быть использована при дисбалансе круглых скобок, что приводит к чрезмерному возврату (backtracking) и, как следствие, значительно увеличивает нагрузку на ЦП и время обработки. Уязвимость можно активировать с помощью следующего ввода:
'function{' + 'n'.repeat(31) + '){'
Вот простой PoC-код, демонстрирующий проблему:
const protocolre = /^\sfunction\s([\0-')-\uffff]+)\s(([\0-(-\uffff]))\s*{/;
const startTime = Date.now();
const maliciousInput = 'function{' + 'n'.repeat(31) + '){'
protocolre.test(maliciousInput);
const endTime = Date.now();
console.log("process time: ", endTime - startTime, "ms");
Воздействие
Передача функций с очень длинными именами или сложными именами аргументов по умолчанию в function#copy или function#toStringTokens может привести к зависанию скрипта.
Исправления Исправлено коммитами 3551cdd и a52e957 Опубликовано в версии v0.10.63
Обходные пути Настоящего обходного пути нет, кроме отказа от использования вышеуказанных утилит.