🇰🇷 한글 설명
websocket-driver는 교체 가능한 I/O를 갖춘 WebSocket 프로토콜 핸들러입니다. 0.7.5 이전 버전의 draft75.js에서 프레임 길이 헤더를 파싱할 때, 최상위 비트가 설정된 바이트 시퀀스로 임의로 큰 정수를 인코딩할 수 있어 부동소수점 정밀도 손실로 후속 페이로드가 잘못 파싱될 수 있습니다.
💡 쉬운 설명
웹소켓 통신에서 데이터 길이를 읽는 부분에 결함이 있어, 악의적인 클라이언트가 이를 악용할 수 있습니다. 0.7.5 버전 이상으로 업데이트하면 이 문제가 해결됩니다.
🇺🇸 원문 (English)
websocket-driver is a WebSocket protocol handler with pluggable I/O. Prior to 0.7.5, the frame format in draft versions of the WebSocket protocol includes a length header that allows an arbitrarily large integer to be encoded as a sequence of bytes with the high bit set. By sending an indefinite sequence of bytes with values 0x80 or above, a client can make the server parse these bytes into an ever-growing integer in lib/websocket/driver/draft75.js; because JavaScript numbers are 64-bit floating point values, this number will eventually lose precision and lead to the subsequent payload being parsed incorrectly. This issue is fixed in version 0.7.5.
📍 영향받는 시스템
websocket-driver 0.7.5 미만 버전을 사용하는 Node.js 애플리케이션
⚔️ 공격 벡터
원격 클라이언트가 0x80 이상의 바이트를 무한히 전송해 길이 값을 부정확하게 만들어 페이로드 파싱을 오작동시킴
🛡️ 대응 방법
websocket-driver를 0.7.5 이상으로 업그레이드 (npm update websocket-driver)
🔧 검증 코드
출력된 버전이 0.7.5 미만이면 취약하며, 0.7.5 이상이면 패치된 상태입니다.
npm ls websocket-driver 2>/dev/null | grep -E 'websocket-driver@'