
Подробный технический анализ CVE-2024-5452, уязвимости удаленного выполнения кода в PyTorch Lightning через загрязнение свойства дельты DeepDiff, с доказательством концепции и рекомендациями по смягчению.
RCE (Remote Code Execution) — это уязвимость, позволяющая злоумышленнику удаленно выполнять произвольный код в системе или приложении, и относится к CWE-94: Improper Control of Generation of Code ('Code Injection').
PyTorch Lightning — это библиотека, упрощающая управление обучением моделей глубокого обучения на основе PyTorch, а DeepDiff — библиотека для сравнения двух объектов Python и анализа различий.
CVE-2024-5452 — это уязвимость, которая возникает при использовании DeepDiff и Lightning в веб-приложении Lightning для работы с весами моделей ИИ, из-за слабой проверки заголовков DeepDiff и загрязнения атрибутов дельты, что приводит к RCE при десериализации.
Давайте рассмотрим поток кода, который приводит к уязвимости, позволяющей злоумышленнику внедрять произвольные объекты или выполнять удаленный код (RCE), и найдем меры противодействия.
В pytorch-lightning можно атаковать, отправляя загрязненные атрибуты дельты в конечную точку /api/v1/delta среди точек DeepDiff веб-приложения.
Рассмотрим пример, чтобы понять, как загрязнение dunder-атрибутов дельты вызывает уязвимость десериализации объектов.
Первый запрос: пример атаки клиента, настройка загрязнения -> слабая проверка заголовков в /api/v1/delta DeepDiff -> сохранение состояния через загрязнение.
[Рисунок 1] POC - Атака на конечную точку
[Рисунок 2] POC - Внедрение уязвимости / Содержимое полного загрязнения
[Рисунок 3] lightning/api/core/api.py / Часть логики слабой проверки заголовков
[Рисунок 4] lightning/api/core/app.py / Участок настройки
[Рисунок 5] lightning/api/core/app.py / Участок сохранения настройки
Первый запрос обходит проверку заголовков /api/v1/delta ([Рисунок 3]) с помощью [Рисунок 1], внедряет поддельную настройку загрязнения (дельта) [Рисунок 2] и сохраняет настройку через [Рисунок 4], [Рисунок 5]. Теперь посмотрим, как работают настройки этой поддельной дельты во втором запросе.
[Рисунок 6] lightning/api/core/app.py / Начальный поток маршрутов
[Рисунок 7] Случай загрязнения isinstance
[Рисунок 8] Случай загрязнения isinstance 1
[Рисунок 9] Случай загрязнения isinstance 2
[Рисунок 10] Случай загрязнения isinstance 3
[Рисунок 11_1] Функция проверки _INTERNAL_STATE_VARS в /lightning/app/core/flow.py
[Рисунок 11_2] __setattr__ в /lightning/app/core/flow.py
На [Рисунок 11] завершается общее загрязнение и настройка.
[Рисунок 12] RCE Commnad
[Рисунок 13] Ответ RCE
В итоге на [Рисунок 13] вызывается exec с правами root для выполнения команды с [Рисунок 12].
Мы рассмотрели поток выполнения уязвимости RCE через десериализацию объектов (CVE-2024-5452) в среде lightning. Поскольку это атака, захватывающая сам сервер, меры противодействия важны. В связи с этим предлагаем обновление до последней версии.


Мы рассмотрели уязвимость, вызывающую RCE путем загрязнения dunder-атрибутов через Lightning и DeepDiff. Эта уязвимость возникает из-за слабой проверки заголовков и последующей слабой проверки атрибутов дельты при десериализации объектов.