🇰🇷 한글 설명
Moleculer(Node.js 마이크로서비스 프레임워크)의 TCP 트랜스포터에서 패킷 길이를 부호 있는 정수로 읽는 과정의 결함으로, 원격의 인증되지 않은 공격자가 음수 길이 값을 보내 무한 루프를 유발할 수 있습니다. 이로 인해 Node.js 이벤트 루프가 차단되어 프로세스 내 모든 서비스가 재시작 전까지 응답하지 않게 됩니다. 0.14.36 및 0.15.2 버전에서 수정되었습니다.
💡 쉬운 설명
악의적인 사용자가 잘못된 형식의 데이터를 보내면 서버 프로그램이 무한 반복에 빠져 멈춰버립니다. 서버를 재시작하기 전까지 같은 프로세스의 모든 서비스가 동작하지 않습니다.
🇺🇸 원문 (English)
Moleculer is a progressive microservices framework for Node.js. Prior to 0.14.36 and 0.15.2, Parser._write in src/transporters/tcp/parser.js used Buffer.prototype.readInt32BE to read a signed packet length, so a remote unauthenticated peer could supply a negative value that caused packet.slice(length) to return the unchanged buffer while the while (packet.length > 0) loop continued indefinitely. The synchronous loop blocked the Node.js event loop and made every service in the process unresponsive until restart. The TCP transporter must be enabled and reachable, and neither CRC validation nor maxPacketSize prevents the malformed length value. This issue is fixed in versions 0.14.36 and 0.15.2.
📍 영향받는 시스템
Moleculer 0.14.36 미만 및 0.15.2 미만 버전 중 TCP 트랜스포터를 사용하는 Node.js 환경
⚔️ 공격 벡터
TCP 트랜스포터 포트에 접근 가능한 원격 공격자가 인증 없이 음수 길이 값을 포함한 조작된 패킷을 전송
🛡️ 대응 방법
moleculer 패키지를 0.14.36 이상 또는 0.15.2 이상으로 업데이트
🔧 검증 코드
출력된 버전이 0.14.36 이상(0.14.x 계열) 또는 0.15.2 이상이면 패치된 것이고, 그보다 낮으면 취약합니다.
npm list moleculer 2>/dev/null | grep moleculer