경로 탐색(Path Traversal), 인자 주입(Argument Injection) 등 패키지 매니저에서 빈번하게 발생하는 12가지 유형의 보안 취약점(CWE) 분석
Zip Slip과 같은 아카이브(Archive) 기반의 취약점은 20년 이상 지속적으로 발생하며, 다양한 방식으로 재발
인증 정보(Credentials) 노출, 잘못된 소스 선택(Picking the wrong source) 등 레지스트리(Registry) 측면의 취약점은 공급망 공격(Supply-chain compromise)의 주요 원인
잠금 파일(Lockfile) 무시 및 메타데이터 불일치(Metadata Mismatch)와 같은 문제는 패키지 무결성(Package Integrity)을 저해
경로 탐색(Path Traversal) 취약점은 패키지 매니저에서 가장 흔하게 발견되는 문제 중 하나로, 20년 이상 지속적으로 발생하고 있다. 특히, 압축 해제(Extraction) 과정에서 `../` 또는 심볼릭 링크(Symlink)를 악용하여 임의의 파일에 접근하거나 시스템 파일을 덮어쓰는 공격이 가능하다. 이러한 취약점은 다양한 아카이브 형식(Tar, Zip 등)과 운영체제(Windows, Linux)에서 나타나며, 부분적인 수정으로는 근본적인 해결이 어렵다. 따라서, 안전한 경로 검증(Path Validation) 및 심볼릭 링크 처리(Symlink Handling)가 필수적이다.
패키지 매니저는 VCS(Version Control System) URL로부터 패키지를 설치하는 기능을 제공하며, 이 과정에서 인자 주입(Argument Injection) 취약점이 발생할 수 있다. 공격자는 악의적인 인자를 VCS 명령어에 삽입하여 임의의 코드를 실행하거나 시스템 설정을 변경할 수 있다. 특히, Git, Hg, SVN과 같은 다양한 VCS 백엔드(Backend)를 지원하는 경우, 각 백엔드별로 취약점이 발생할 가능성이 높다. 따라서, 명확한 인자 구분자(--) 사용 및 허용된 옵션(Allowlist)만 전달하는 것이 중요하다.
무결성 검증 실패는 패키지 매니저의 보안을 심각하게 위협하는 요소 중 하나이다. 암호화 서명(Cryptographic Signature) 검증 실패는 악성 코드가 포함된 패키지의 설치를 허용할 수 있으며, 캐시(Cache)된 패키지 검증 누락은 이미 설치된 패키지의 변조를 감지하지 못하게 한다. 또한, TLS 미사용 또는 인증서 검증 부재는 중간자 공격(Man-in-the-middle attack)에 취약하게 만든다. 따라서, 모든 패키지 설치 과정에서 철저한 무결성 검증(Thorough Integrity Verification)을 수행해야 한다.
레지스트리(Registry)는 패키지 매니저 생태계의 핵심이며, 다양한 취약점을 통해 공급망 공격(Supply-chain compromise)의 표적이 될 수 있다. 인증 정보(Credentials) 노출은 권한 탈취로 이어질 수 있으며, 잘못된 소스 선택(Picking the wrong source)은 악성 패키지 설치를 유발한다. 또한, 저장된 XSS(Stored XSS)는 레지스트리 사용자에게 악성 코드를 실행할 수 있는 기회를 제공한다. 따라서, 레지스트리 운영자는 강력한 접근 제어(Access Control), 입력값 검증(Input Validation), 보안 강화된 환경(Secure Environment)을 구축해야 한다.
잠금 파일(Lockfile)은 패키지 의존성(Dependency)을 고정하여 재현 가능한 빌드(Reproducible Build)를 보장하지만, 잠금 파일 무시(Lockfile Ignored) 또는 메타데이터 불일치(Metadata Mismatch)는 이러한 보장을 무력화한다. 잠금 파일 무시는 잠금 파일에 명시된 버전과 다른 패키지를 설치하게 하며, 메타데이터 불일치는 패키지 설치 과정에서 예상치 못한 동작을 유발한다. 이러한 문제는 패키지 무결성(Package Integrity)을 저해하고, 잠재적인 보안 위협을 발생시킨다. 따라서, 잠금 파일의 정확한 사용(Accurate Usage)과 일관성 유지(Consistency Maintenance)가 중요하다.