🇰🇷 한글 설명
undici의 실험적 WebSocketStream 클라이언트에서 원격 피어가 WebSocket 종료 핸드셰이크 없이 TCP 연결을 강제로 종료할 경우 Node.js 프로세스 전체가 충돌하는 취약점입니다. 비정상적인 종료 시 내부 소켓 핸들러가 처리되지 않은 Promise를 생성하며, 이로 인해 발생하는 unhandled-rejection이 Node.js의 기본 동작에 따라 프로세스를 종료시킵니다. 공격자는 인증 없이 단 한 번의 갑작스러운 연결 끊기만으로 클라이언트 서비스를 중단시킬 수 있습니다.
💡 쉬운 설명
상대방 서버가 정상적인 절차를 거치지 않고 갑자기 연결을 끊어버리면, 이를 사용하는 프로그램이 오류를 견디지 못하고 통째로 꺼져버리는 문제입니다. 해커가 악의적인 서버를 통해 사용자의 프로그램을 강제로 종료시킬 수 있습니다.
🇺🇸 원문 (English)
undici's experimental WebSocketStream client crashes the whole Node.js process when a remote peer closes the TCP connection without a WebSocket close handshake. On an unclean close the internal socket-close handler calls abort on the writable stream unconditionally and discards the returned promise, but per the WHATWG Streams standard aborting a locked writable returns a promise that rejects with a TypeError. Because the application holds a writer on that writable, which is the only way to write, the rejection is never observed and Node's default unhandled-rejection behavior terminates the process. An untrusted server can therefore crash a client with a single abrupt disconnect, with no authentication and no application mistake. This affects undici versions from 7.0.0 up to 7.29.1 and from 8.0.0 up to 8.10.2. Users should upgrade to undici 7.29.1 or 8.10.2.
📍 영향받는 시스템
undici versions 7.0.0 to 7.29.1, 8.0.0 to 8.10.2
⚔️ 공격 벡터
인증되지 않은 원격 서버가 WebSocket 연결을 비정상적으로(unclean close) 즉시 종료하여 클라이언트 프로세스를 충돌시킴
🛡️ 대응 방법
undici 버전을 7.29.1 또는 8.10.2 이상으로 업그레이드하십시오.
🔧 검증 코드
출력된 undici의 버전이 취약한 범위(7.0.0-7.29.1 또는 8.0.0-8.10.2)에 포함되는지 확인하십시오.
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
💻 영향받는 소프트웨어
IBM WebSphere Application Server