🇰🇷 한글 설명
plist.js(npm 패키지 'plist') 5.0.1 이전 버전의 바이너리 plist 파서(parseBinary)에는 배열과 딕셔너리의 공유 객체 참조를 메모이제이션 없이 재귀적으로 해석하는 취약점이 있습니다. 이로 인해 인증되지 않은 공격자가 200바이트 미만의 조작된 plist 파일로 Node.js 프로세스를 충돌시킬 수 있습니다.
💡 쉬운 설명
악성 plist 파일 하나로 서버 프로그램을 멈추게 만들 수 있는 문제입니다. 파일이 아주 작아도 프로그램이 메모리를 과도하게 사용해 결국 비정상 종료됩니다.
🇺🇸 원문 (English)
plist.js (npm package 'plist') before 5.0.1 contains an uncontrolled resource consumption vulnerability in the binary property-list parser (parseBinary) that allows unauthenticated attackers to crash a Node.js process by exploiting unmemoized recursive resolution of shared object references for arrays and dictionaries. Attackers can craft a small binary plist (under 200 bytes) containing chained self-referencing object indices to trigger exponential (2^N) resolution calls and memory growth, causing an unrecoverable out-of-memory crash and denial of service.
📍 영향받는 시스템
npm 패키지 plist.js 5.0.1 미만 버전을 사용하는 Node.js 애플리케이션
⚔️ 공격 벡터
자기 참조 객체 인덱스를 연결한 소형 바이너리 plist 파일을 파서에 입력하여 지수적 메모리 사용과 OOM 충돌을 유발
🛡️ 대응 방법
plist 패키지를 5.0.1 이상으로 업데이트 (npm update plist 또는 package.json 수정 후 npm install)
🔧 검증 코드
출력된 버전이 5.0.1 미만이면 취약하므로 업데이트가 필요하고, 5.0.1 이상이면 안전합니다. 아무 출력이 없으면 해당 패키지가 설치되지 않은 것입니다.
npm ls plist 2>/dev/null | grep -E 'plist@'