🇰🇷 한글 설명
node-opcua 2.0.0부터 2.170.0 버전 사이에서 서버의 시간 차이로 인해 BadInvalidTimestamp 응답이 발생할 경우, 클라이언트가 무한 재연결 루프에 빠지는 취약점이 존재합니다. 이 과정에서 파일 디스크립터와 메모리가 지속적으로 누적되어 결국 클라이언트 프로세스나 컨테이너가 자원 고갈로 인해 중단될 수 있습니다.
💡 쉬운 설명
서버와 클라이언트의 시간이 맞지 않으면 프로그램이 계속해서 연결을 시도하다가 컴퓨터의 메모리를 모두 써버려 멈출 수 있습니다. 이로 인해 서비스가 갑자기 중단될 위험이 있습니다.
🇺🇸 원문 (English)
node-opcua is an OPC UA implementation for TypeScript and Node.js. From 2.0.0 until 2.170.0, node-opcua clients using the default keepSessionAlive setting can enter a repeated reconnection cycle when an OPC UA server's clock skew causes BadInvalidTimestamp responses. ClientSessionKeepAliveManager._ping_server treated the server-originated ServiceFault as a network outage and forced a transport reconnect, while ClientTCP_transport._on_ACK_response used socket.end() after failed HEL/ACK negotiation and could leave the connection in FIN-WAIT-2 when the peer did not close. Repetition at the keepAliveInterval accumulates file descriptors and memory until the client process or container can be terminated by resource exhaustion. This issue is fixed in version 2.170.0.
📍 영향받는 시스템
node-opcua versions 2.0.0 to 2.170.0
⚔️ 공격 벡터
서버의 시간 불일치(Clock Skew)를 유발하여 클라이언트의 무한 재연결 및 자원 고갈 유도
🛡️ 대응 방법
node-opcua 버전을 2.170.0 이상으로 업데이트하십시오.
🔧 검증 코드
출력된 node-opcua의 버전이 2.170.0 미만인지 확인하십시오.