경영진 요약
LLM(대규모 언어 모델) 인프라가 성숙해지면서 공격 표면이 기존의 관리 인터페이스('컨트롤 플레인')에서 추론 데이터의 실제 흐름('데이터 플레인')으로 이동하고 있습니다.
CVE-2025-62164 의 패러다임을 바꾸는 취약점을 나타냅니다. vLLM는 높은 처리량의 LLM 서비스를 위한 업계 표준 엔진입니다. 이 결함으로 인해 공격자는 이 엔진을 무기화할 수 있습니다. /v1/complements 악성 엔드포인트를 주입하여 프롬프트 임베딩. 공격자는 파이토치의 로딩 로직 내에서 안전하지 않은 역직렬화 메커니즘을 악용하여 유효한 API 키가 없어도(배포 구성에 따라 다름) 메모리 손상을 유발하여 서비스 거부(DoS) 및 잠재적인 원격 코드 실행(RCE)을 유발할 수 있습니다.
이 분석은 기술적 근본 원인을 분석하고, 개념 증명(PoC)을 제공하며, AI 플랫폼 엔지니어를 위한 즉각적인 해결 단계를 설명합니다.

공격 벡터: 임베딩이 위험한 이유
표준 LLM 상호 작용에서는 사용자가 텍스트를 보냅니다. 그러나 vLLM과 같은 고급 추론 엔진은 다음을 지원합니다. 임베딩 입력 (텐서 데이터)를 API를 통해 직접 사용할 수 있습니다. 이는 성능 최적화와 멀티모달 워크플로우를 위해 설계되었지만 위험한 문을 열 수 있습니다: 직접 객체 역직렬화.
취약점은 vLLM이 이러한 수신 텐서를 처리하는 방식에 있습니다. 즉, 엔진은 사용자가 제공한 직렬화된 데이터의 구조를 무해한 수학적 표현이라고 가정하여 암묵적으로 신뢰합니다.
취약한 코드 경로
중요한 결함은 다음과 같습니다. vllm/entrypoints/renderer.py 내부의 _LOAD_AND_VALIDATE_EMBED 함수입니다.
Python
# 취약한 로직의 단순화된 표현
import torch
import io
pybase64 가져오기
def _LOAD_AND_VALIDATE_EMBED(embed: 바이트):
# 위험: 신뢰할 수 없는 바이너리 스트림을 역직렬화하기
tensor = torch.load(
io.BytesIO(pybase64.b64decode(embed, validate=True)),
weights_only=True, # 보안에 대한 잘못된 인식
map_location=torch.device("cpu"),
)
반환 텐서
동안 가중치 전용=참 는 임의의 파이썬 코드(일반적인 피클 취약점)의 실행을 방지하기 위한 것입니다. 충분하지 않음 를 사용하여 특정 PyTorch 텐서 유형을 처리할 때 메모리 손상을 방지할 수 있습니다.
기술 심층 분석: 스파스 텐서 활용하기
CVE-2025-62164의 핵심은 파이토치의 안전 플래그와 다음과 같은 처리 사이의 단절을 활용합니다. 스파스 텐서.
- 파이토치 2.8+ 시프트: 최신 버전의 PyTorch는 기본적으로 스파스 텐서에 대한 값비싼 무결성 검사를 생략하여 성능을 개선합니다.
- 바이패스: 공격자는 잘못된 '스파스 COO'(좌표 형식) 텐서를 구성할 수 있습니다. 심지어
가중치 전용=참,torch.load는 이 구조를 역직렬화합니다. - 메모리 손상: 스파스 텐서의 인덱스는 로드 중에 선언된 크기에 대해 유효성이 검사되지 않기 때문에 후속 작업(텐서를 고밀도 포맷으로 변환하거나 GPU 메모리로 이동하는 등)을 수행하면 다음과 같은 결과가 발생합니다. 아웃오브바운드(OOB) 쓰기.
이 OOB 쓰기는 파이썬 인터프리터를 즉시 충돌시킵니다(DoS). 정교한 힙 스프레이 및 메모리 레이아웃 조작을 통해 이 프리미티브는 에스컬레이션되어 명령 포인터를 제어하여 RCE를 달성할 수 있습니다.

