🇰🇷 한글 설명
node-opcua의 특정 버전에서 nonce 값을 저장하는 g_alreadyUsedNonce 캐시에 만료 시간이나 크기 제한이 없는 취약점이 발견되었습니다. 인증되지 않은 원격 공격자가 고유한 nonce를 사용하여 세션을 반복적으로 생성하면 메모리 사용량이 무한히 증가하여 서버 프로세스가 충돌할 수 있습니다.
💡 쉬운 설명
서버가 사용된 번호들을 저장할 때 용량 제한을 두지 않아 발생하는 문제입니다. 공격자가 가짜 번호를 계속 보내면 서버의 메모리가 가득 차서 서버가 멈춰버릴 수 있습니다.
🇺🇸 원문 (English)
node-opcua is an OPC UA implementation for TypeScript and Node.js. Prior to 2.166.0, the process-global g_alreadyUsedNonce cache used by nonceAlreadyBeenUsed in packages/node-opcua-secure-channel/source/server/server_secure_channel_layer.ts records nonces from OpenSecureChannelRequest and CreateSession without expiration or a size limit. An unauthenticated remote attacker can repeatedly create sessions with unique nonces, causing entries to persist after session expiry and accumulate across connection cycles even when maxSessions=10 limits concurrent sessions. The resulting unbounded heap growth can exhaust the default Node.js heap and crash the node-opcua server process. This issue is fixed in version 2.166.0.
📍 영향받는 시스템
node-opcua version < 2.166.0
⚔️ 공격 벡터
인증되지 않은 원격 공격자가 고유한 nonce를 포함한 OpenSecureChannelRequest를 반복적으로 전송
🛡️ 대응 방법
node-opcua를 2.166.0 이상의 버전으로 업데이트
🔧 검증 코드
출력된 node-opcua의 버전이 2.166.0 미만인지 확인
npm list node-opcua | grep node-opcua