🇰🇷 한글 설명
systeminformation 라이브러리의 5.33.13 이전 버전에서 FreeBSD, OpenBSD, NetBSD 환경의 networkStats() 함수가 인터페이스 이름을 검증 없이 캐시 객체의 키로 사용합니다. 이로 인해 'proto' 같은 이름을 전달하면 Object.prototype이 오염되어 애플리케이션 동작에 영향을 줄 수 있습니다.
💡 쉬운 설명
이 취약점은 시스템 정보를 수집하는 Node.js 라이브러리의 버그로, 특정 네트워크 인터페이스 이름을 통해 JavaScript의 기본 객체 설정이 변경될 수 있습니다. 그 결과 프로그램의 조건 판단이나 설정 처리가 예상과 다르게 동작할 수 있습니다.
🇺🇸 원문 (English)
systeminformation is a System and OS information library for node.js. Prior to 5.33.13, networkStats(ifaces) in lib/network.js on FreeBSD, OpenBSD, and NetBSD stores per-interface data in the plain-object _network cache and indexes it with the sanitized caller-controlled interface name. Passing proto causes the inherited Object.prototype value to be used instead of creating an own cache entry, so calcNetworkSpeed() writes rx_bytes, tx_bytes, rx_sec, tx_sec, ms, last_ms, and operstate onto Object.prototype. The polluted property names are fixed and their values come from interface statistics, but inherited-name collisions and enumerable keys can corrupt application branching, serialization, configuration merging, validation, or lookup behavior. This issue is fixed in version 5.33.13.
📍 영향받는 시스템
systeminformation 5.33.13 미만 버전을 사용하는 FreeBSD, OpenBSD, NetBSD 기반 Node.js 애플리케이션
⚔️ 공격 벡터
공격자가 caller-controlled 인터페이스 이름(예: proto)을 networkStats()에 전달하여 Object.prototype 속성을 오염시킴
🛡️ 대응 방법
systeminformation 패키지를 5.33.13 이상 버전으로 업그레이드 (npm install systeminformation@latest)
🔧 검증 코드
출력된 버전이 5.33.13 미만이면 취약하므로 업그레이드가 필요하고, 5.33.13 이상이면 수정된 버전입니다.
npm ls systeminformation 2>/dev/null | grep systeminformation