FlawOpen

flawopen.com/AI Security/lmcache-multiprocess-pickle-deserialization-cve-2026-105192

● CVE-2026-105192 · CVSS 9.8[2] · 심각
보안 연구 · FlawOpen

CVE-2026-105192: LMCache 멀티프로세스 모드의 비인증 pickle 역직렬화

CVE-2026-105192은 LMCache 멀티프로세스 전송에 접근 가능한 비인증 피어가 안전하지 않은 pickle 역직렬화를 유발할 수 있게 합니다. ZMQ 엔드포인트의 도달 가능성을 확인하고 접근을 제한하며 공급업체 수정 사항을 확인하세요.[1], [2]

CVSS 벡터CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H[2]
💡 알기 쉬운 설명 (ELI5)

LMCache는 네트워크 피어가 보낸 봉인된 소포를 받고, 안에 숨은 명령을 실행할 수 있는 방식으로 엽니다. 서버가 소포가 주장하는 메시지 유형을 확인하기 전에 문제가 발생합니다.[1], [2]

핵심 개념 및 용어

CWE-502: 안전하지 않은 역직렬화
Python pickle은 객체를 복원할 때 동작을 실행할 수 있으므로 신뢰할 수 없는 네트워크 피어의 데이터에 안전하지 않습니다.[1], [2]
LMCache 멀티프로세스 모드
LMCache 구성 요소가 ZeroMQ 전송으로 통신하는 모드입니다. CVE 기록은 비인증 ROUTER 엔드포인트를 설명합니다.[2], [5]
MessagePack 확장
디코딩 중 MessagePack 확장 값이 요청 유형을 분기하기 전에 DeviceIPCWrapper.Deserialize로 전달됩니다.[2], [4], [3]
노출 경계
CVE 기록에 따르면 전송은 기본적으로 localhost에 바인딩됩니다. 라우팅 가능한 --host 또는 접근 가능한 클러스터 네트워크는 메시지를 보낼 수 있는 대상을 바꿉니다.[2], [5]
영향받는 버전
공개 자료에 따르면 2026-10-07 기준 0.3.9~0.5.5, 0.5.6 릴리스 후보 및 개발 브랜치가 영향을 받습니다.[1], [2]
CWE-306: 중요 기능에 대한 인증 누락
CVE 레코드는 ZeroMQ ROUTER가 피어를 인증하지 않으므로 CWE-306도 지정합니다. 이는 안전하지 않은 pickle 객체 복원(CWE-502)과 구별되는 전송 경계의 별도 약점입니다. 노출되려면 endpoint에 접근할 수 있어야 하며, 기본 localhost 바인딩만으로는 원격 접근이 가능해지지 않습니다.[2]

프레임워크 매핑

  • 이 가이드에서 설명하는 약점의 CWE 참조: CWE-306 CWE-502

단계별 공격 실행 흐름

단계 1

배포에서 멀티프로세스 전송을 활성화

문제는 LMCache 멀티프로세스/분산 모드에 해당하며 모든 설치에 해당하지 않습니다.[2], [1]

단계 2

피어가 ZMQ 엔드포인트에 도달

CVE 기록은 기본값이 localhost라고 설명합니다. 운영자가 라우팅 가능한 --host를 설정할 수 있으며 도달 가능성이 전제 조건입니다.[2], [5]

단계 3

디코딩이 pickle.loads를 호출

코드 1의 MessagePack 확장이 DeviceIPCWrapper.Deserialize에 도달하고, 핸들러가 메시지 유형을 검사하기 전에 pickle.loads를 호출합니다.[2], [4], [3]

단계 4

프로세스가 복원된 객체를 처리

기록에 따르면 코드는 LMCache 프로세스 권한으로 실행되며 공식 컨테이너는 root로 동작합니다. 이는 영향 설명이지 특정 배포의 노출 증거는 아닙니다.[2], [3]

배포 조건과 대응

조건평가
멀티프로세스 모드 비활성화이 CVE 경로가 활성화되지 않습니다.
loopback에만 바인딩원격 피어는 엔드포인트에 도달하지 못할 것으로 예상됩니다. 호스트 네트워크와 로컬 신뢰 경계를 확인하세요.
라우팅 가능한 바인딩 또는 클러스터 포트 노출잠재적으로 접근 가능하다고 보고 접근을 제한하고 프로세스 권한을 확인하세요.
영향받는 버전공개 자료에 따르면 2026-10-07 기준 0.3.9~0.5.5, 0.5.6 릴리스 후보 및 개발 브랜치가 영향을 받습니다.

소스 코드 비교: 취약한 구현 vs 보안 패치

CVE Program 기록은 CVE-2026-105192을 JFrog에 귀속하고 MessagePack 확장 → DeviceIPCWrapper.Deserialize → pickle.loads 경로, 기본 localhost 바인딩, 라우팅 가능한 --host 및 CVSS 9.8을 설명합니다. upstream 소스는 역직렬화 호출을 확인합니다. 이 문서에는 무기화된 pickle이 없으며 공급업체 패치가 있다고 주장하지 않습니다. 엔드포인트에 도달할 수 있어야 하며 기본 로컬 바인딩만으로 원격 접근이 가능해지는 것은 아닙니다. 임시 코드 예시는 해당 디코딩 경로를 비활성화하며 LMCache에 그대로 적용할 패치가 아닙니다. 운영 영향을 평가하고 지원되는 수정이 나올 때까지 네트워크를 격리하세요.[2], [1], [3], [4], [5]

취약한 구현
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    return pickle.loads(data)
보안 강화 패치
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    # 임시 fail-closed 차단 조치이며 upstream 패치는 아닙니다.
    raise PermissionError("LMCache peer deserialization disabled pending vendor fix")

엔지니어링 및 시스템 보안 강화 체크리스트

출처

← AI Security Directory →