
개념 증명(PoC)으로, tar npm 패키지의 하드링크 경로 탐색(hardlink path traversal) 취약점을 시연하며, 조작된 아카이브를 통해 추출 디렉터리 외부의 파일을 덮어쓸 수 있게 합니다.
이 저장소는 tar npm 패키지의 취약점인 CVE-2026-29786에 대한 개념 증명(PoC) 을 포함하고 있으며, 이 취약점으로 인해 조작된 아카이브가 의도된 추출 디렉터리 외부를 가리키는 하드링크를 생성할 수 있습니다.
이 문제는 tar 아카이브에 C:../target.txt와 같은 드라이브 상대 링크 대상이 포함된 경우 발생합니다. 라이브러리가 추출 중 검증과 경로 정규화를 수행하는 순서 때문에 탐색 보호를 우회할 수 있습니다.
정규화 후 경로는 ../target.txt가 되어 링크 대상이 구성된 추출 디렉터리를 벗어날 수 있습니다.
추출된 파일에 쓰기가 수행되면 두 경로가 동일한 하드링크를 참조하므로 외부 파일이 수정됩니다.
이 취약점은 절대 경로 처리(Unpack[STRIPABSOLUTEPATH])를 담당하는 추출 로직에서 발생합니다.
탐색 감지는 절대 경로 제거 이전에 수행됩니다.
악성 헤더 값 예시
linkpath: C:../target.txt
처리 동작:
경로는 탐색 감지를 위해 세그먼트로 분할됩니다.
탐색 검사는 세그먼트를 찾습니다.
".."세그먼트가 "C:.."로 나타나므로 검사가 트리거되지 않습니다.
이후 stripAbsolutePath() 함수가 드라이브 접두사(C:)를 제거합니다.
결과 경로는 다음과 같아집니다:
../target.txt
이로 인해 경로가 의도된 추출 루트를 벗어날 수 있습니다.
공격자는 추출을 수행하는 프로세스의 권한으로 추출 디렉터리 외부의 파일을 덮어쓸 수 있습니다.
잠재적인 실제 시나리오는 다음과 같습니다:
• 신뢰할 수 없는 tar 아카이브를 추출하는 CLI 도구 • 타사 아티팩트를 처리하는 빌드 파이프라인 • 사용자 제공 tar 파일을 가져오는 서비스 • 아카이브를 압축 해제하는 패키지 관리자 또는 플러그인 시스템
npm install [email protected]
node poc.cjs
이 스크립트는 악성 tar 아카이브를 생성하고, 추출된 파일에 쓰기를 수행하면 추출 디렉터리 외부의 파일이 덮어써지는 것을 입증합니다.