
Analyse technique détaillée de CVE-2024-5452, une vulnérabilité d'exécution de code à distance dans PyTorch Lightning via la pollution de propriété delta DeepDiff, avec preuve de concept et conseils d'atténuation.
RCE (Remote Code Execution, exécution de code à distance) est une vulnérabilité qui permet à un attaquant d'exécuter du code arbitraire à distance dans un système ou une application, et correspond à CWE-94: Improper Control of Generation of Code ('Code Injection').
PyTorch Lightning est une bibliothèque qui facilite la gestion de l'entraînement des modèles d'apprentissage profond basés sur PyTorch, et DeepDiff est une bibliothèque qui compare deux objets Python pour analyser leurs différences.
CVE-2024-5452 est une vulnérabilité dans les fonctionnalités d'application Web liées aux poids des modèles IA de Lightning, exploitant DeepDiff et Lightning, où une validation de l'en-tête faible et une contamination des attributs delta dans DeepDiff provoquent une RCE lors de la désérialisation.
Nous allons examiner le flux de code qui conduit à cette vulnérabilité, permettant à un attaquant d'injecter des objets arbitraires ou d'exécuter du code à distance (RCE), et explorer des mesures de réponse.
Dans pytorch-lightning, il est possible d'attaquer en contaminant les attributs delta envoyés à l'endpoint /api/v1/delta de DeepDiff dans le code source de l'application Web.
En examinant des exemples, nous voulons comprendre comment la contamination des attributs dunder de delta provoque une vulnérabilité de désérialisation d'objets.
La première requête est un exemple d'attaque client, configuration de contamination -> validation d'en-tête faible dans /api/v1/delta de DeepDiff -> sauvegarde d'état via la contamination validée.
[Figure 1] POC - Attaque sur endpoint
[Figure 2] POC - Injection de vulnérabilité / Contenu complet de la configuration de contamination
[Figure 3] lightning/api/core/api.py / Partie de la logique de vérification d'en-tête faible
[Figure 4] lightning/api/core/app.py / Section de configuration
[Figure 5] lightning/api/core/app.py / Section de sauvegarde de configuration
La première requête contourne la vérification d'en-tête de /api/v1/delta dans [Figure 3] via [Figure 1], injecte la configuration de contamination (delta) manipulée [Figure 2], puis sauvegarde la configuration via [Figure 4] et [Figure 5]. Voyons maintenant comment ces configurations delta manipulées agissent dans la deuxième requête.
[Figure 6] lightning/api/core/app.py / Flux de chemin initial
[Figure 7] Cas de contamination isinstance
[Figure 8] Cas de contamination isinstance 1
[Figure 9] Cas de contamination isinstance 2
[Figure 10] Cas de contamination isinstance 3
[Figure 11_1] Fonction de vérification de _INTERNAL_STATE_VARS dans /lightning/app/core/flow.py
[Figure 11_2] __setattr__ dans /lightning/app/core/flow.py
Avec [Figure 11], la contamination et la configuration globales sont terminées.
[Figure 12] Commande RCE
[Figure 13] Réponse RCE
Finalement, dans [Figure 13], exec est appelé avec les privilèges root pour exécuter la commande de [Figure 12], concluant ainsi l'attaque.
Nous avons examiné le flux d'exécution de la vulnérabilité RCE via la désérialisation d'objets (CVE-2024-5452) dans l'environnement lightning. Il s'agit d'une attaque où le serveur lui-même est compromis, d'où l'importance des mesures de réponse. Nous proposons donc une mise à jour vers la version la plus récente.


Nous avons examiné la vulnérabilité qui provoque une RCE en contaminant les attributs Dunder via Lightning et DeepDiff. Cette vulnérabilité résulte d'abord d'une validation d'en-tête faible, puis d'une inspection faible des attributs delta, conduisant à une désérialisation d'objets.