
CVE-2024-1561 - Lecture arbitraire de fichiers dans Gradio
CVE-2024-1561 est une vulnérabilité de lecture arbitraire de fichiers affectant Gradio dans les versions antérieures à 4.13.0. Gradio est un framework Python populaire utilisé pour créer rapidement des interfaces web pour les modèles d'apprentissage automatique et les applications d'IA.
La vulnérabilité existe parce que le point de terminaison /component_server ne restreint pas correctement les méthodes de la classe interne Component qui peuvent être invoquées. Un attaquant peut abuser de ce comportement pour appeler des méthodes qui n'ont jamais été destinées à être exposées via HTTP.
L'une de ces méthodes, move_resource_to_block_cache, permet de copier un fichier du système de fichiers local dans le répertoire de cache temporaire de Gradio. Une fois le fichier copié, il devient accessible via le point de terminaison /file, permettant à un attaquant d'en récupérer le contenu.
Bien que la vulnérabilité ne permette pas directement l'exécution de code à distance, elle peut exposer des fichiers sensibles du serveur et peut être exploitée pour collecter des identifiants, des fichiers de configuration, des clés API, des jetons ou d'autres informations utiles pour des attaques ultérieures.
Les versions 4.13.0 et ultérieures contiennent les contrôles de sécurité nécessaires pour empêcher l'invocation arbitraire de méthodes.
Le problème provient d'une validation insuffisante dans le point de terminaison /component_server.
Au lieu de limiter les requêtes à une liste sûre de fonctions appelables, Gradio permettait aux attaquants de spécifier des noms de méthodes arbitraires appartenant à une instance de composant.
Étant donné que la méthode interne :
move_resource_to_block_cache()
accepte un chemin du système de fichiers en entrée, un attaquant peut demander à l'application de mettre en cache tout fichier lisible sur le serveur.
Une fois mis en cache, le fichier est exposé via la fonctionnalité normale de service de fichiers de Gradio.
Une attaque réussie suit généralement ces étapes :
/config./component_server.move_resource_to_block_cache./etc/passwd)./file.Ce processus permet de récupérer à distance tout fichier lisible par le processus 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"
}
En cas de succès, Gradio renvoie l'emplacement du fichier mis en cache.
L'attaquant peut ensuite demander :
GET /file=/tmp/gradio/<cached-file>/passwd HTTP/1.1
Host: target
pour en récupérer le contenu.
Une exploitation réussie peut permettre à un attaquant de lire des fichiers sensibles, notamment :
/etc/passwd.env)L'impact dépend des privilèges de l'application Gradio.
Pour remédier à cette vulnérabilité :
Ce dépôt est fourni à des fins éducatives, de recherche en sécurité et de tests d'intrusion autorisés uniquement. Obtenez toujours une autorisation explicite avant de tester des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation d'évaluer.