Une vulnérabilité a été identifiée dans le projet Fluent Bit (CVE-2024-4323) permettant une corruption de mémoire à distance, ce qui peut conduire à un déni de service, à une fuite de données et potentiellement à l'exécution de code sur le serveur. Ce problème, surnommé « Linguistic Lumberjack », présente un niveau de danger critique (9,8 sur 10). La vulnérabilité apparaît à partir de la version 2.0.7 et a été corrigée dans les mises à jour 2.2.3 et 3.0.4.
Fluent Bit compte plus de 10 milliards de déploiements et est utilisé pour le traitement et la collecte de journaux et de métriques dans de nombreuses entreprises et plateformes cloud, par exemple, parmi les utilisateurs figurent Google Cloud, AWS, DigitalOcean, vmWare, Cisco, Microsoft, Lyft, LinkedIn, Walmart, Couchbase, Swift et Dell. En mars, 13 millions d'images Docker de Fluent Bit ont été téléchargées. Selon Tenable, l'entreprise ayant découvert les vulnérabilités, de nombreux services cloud ne bloquent pas l'accès à l'API Web pour obtenir des métriques internes, telles que la disponibilité, et Fluent Bit est utilisé pour traiter les requêtes à ces API.
La vulnérabilité est due à une erreur dans le serveur HTTP intégré, se manifestant lors du traitement des requêtes externes via les appels API « /api/v1/traces » et « /api/v1/trace », permettant aux utilisateurs d'accéder aux informations sur les traces configurées. Indépendamment de l'activation du traçage, un utilisateur peut accéder aux données de l'API s'il a accès approprié. Lors de l'analyse des requêtes entrantes, les types de certains champs d'entrée, transmis via un tableau dans un bloc JSON, étaient mal déterminés et étaient interprétés comme un type MSGPACK_OBJECT_STR, quelle que soit la type de champ attendu. L'inclusion de valeurs non string dans le tableau d'entrée, par exemple des paramètres entiers, conduisait à une corruption de mémoire parce que la fonction flb_sds_create_len() extrayait la valeur entière transmise comme champ de taille de chaîne.
Exemple de requête provoquant un crash : python3 -c ‘print(«{\"output\":\"stdout\", \"params\": {\"format\": \"json\"},\"inputs\":[\"" + "A"*8 + "\"," + str(0xffffffff) + ", \"" + "B"*500 + "\"]}»)’ > test curl -v http://:2020/api/v1/traces/ -H «Content-Type: application/json» -H «Expect: » —data «@test»
Au cours de leurs expériences, les chercheurs ont réussi à provoquer une terminaison inattendue du service et à déterminer le contenu résiduel de la mémoire utilisée lors du traitement des requêtes HTTP, contenant par exemple des fragments de données sensibles, telles que des clés d'accès. Étant donné que le problème entraîne un débordement de mémoire tampon dépendant des paramètres transmis, il pourrait théoriquement être exploité pour exécuter du code dans le système, mais cette possibilité n'a pas été vérifiée par les chercheurs ayant identifié le problème en raison du manque de temps pour travailler sur un exploit.
Source : opennet.ru
