llama.cpp 프로젝트는 RPC 서버의 치명적인 보안 취약점을 해결한 버전 b11000을 출시했습니다. 이 수정은 캐시된 계산 그래프를 조작하여 인증되지 않은 원격 클라이언트가 원격 코드 실행을 달성할 수 있게 했던 use-after-free 버그를 해결합니다.

  • 이전 구현에서는 GRAPH_RECOMPUTE 작업 중 텐서 데이터를 다시 보내지 않기 위해 장치별로 계산 그래프를 캐시했습니다.
  • 이러한 캐시된 노드는 백엔드 버퍼에 대한 직접 포인터를 보유하고 있었습니다. FREE_BUFFER를 통해 버퍼가 해제되면 후속 재실행 시 더 이상 유효하지 않은 포인터(dangling pointers)에 접근하게 됩니다.
  • 공격자는 ALLOC_BUFFER 및 SET_TENSOR 명령을 통해 메모리 청크의 모양을 변경하여 libc 주소를 유출하고 버퍼 인터페이스 vtable을 탈취할 수 있습니다.
  • 패치는 free_buffer()에서 모든 캐시된 그래프를 폐기하여, 클라이언트가 다음 호출 시 GRAPH_COMPUTE로 폴백되도록 합니다.

이 업데이트는 프로토콜 또는 API 변경 없이 llama.cpp RPC 서버를 표적으로 하는 원격 코드 실행 공격을 방지합니다.