flawopen.com/AI Security/lmcache-multiprocess-pickle-deserialization-cve-2026-105192
CVE-2026-105192: LMCache 멀티프로세스 모드의 비인증 pickle 역직렬화
CVE-2026-105192은 LMCache 멀티프로세스 전송에 접근 가능한 비인증 피어가 안전하지 않은 pickle 역직렬화를 유발할 수 있게 합니다. ZMQ 엔드포인트의 도달 가능성을 확인하고 접근을 제한하며 공급업체 수정 사항을 확인하세요.[1], [2]
LMCache는 네트워크 피어가 보낸 봉인된 소포를 받고, 안에 숨은 명령을 실행할 수 있는 방식으로 엽니다. 서버가 소포가 주장하는 메시지 유형을 확인하기 전에 문제가 발생합니다.[1], [2]
핵심 개념 및 용어
CWE-502: 안전하지 않은 역직렬화- Python pickle은 객체를 복원할 때 동작을 실행할 수 있으므로 신뢰할 수 없는 네트워크 피어의 데이터에 안전하지 않습니다.[1], [2]
MessagePack 확장- 디코딩 중 MessagePack 확장 값이 요청 유형을 분기하기 전에 DeviceIPCWrapper.Deserialize로 전달됩니다.[2], [4], [3]
노출 경계- CVE 기록에 따르면 전송은 기본적으로 localhost에 바인딩됩니다. 라우팅 가능한 --host 또는 접근 가능한 클러스터 네트워크는 메시지를 보낼 수 있는 대상을 바꿉니다.[2], [5]
CWE-306: 중요 기능에 대한 인증 누락- CVE 레코드는 ZeroMQ ROUTER가 피어를 인증하지 않으므로 CWE-306도 지정합니다. 이는 안전하지 않은 pickle 객체 복원(
CWE-502)과 구별되는 전송 경계의 별도 약점입니다. 노출되려면 endpoint에 접근할 수 있어야 하며, 기본 localhost 바인딩만으로는 원격 접근이 가능해지지 않습니다.[2]
프레임워크 매핑
단계별 공격 실행 흐름
배포 조건과 대응
| 조건 | 평가 |
|---|---|
| 멀티프로세스 모드 비활성화 | 이 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")
엔지니어링 및 시스템 보안 강화 체크리스트
- ✓LMCache 배포를 목록화하고 멀티프로세스/분산 모드 사용 여부 및 패키지·컨테이너 버전을 기록하세요.[1], [2]
- ✓실제 ZMQ 바인딩 주소와 네트워크 경로를 확인하세요. 신뢰할 수 없는 워크로드나 테넌트가 엔드포인트에 접근할 수 있다면 사설 네트워크만으로 충분하지 않습니다.[2], [5]
- ✓공급업체 수정이 나올 때까지 가능하면 멀티프로세스 전송을 비활성화하고, 단일 호스트 운영이면 loopback으로 제한하세요. 다중 노드가 필수라면 명시적으로 신뢰하는 피어만 포트에 접근하도록 제한하세요. 이는 도달성을 줄일 뿐 pickle을 안전하게 만들지는 않습니다. 향후 라우팅 가능한 배포에서는 인증된 ZMQ 피어(CURVE 또는 메시지별 HMAC 등)를 요구하고 pickle을 검증된 데이터 전용 형식으로 교체하세요. 방화벽 허용 목록은 인증이 아닙니다.
- ✓전용 비특권 계정으로 서비스를 실행하고 불필요한 컨테이너 capability를 제거하세요. CVE 기록은 공식 컨테이너가 root로 실행된다고 명시합니다.[2]
- ✓LMCache 보안 공지와 릴리스를 확인하세요. CVE-2026-105192을 명시적으로 수정한 버전으로만 업데이트하세요. 검토한 공개 자료에는 수정 버전이 명시되지 않았습니다.[1], [2]
- ✓멀티프로세스 전송 포트(CVE 기록 기준 기본 5555)의 비정상 연결을 확인하고 침해를 단정하기 전에 노출 여부를 조사하세요.[2], [5]
출처
- JFrog Security Research: CVE-2026-105192 mechanics and mitigations
- CVE Program record CVE-2026-105192 (JFrog CNA record)
- LMCache upstream: DeviceIPCWrapper deserialization source
- LMCache upstream: MessagePack extension decoding
- LMCache upstream: multiprocess ZeroMQ transport
- The Hacker News: critical LMCache pickle deserialization disclosure