엔진이나 파이프라인이 모델 패키지를 읽어들이는 순간, 그 안에 적힌 파일명 하나도 결국 프로세스가 여는 파일 경로가 됩니다. CVE-2026-120334는 바로 그 지점 — 토크나이저를 로드하는 코드 경로 — 에서 검증이 빠져 있어 의도한 디렉터리 밖의 파일을 가리킬 수 있다는 점을 보여주는 사례입니다.
개요

CVE-2026-120334는 deepset-ai의 FARM 라이브러리 토크나이저 적재 구성 요소에서 발견된 경로 순회(path traversal, CWE-22) 취약점입니다. 공격자가 통제할 수 있는 vocab_filename 값이 Tokenizer.load()에서 EmbeddingTokenizer.from_pretrained()로 전달될 때, 파일 경로에 대한 검증 없이 로컬 파일 시스템 경로로 해석되면서 성립합니다.
CVE 레코드는 VulDB 배정의 cvelistV5 기록에서 확인할 수 있으며 상태는 PUBLISHED입니다. 레코드는 영향 버전을 0.1~0.8.0으로 열거하고, CNA 배점으로 CVSS v4.0 5.3과 CVSS v3.1 4.3 MEDIUM을 기재합니다. 상세 기법은 제보 연구자의 독립 연구 문서에 정리되어 있습니다. 즉 CVE와 공개 기술 상세, 심각도 값까지 나와 있지만, 실제 야생 악용 증거는 확인되지 않은 상태입니다. CISA KEV 등재 여부도 이번 근거로는 확인하지 못했습니다.
핵심은 제목의 CVE 번호보다 구조적 질문입니다. 우리 서비스나 파이프라인이 외부에서 온 모델 패키지·파일명을 검증 없이 토크나이저 로더에 넘기고 있지 않은가?
영향 범위
영향 범위를 라이브러리 층과 사용 방식 층으로 나누어 보는 것이 실제 점검에 도움이 됩니다.
- 라이브러리 층: CVE 레코드가 영향 버전을 0.1~0.8.0으로 열거하고 있으며, 제보 연구는 deepset-ai FARM 커밋
5919538기준 취약을 확인했습니다. - 사용 방식 층:
Tokenizer.load()및EmbeddingTokenizer.from_pretrained()경로에 신뢰할 수 없는vocab_filename이 전달되는 구성이 실질적인 노출 조건입니다.
영향 버전은 레코드가 열거한 0.1~0.8.0이 1차 기준선이 됩니다. 다만 수정 버전·수정 커밋은 이번에 전달된 근거에 명시되어 있지 않아, 특정 릴리스가 안전하다고는 단정할 수 없습니다. 더 중요한 현실적 구분은 코드 흐름입니다. 사용자 입력이나 외부 모델 패키지처럼 신뢰할 수 없는 출처의 파일명·경로를 로더에 전달하는 구조라면 점검이 필요합니다. 반면 저장소 내부의 자체 관리 파일만 로드하는 환경이라면 실제 노출은 제한적입니다. 같은 버전대의 라이브러리를 쓰더라도 위협의 실체화가 갈리는 지점입니다.
노출의 크기는 다음 변수에 따라 달라집니다.
- 로드 프로세스가 가진 파일 시스템 권한 — 어디까지 읽을 수 있는가
vocab_filename전달 경로를 외부 공격자가 통제할 수 있는가
서비스형 파이프라인처럼 외부에서 받은 값이 파일명이 되는 경우, 단순히 파일이 하나 읽히는 문제를 넘어 자격증명처럼 민감한 파일의 내용 노출로 인한 2차 공격 가능성까지 열립니다. 반대로 파일명이 항상 코드 안에 고정되어 있다면 이 취약점은 코드 위생 이슈에 가까워집니다.
기술적 분석
기술적 원인은 토크나이저 적재 경로의 입력 검증 부재입니다. 제보 연구에 따르면 로컬 모델 패키지 디렉터리를 받은 Tokenizer.load()가 해당 디렉터리를 EmbeddingTokenizer.from_pretrained()로 전달하고, 이 과정에서 vocab_filename이 공격자 통제 값일 경우 상대 경로 순회(예: ../ 형태)로 의도한 디렉터리 밖의 파일을 가리킬 수 있습니다.
공격이 성립하려면 아래 조건이 겹쳐야 합니다.
- 애플리케이션이 사용자 입력이나 외부 모델 패키지 등 신뢰할 수 없는 출처의 파일명·경로를 토크나이저 로더에 전달할 것
- 공격자가 그 값을 실제로 통제할 수 있을 것
조건이 모두 충족될 때의 직접적 결과는, 프로세스 권한으로 접근 가능한 임의 파일의 존재 확인과 내용 노출입니다. 여기서 특이한 점은 파일 "열기" 동작이 정상 기능의 일부라는 것입니다. 토크나이저가 어휘 파일을 읽는 행위 자체는 설계된 동작이므로, 트래픽이나 API 응답만으로는 악용 여부를 구분하기 어렵습니다. 점검 초점을 입력 경로와 파일 시스템 접근 감사에 둬야 하는 이유가 여기 있습니다.
공개 PoC·익스플로잇 분석
이 취약점에서 "공개됨"이라고 말할 수 있는 것과 아닌 것을 분리해 볼 필요가 있습니다.
- 출처: VulDB가 CVE를 배정했고, 제보 연구로 표기된 독립 연구 문서가
Tokenizer.load()/EmbeddingTokenizer.from_pretrained()경로의 CWE-22 문제를 정리했습니다. CVE 레코드에는 CISA ADP의 SSVC 평가 값으로 Exploitation=poc, Automatable=yes가 기재되어 있습니다. 공개된 것은 코드 경로와 재현 조건을 서술한 기술 상세이며, 완결된 자동화 공격 도구까지 근거로 확인된 것은 아닙니다. - 전제조건: 연구가 전제하는 구조는 로컬 모델 패키지 디렉터리를 로더에 넘기고, 그 안의
vocab_filename값이 공격자 통제라는 점입니다. 즉 연구가 성립해도 실제 도달 범위는 그 파일명을 누가 정하느냐로 좁혀집니다. - 입증 범위: 연구 확인 기준 커밋
5919538에서 상대 경로 순회로 의도한 디렉터리 밖 파일을 가리킬 수 있다는 수준이고, CVE 레코드는 영향 버전을 0.1~0.8.0으로 열거합니다. 수정 버전·커밋과 실환경 악용 사례, CISA KEV 등재 여부는 이번 근거로 입증되지 않았습니다. SSVC의 Exploitation=poc는 공개 PoC 수준을 나타내는 값으로, 실환경 악용 확인과는 별개로 읽어야 합니다. - 운영 의미: 코드 상세와 PoC 수준 exploit 상태가 레코드에 기재된 이상, 공격자뿐 아니라 방어자도 동일 경로에서 무엇을 볼지 알 수 있습니다. Automatable=yes라는 값은 자동화 가능성을 시사하는 신호이지만, 실제 위협은 여전히 외부 통제 파일명이 로더에 도달하는지로 좁혀집니다. 따라서 "공격 도구가 있다"는 신호가 아니라 "입력 경로 점검을 미룰 근거가 없어졌다"는 신호로 읽는 편이 정확합니다. 야생 악용 증거가 없다는 사실도 악용 가능성이 없다는 뜻은 아닙니다.
확인된 값과 확인되지 않은 값을 갈라 적어 두면 이렇습니다. 확인된 것은 CVE 식별자와 PUBLISHED 상태, 영향 버전 0.1~0.8.0, CNA 배점인 CVSS v4.0 5.3과 CVSS v3.1 4.3 MEDIUM, 그리고 제보 연구가 확인한 커밋 5919538의 코드 경로입니다. 확인되지 않은 것은 수정 버전·커밋, 실환경 악용 사례, CISA KEV 등재 여부입니다. 이 취약점은 제보자 단독 연구 기반으로 공개되어 독립 검증 범위가 제한적일 수 있다는 점도 한계입니다. 배점은 중간(MEDIUM) 등급으로 기재되어 있으나, 실질 노출 범위는 로더의 파일 시스템 권한과 vocab_filename 통제 여부에 따라 달라지므로, 운영 우선순위는 점수 단독보다 노출 조건을 기준으로 판단하는 편이 안전합니다.
대응 방안
즉시 조치와 구조적 조치를 나누어 진행하는 편이 현실적입니다.
지금 확인할 것
- 사용 중인 FARM 버전이 레코드가 열거한 0.1~0.8.0 범위인지 확인하고, 해당하면 아래 점검을 우선 진행합니다.
- FARM 토크나이저 로더에 사용자 입력이나 외부 파일명이 직접 전달되는지 코드와 설정을 점검합니다. 모델 다운로드·등록 경로, 설정 파일의 어휘 파일 항목을 먼저 봅니다.
- 신뢰할 수 없는 출처의 모델 패키지·vocab 파일 로드를 일시 중단하거나 화이트리스트 경로로 제한합니다.
vocab_filename에 경로 구분자나 상위 디렉터리 참조 문자열이 포함되는지 검사하는 입력 검증을 추가합니다.- 모델 로드 프로세스의 파일 시스템 권한을 필요 최소한으로 축소합니다. 읽기 범위가 좁으면 같은 취약점의 결과가 달라집니다.
탐지·감사 관점
- 토크나이저 로더 호출 로그에서 비정상 경로 패턴, 즉 상위 디렉터리 참조나 예상 밖 디렉터리 접근을 모니터링합니다.
- 모델 로드 프로세스의 예상 범위 밖 파일 읽기 시도에 파일 감사·모니터링을 적용합니다. 앞서 본 대로 파일 열기가 정상 동작과 겹치므로, 정상 호출의 기준선(허용 디렉터리 목록)을 먼저 정의해 두는 것이 검증 가능성을 높입니다.
구조적 대응
- 경로를 절대 경로로 정규화한 뒤 허용 베이스 디렉터리 내부인지를 확인하는 검증 계층을 도입합니다. 문자열 치환보다 정규화 후 비교가 우회 가능성에서 안전합니다.
- 모델과 어휘 파일은 검증된 저장소에서만 배포받는 공급망 통제를 적용합니다.
- FARM의 최신 개정 상태에서 취약점이 수정되었는지 업스트림 수정 커밋·릴리스를 확인한 뒤 반영합니다. 다만 이번에 전달된 근거에 수정 버전·커밋이 명시되어 있지 않으므로, 릴리스 노트와 CVE 변경 이력을 주기적으로 재확인할 필요가 있습니다.
참고자료
- CVE-2026-120334 deepset-ai farm Tokenizer Loader tokenization.py EmbeddingTokenizer.from_pretrained path traversal
- Path Traversal in FARM Tokenizer Load via Attacker-Controlled vocab_filename
함께 읽으면 좋은 글
- CVE-2026-110936: Siemens Software Center DLL 사이드로딩, 악용 확인과 KEV 등재가 뜻하는 대응 우선순위
- CVE-2026-102764: BeyondTrust Remote Support 인증 우회, KEV 등재로 확인된 위험과 점검 순서
- CVE-2026-76519: Cisco Secure Email Gateway 임의 파일 쓰기 취약점, KEV 등재와 CVE 재매핑 점검
본 콘텐츠는 AI 기술로 작성된 분석 리포트를 포함하고 있습니다. 내용 중 사실과 다르거나 보완이 필요한 정보를 발견하셨으면 댓글을 통해 의견을 부탁드립니다. 여러분의 피드백은 더 정확한 보안 정보 공유에 큰 도움이 됩니다.
댓글 (0)
댓글을 작성하려면 로그인이 필요합니다.
로그인아직 댓글이 없습니다.
첫 번째 댓글을 작성해보세요!