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 に bind されます。外部から到達可能な --host やクラスターネットワークは送信者の範囲を変えます。[2], [5]
影響するバージョン
開示では、2026年10月7日時点で 0.3.9〜0.5.5、0.5.6 のリリース候補および開発ブランチが影響するとされています。[1], [2]
CWE-306:重要機能の認証欠如
CVE レコードは、ZeroMQ ROUTER が接続ピアを認証しない点から CWE-306 も割り当てています。これは pickle による安全でない復元(CWE-502)とは別の、トランスポート境界の弱点です。影響には endpoint への到達性が必要であり、既定の localhost バインドだけではリモートから到達できません。[2]

フレームワーク対応

ステップ・バイ・ステップの攻撃フロー

ステップ 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 のみで bind遠隔の相手は通常到達できません。ホストネットワークとローカルの信頼境界を確認してください。
到達可能な bind またはクラスターポート公開到達可能な可能性があるものとして扱い、アクセスとプロセス権限を確認してください。
影響するバージョン開示では、2026年10月7日時点で 0.3.9〜0.5.5、0.5.6 のリリース候補および開発ブランチが影響するとされています。

ソースコード比較:脆弱 vs 堅牢化

CVE Program の記録は CVE-2026-105192 を JFrog に帰属させ、MessagePack 拡張 → DeviceIPCWrapper.Deserialize → pickle.loads の経路、localhost の既定 bind、到達可能な --host、CVSS 9.8 を記載しています。上流コードもデシリアライズ呼び出しを確認できます。本記事に武器化 pickle はなく、ベンダー修正が公開済みとも主張しません。エンドポイントへの到達が必要であり、localhost の既定 bind だけで遠隔到達可能になるわけではありません。一時的なコード例はデコード経路を停止するもので、LMCache にそのまま適用できるパッチではありません。影響を評価し、サポートされた修正までネットワークを隔離してください。[2], [1], [3], [4], [5]

脆弱な実装
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    return pickle.loads(data)
堅牢化されたセキュアパッチ
@staticmethod
def Deserialize(data: bytes) -> DeviceIPCWrapper:
    # 一時的なフェイルクローズ型の封じ込め策であり、upstream のパッチではありません。
    raise PermissionError("LMCache peer deserialization disabled pending vendor fix")

エンジニアリング&システム堅牢化チェックリスト

参考資料

← AI Security Directory →