🇰🇷 한글 설명
pnpm은 패키지 관리자입니다. 버전 10.28.1 이전의 pnpm에는 경로 조작 취약점이 있어 악성 패키지가 의도된 추출 디렉토리 외부의 파일을 작성할 수 있습니다.
💡 쉬운 설명
pnpm 패키지 관리자의 취약점으로 인해 악성 패키지가 시스템의 중요한 파일을 덮어쓸 수 있습니다. 이는 원격 코드 실행(RCE)로 이어질 수 있습니다. pnpm 버전 10.28.1 이전의 모든 사용자에게 영향을 미칩니다.
🇺🇸 원문 (English)
pnpm is a package manager. Prior to version 10.28.1, a path traversal vulnerability in pnpm's binary fetcher allows malicious packages to write files outside the intended extraction directory. The vulnerability has two attack vectors: (1) Malicious ZIP entries containing `../` or absolute paths that escape the extraction root via AdmZip's `extractAllTo`, and (2) The `BinaryResolution.prefix` field is concatenated into the extraction path without validation, allowing a crafted prefix like `../../evil` to redirect extracted files outside `targetDir`. The issue impacts all pnpm users who install packages with binary assets, users who configure custom Node.js binary locations and CI/CD pipelines that auto-install binary dependencies. It can lead to overwriting config files, scripts, or other sensitive files leading to RCE. Version 10.28.1 contains a patch.
📍 영향받는 시스템
pnpm 버전 10.28.1 이전의 모든 시스템
⚔️ 공격 벡터
악성 ZIP 엔트리 또는 BinaryResolution.prefix 필드의 조작
🛡️ 대응 방법
pnpm 버전을 10.28.1 이상으로 업데이트합니다.
🔧 검증 코드
로컬 시스템에서 Python이 설치되어 있는지 확인합니다. 코드를 실행하기 전에 관리자 권한이 필요하지 않습니다. Python이 설치되어 있지 않으면 설치 후에 다시 시도합니다.
python -c "import pkg_resources; print('pnpm' in [d.project_name for d in pkg_resources.working_set] and pkg_resources.get_distribution('pnpm').version < '10.28.1')" && echo {"result": "취약", "reason": "pnpm 버전이 10.28.1 미만"} || echo {"result": "양호", "reason": "pnpm 버전이 10.28.1 이상"}