개념 증명(PoC) 분석
면책 조항: 이 PoC는 교육 및 방어 목적으로만 사용됩니다.
1. 페이로드 구성하기
공격자는 내부 일관성 제약 조건을 위반하는 직렬화된 PyTorch 텐서를 생성합니다.
Python
토치 가져오기
import io
import base64
def generate_exploit_payload():
buffer = io.BytesIO()
# 액세스 시 OOB 쓰기를 트리거하도록 설계된 스파스 텐서를 생성합니다.
# 특정 인덱스는 할당된 메모리 외부를 가리키도록 만들어집니다.
# malformed_tensor = torch.sparse_coo_tensor(indices=..., values=..., size=...)
# 데모를 위해 직렬화를 시뮬레이션합니다.
# 실제 공격에서 이 버퍼에는 바이너리 피클 스트림이 포함됩니다.
torch.save(malformed_tensor, buffer)
# JSON 전송을 위한 인코딩
반환 base64.b64encode(buffer.getvalue()).decode('utf-8')
2. 익스플로잇 요청
공격자는 이 페이로드를 표준 완료 엔드포인트로 전송합니다.
POST http://target-vllm-instance:8000/v1/completions
JSON
{
"model": "meta-llama/Llama-2-7b-hf",
"prompt": {
"임베딩": ""
},
"max_tokens": 10
}
3. 결과
- 모범 사례: vLLM 워커 프로세스에 세분화 오류가 발생하여 크래시가 발생합니다. 오케스트레이터(예: 쿠버네티스)가 다시 시작하면 공격자는 간단히 요청을 다시 전송하여 지속적 서비스 거부를 일으킬 수 있습니다.
- 최악의 경우: 메모리 손상으로 함수 포인터를 덮어쓰면 공격자가 컨테이너 컨텍스트 내에서 셸 코드를 실행할 수 있습니다.
영향 평가
- 가용성(높음): 이는 실행하기 쉬운 DoS입니다. 단일 요청으로 추론 노드를 다운시킬 수 있습니다. 클러스터 환경에서는 공격자가 노드를 반복적으로 공격하여 전체 클러스터를 다운시킬 수 있습니다.
- 기밀성 및 무결성(중요): RCE가 달성되면 공격자는 환경 변수(종종 허깅 페이스 토큰, S3 키 또는 WandB 키를 포함하는)와 메모리에 로드된 독점 모델 가중치에 액세스할 수 있게 됩니다.
해결 및 완화
1. 즉시 업그레이드
취약점이 패치되었습니다. vLLM v0.11.1.
- 액션: Docker 이미지 또는 PyPI 패키지를 즉시 최신 버전으로 업데이트하세요.
- 로직 수정: 이 패치는 안전하지 않은 텐서 형식이 메모리 할당자와 상호 작용하기 전에 이를 거부하는 엄격한 유효성 검사 로직을 구현합니다.
2. 입력 살균(WAF/게이트웨이 수준)
즉시 업그레이드할 수 없는 경우 게이트웨이에서 공격 벡터를 차단해야 합니다.
- 액션: 들어오는 JSON 본문을 검사하도록 API 게이트웨이(Nginx, Kong, Traefik)를 구성하세요.
- 규칙: 다음 요청을 차단합니다.
/v1/complements여기서프롬프트필드에는임베딩키입니다.
3. 네트워크 세분화
추론 서버가 공용 인터넷에 직접 노출되지 않도록 하세요. 액세스는 입력을 살균하고 인증을 처리하는 백엔드 서비스를 통해 중개되어야 합니다.
결론
CVE-2025-62164는 AI 보안에 대한 경각심을 일깨우는 역할을 합니다. 더 이상 '모델'과 '임베딩'을 비활성 데이터로 취급할 수 없습니다. AI 시대에는 데이터는 코드입니다를 역직렬화하려면 바이너리 실행 파일을 실행하는 것과 동일한 수준의 면밀한 조사가 필요합니다.
AI 인프라에서 펜 테스트를 실행하는 팀(예 Penligent.ai), 추론 엔진에서 노출된 직렬화 엔드포인트를 확인하는 것은 이제 참여 범위의 표준 부분이어야 합니다.
작성자 참고: AI 인프라를 안전하게 유지하세요. 항상 입력의 유효성을 검사하고, 직렬화된 데이터를 신뢰하지 말고, vLLM 버전을 안정적인 최신 릴리스에 고정하세요.

