GitHub는 9월 4일 21:37:00 UTCGHSA-48jh-3gj7-fg8v를 공개했다. 이는 vLLM을 대상으로 한 CVE-2026-73556, CVSS 5.3 취약점으로, 가장 널리 배포된 오픈소스 추론 서버에 대한 새로운 서비스 거부 버그로 읽힌다. 그러나 이는 7월에 프로젝트가 이미 수정했던 바로 그 버그이며, 수정이 닿지 않은 코드 경로에 남아 있었다.

형제 경로

권고는 명확하다. "GHSA-rwxx-mrjm-wc2m에 대한 수정은 … xgrammaroutlines 백엔드에서 정규식 컴파일을 compile_regex_with_timeout으로 감싸고, outlines의 경우 validate_regex_is_buildable도 적용했다. 그러나 lm-format-enforcer 백엔드는 보호되지 않은 채 남았다. 이 백엔드는 공격자가 제공한 정규식을 시간 제한이나 빌드 가능성 검사 없이 컴파일한다." 세 백엔드 모두 같은 interegular DFA 생성을 거치며, 그중 둘은 제한이 있고 하나는 그렇지 않다.

측정값

권고는 자체 측정값도 공개했다. 기본 '[0-9]{3}'는 0.0002초에 컴파일되지만, 공격자가 넣은 '(a{1,300}){300}'20초 안에 완료되지 않았다. "interegular FSM 생성에서 한 코어가 100%에 고정됐다"는 설명도 덧붙였다. 문법 컴파일이 엔진의 구조화 출력 경로 안에서 실행되기 때문에 요청은 끝내 반환되지 않고, 동시 요청은 그 뒤에서 지연된다. 즉, 워커 수준의 서비스 거부다. 권고는 outlines 백엔드에 동일 요청을 보내면 깔끔한 오류가 반환된다고 밝혔다.

받아들인 설명의 문제점

두 가지가 있다. 이는 새로운 공격 유형이 아니라 패치 완성도 실패다. 흥미로운 사실은 보안 수정이 세 개의 형제 호출 지점 중 둘에만 적용됐는데도, 6주 동안 아무도 알아차리지 못했다는 점이다. 또 "영향을 받는 버전 < 0.26.0"이라는 표현은 현재 노출처럼 읽히지만, 0.26.0은 7월 27일에 배포됐고 현재 릴리스는 0.28.0이다. 따라서 공개는 수정보다 39일 늦었다. 자신의 vLLM 버전을 추적하고 있던 사람은 7월 이후 노출되지 않았고, 그보다 낮은 버전에 고정해 둔 사람만이 이를 모른 채 영향을 받았다.

그리 큰 전제는 아닌 전제

권고는 "vLLM은 기본적으로 인증 없이 제공된다"고 적었다. 공격은 구조화 출력 정규식을 포함한 /v1/completions로의 단일 POST 요청이면 충분하다. 자격 증명도 필요 없고, 엔드포인트를 넘어서는 모델 접근도 없으며, lm-format-enforcer 백엔드를 선택하는 것 외에 특별한 설정도 필요 없다. 구조화 출력은 JSON 응답을 신뢰할 수 있게 만드는 방법이기 때문에, 실제 생산 배포에서 가장 많이 켜는 기능이다.