
CVE-2024-1561 - Gradio Arbitrary File Read
CVE-2024-1561 — это уязвимость произвольного чтения файлов, затрагивающая Gradio версий до 4.13.0. Gradio — популярный Python-фреймворк, используемый для быстрого создания веб-интерфейсов для моделей машинного обучения и AI-приложений.
Уязвимость существует из-за того, что конечная точка /component_server не ограничивает должным образом, какие методы внутреннего класса Component могут быть вызваны. Злоумышленник может злоупотребить этим поведением для вызова методов, которые никогда не предназначались для доступа через HTTP.
Один из таких методов, move_resource_to_block_cache, позволяет скопировать файл из локальной файловой системы во временный кеш-каталог Gradio. После копирования файл становится доступным через конечную точку /file, что позволяет злоумышленнику получить его содержимое.
Хотя уязвимость не предоставляет прямого удалённого выполнения кода, она может раскрыть чувствительные файлы с сервера и может быть использована для сбора учётных данных, конфигурационных файлов, API-ключей, токенов или другой информации, полезной для дальнейших атак.
Версии 4.13.0 и новее содержат необходимые проверки безопасности для предотвращения произвольного вызова методов.
Проблема связана с недостаточной валидацией в конечной точке /component_server.
Вместо ограничения запросов безопасным списком вызываемых функций Gradio позволяло злоумышленникам задавать произвольные имена методов, принадлежащих экземпляру компонента.
Поскольку внутренний метод:
move_resource_to_block_cache()
принимает на вход путь в файловой системе, злоумышленник может указать приложению кешировать любой читаемый файл на сервере.
После кеширования файл становится доступным через обычную функциональность раздачи файлов Gradio.
Успешная атака обычно включает следующие шаги:
/config./component_server.move_resource_to_block_cache./etc/passwd)./file.Этот процесс позволяет удалённо получить любые файлы, доступные для чтения процессу Gradio.
POST /component_server HTTP/1.1
Host: target
Content-Type: application/json
{
"component_id": "3",
"data": "/etc/passwd",
"fn_name": "move_resource_to_block_cache",
"session_hash": "aaaaaaaaaaa"
}
В случае успеха Gradio возвращает расположение закешированного файла.
Затем злоумышленник может запросить:
GET /file=/tmp/gradio/<cached-file>/passwd HTTP/1.1
Host: target
чтобы получить содержимое.
Успешная эксплуатация может позволить злоумышленнику прочитать чувствительные файлы, включая:
/etc/passwd.env)Влияние зависит от привилегий приложения Gradio.
Для устранения этой уязвимости:
Данный репозиторий предоставлен исключительно для образовательных целей, исследований безопасности и авторизованного тестирования на проникновение. Всегда получайте явное разрешение перед тестированием систем, которые вам не принадлежат или на которые у вас нет разрешения.