llama.cpp의 ggml-RPC 서버에서 발견된 두 건의 취약점이 8월 23~24일 밤사이 서로 한 시간도 채 되지 않은 간격으로 국가 취약점 데이터베이스에 공개됐다. 두 취약점은 같은 구성 요소에 있으며, 배포 중인 트리에는 어느 쪽에도 수정본이 없다.
더 심각한 취약점
CVE-2026-78147은 8월 23일 23:16 UTC에 공개됐으며, deserialize_tensor 함수에 있다. 서버는 유효성 검증 없이 와이어에서 op과 op_params를 읽어들인다. 사용자 정의 연산의 경우 해당 구조체에 함수 포인터가 들어 있으며, 이후 이 포인터가 호출된다. 데이터베이스는 이것이 이전 CVE와는 별개라고 명시하는데, 이전 CVE는 버퍼 검사만 추가했을 뿐 연산 필드를 검증하지는 않았다. RPC 서버에는 인증이 필요하지 않다.
두 번째 취약점과 41일 만의 수정
CVE-2026-78148은 8월 24일 00:16 UTC에 공개됐으며, 원격으로 유발 가능한 rpc_server::graph_compute의 null 포인터 역참조다. 둘 중 더 경미한 취약점이며, 수정본은 존재한다. 다만 7월 14일에 열린 풀 리퀘스트가 CVE 공개 41일 뒤에도 여전히 병합되지 않은 상태였다.
통상적인 분류가 놓치는 점
둘 모두에 붙은 등급 때문에 이 취약점들은 "중간 심각도"로 보도될 것이다. 이 등급은 더 최근의 CVSS 4.0 척도를 따른 것으로, 두 취약점 모두를 6.9로 매긴다. 원격 제어가 가능한 간접 호출과 null 포인터 충돌에 동일한 점수를 부여하는 것은 그 자체로 의심을 불러일으켜야 한다. 반면 더 오래된 CVSS 3.1 척도에서는 같은 평가자가 두 취약점을 제대로 구분해, 함수 포인터 문제에는 7.3, high 등급을, 충돌에는 5.3을 부여한다. 점수들이 서로 충돌하는 것은 아니다. 서로 다른 척도일 뿐이며, 현재 표면에 드러나는 척도는 우연히도 그 차이를 평탄화하는 쪽이다.
점수와는 별개의 부분
더 심각한 CVE의 배경이 된 문제는 7월 3일 보고됐고, 8월 18일 not_planned 사유로 종료됐다. 이는 비활성 상태에 따른 자동 종료로, 취약점이 공개되기 닷새 전이었다. 이 둘은 모두 알려지지 않은 결함이 아니었다. 둘 다 트래커에 있었고, 트래커는 그대로 넘어갔다.
