vLLM stop_token_ids 입력 검증 결함이란 무엇인가?

vLLM에서 정지 토큰 ID 검증이 제대로 이루어지지 않으면, 모델 어휘 범위를 벗어난 인덱스 접근이 엔진 충돌과 서비스 거부(DoS)를 일으키거나 GPU 상태를 손상하는 심각한 보안 문제로 이어질 수 있습니다.

vLLM stoptokenids 입력 검증 취약점 개요

vLLM의 추론 과정에서 사용되는 stop_token_ids는 모델이 텍스트 생성을 중단해야 할 지점을 정의하는 중요한 파라미터입니다. 최근 공개된 취약점(CVE-2026-116181)에서는 요청과 함께 전달되는 이 값의 검증 범위가 매우 좁게 구현돼 있어서, 모델 어휘(vocabulary) 범위를 벗어난 정지 토큰 ID가 내부 로짓 인덱싱 단계까지 그대로 도달하는 결함이 확인됐습니다.

GitHub 보안 자문(GHSA-w9r6-29q4-pvpr)에 따르면 기존 시스템은 stop_token_ids 값이 정수인지만 확인했을 뿐, 해당 값이 실제 모델의 어휘 크기 안에 들어 있는지는 검사하지 않았습니다. 공격자가 모델 어휘 범위를 초과하는 ID를 의도적으로 입력해 시스템 불안정성을 유발하거나 메모리 영역에 영향을 줄 수 있는 경로가 이렇게 열렸습니다.

vLLM V1 엔진과 V2 러너의 영향 차이

이 입력 검증 결함은 vLLM이 사용하는 실행 경로(엔진 및 러너)에 따라 서로 다른 치명적 결과로 나타납니다. 인프라 엔지니어와 ML Ops 담당자는 현재 운영 중인 엔진 버전에 따라 달라지는 위험 시나리오를 구분해서 인지해 둘 필요가 있습니다.

1. 기본 V1 엔진 경로: 서비스 거부(DoS)

기본 V1 엔진 경로에서는 모델 어휘 범위를 벗어난 인덱스에 접근을 시도하는 순간 엔진이 즉시 충돌하며 서비스 전체가 중단됩니다. 원격 공격자가 단 하나의 무효한 토큰 ID를 포함한 요청만 보내도 추론 엔진이 종료됩니다. 곧 서비스 거부(DoS) 공격이 가능하다는 뜻입니다.

2. V2 러너 경로: GPU 상태 손상 및 데이터 오염

V2 러너 경로에서 나타나는 영향은 더 정밀하고 위험합니다. 검증되지 않은 인덱스가 로짓 버퍼 범위를 벗어나 접근하면 로짓 버퍼의 인접 값을 덮어쓰거나 다른 GPU 상태를 손상시킬 수 있습니다. 단순한 서비스 중단을 넘어 GPU 메모리 상의 데이터 오염으로 추론 결과가 왜곡되거나 예측 불가능한 시스템 동작이 나타나는 심각한 결함입니다.

취약점 악용 경로 및 공격 벡터

이 취약점은 외부 API 요청으로 접근 가능한 다양한 엔드포인트에서 악용될 수 있습니다. 원격 공격자는 특별한 권한 없이도 아래의 OpenAI 호환 요청 유형에 무효한 ID를 담아 보내기만 하면 공격이 성립합니다.

  1. Chat 요청: 챗봇 인터페이스를 통한 대화형 요청
  2. Completion 요청: 텍스트 완성 요청
  3. Generate 요청: 일반 텍스트 생성 요청
  4. Batch 요청: 대량의 요청을 한 번에 처리하는 배치 처리 경로

현재까지 이 결함의 공개적인 PoC(Proof of Concept)나 실제 야생에서의 공격 사례, CISA KEV(Known Exploited Vulnerabilities) 등재 여부는 확인되지 않았습니다. 다만 입력 값 하나로 엔진 종료나 GPU 메모리 손상이 가능하다는 점에서 잠재적 위험은 큽니다.

버전별 영향 범위 및 대응 방안

이번 결함은 vLLM의 특정 버전 범위에서 발생하며 최신 업데이트로 해결됐습니다. 운영 중인 환경이라면 버전 확인이 가장 시급합니다.

영향 버전 및 조치 사항

취약점에 영향을 받는 버전은 vLLM 0.20.1 이상 0.29.0 미만입니다. 해당 범위의 버전을 사용하는 조직은 vLLM 0.29.0 버전 이상으로 즉시 업데이트하면 입력 검증 결함이 해결됩니다.

구분 내용 비고
영향 버전 vLLM 0.20.1 ~ 0.29.0 미만 CVE-2026-116181
주요 위험 엔진 충돌(DoS), GPU 상태 손상 V1/V2 경로별 상이
해결 버전 vLLM 0.29.0 이상 업데이트 권고

기술적 수정 내용

이번 보안 패치는 PR #54196에서 이뤄졌습니다. 수정의 핵심은 모든 stop_token_ids 값이 샘플러(Sampler) 단계에 도달하기 전에 해당 값이 모델의 실제 어휘(vocabulary) 범위 내에 있는지 대조 검증하는 로직을 추가한 것입니다. 이렇게 유효하지 않은 ID가 포함된 요청은 내부 처리 단계로 넘어가기 전에 요청 오류로 거부되고, 엔진 충돌이나 GPU 메모리 오염은 원천적으로 차단됩니다.

인프라 및 보안 관리자는 vLLM 기반의 LLM 서비스를 운영 중인 모든 환경에서 버전 체크가 필요합니다. 특히 외부 API 노출 지점이 있는 환경이라면 업데이트가 최우선입니다.

댓글 남기기