🇰🇷 한글 설명
Node.js의 yauzl 라이브러리 3.2.0 버전에서 NTFS 확장 타임스탐프 파서의 off-by-one 에러로 인해 버퍼 경계를 넘어 읽을 수 있습니다. 악의적으로 조작된 zip 파일을 통해 원격 공격자가 프로세스 충돌을 유발하여 서비스 거부 공격을 수행할 수 있습니다.
💡 쉬운 설명
zip 파일을 처리하는 Node.js 프로그램이 버그로 인해 조작된 zip 파일을 받으면 프로그램이 강제 종료됩니다. 프로그램을 최신 버전으로 업데이트하면 이 문제가 해결됩니다.
🇺🇸 원문 (English)
yauzl (aka Yet Another Unzip Library) version 3.2.0 for Node.js contains an off-by-one error in the NTFS extended timestamp extra field parser within the getLastModDate() function. The while loop condition checks cursor < data.length + 4 instead of cursor + 4 <= data.length, allowing readUInt16LE() to read past the buffer boundary. A remote attacker can cause a denial of service (process crash via ERR_OUT_OF_RANGE exception) by sending a crafted zip file with a malformed NTFS extra field. This affects any Node.js application that processes zip file uploads and calls entry.getLastModDate() on parsed entries. Fixed in version 3.2.1.
📍 영향받는 시스템
yauzl <= 3.2.0 (Node.js 패키지)
⚔️ 공격 벡터
NTFS 확장 타임스탐프가 조작된 악의적 zip 파일을 업로드하여 entry.getLastModDate() 호출 시 버퍼 오버리드 발생
🛡️ 대응 방법
npm update yauzl 또는 package.json에서 yauzl을 ^3.2.1 이상으로 지정하여 재설치
🔧 검증 코드
3.2.0 이하 버전이 출력되면 취약한 상태이며, 3.2.1 이상이 출력되거나 출력이 없으면 안전합니다.
npm list yauzl 2>/dev/null | grep -oP 'yauzl@\K[0-9.]+' | head -1