FastCGI est un protocole important qui améliore les performances des serveurs web en maintenant des connexions persistantes entre les serveurs web et les serveurs d’applications. Il est largement utilisé dans les systèmes embarqués aux ressources computationnelles limitées, tels que les caméras réseau, les routeurs et les appareils IoT. En raison de sa nature légère, FastCGI est souvent déployé dans des environnements où les ressources dédiées à la sécurité sont restreintes, ce qui rend les vulnérabilités particulièrement préoccupantes.
Cette vulnérabilité concerne la bibliothèque principale FastCGI écrite en C, et non PHP-FPM (qui implémente sa propre version du protocole FCGI). De nombreux appareils IoT et systèmes embarqués utilisent la bibliothèque vulnérable, exposant ainsi un grand nombre d’appareils s’ils ne sont pas correctement mis à jour.
| Produit | FastCGI |
| Date | 07/05/2025 14:18:55 |
| Informations |
|
Résumé technique
La vulnérabilité réside dans la fonction ReadParams de la bibliothèque FastCGI. Cette fonction traite les paramètres reçus des serveurs web en analysant les longueurs du nom et de la valeur avant d’allouer la mémoire nécessaire.
La chaîne de vulnérabilité fonctionne comme suit :
- La fonction
ReadParamslit la longueur du nom du paramètre et de la valeur depuis le flux d’entrée. - Si l’une des deux longueurs a le bit de poids fort activé (≥ 0x80), elle est traitée comme un entier 32 bits.
- La mémoire est ensuite allouée avec
malloc(nameLen + valueLen + 2)pour stocker les deux chaînes, un signe égal et le terminateur nul. - Sur les systèmes 32 bits, lorsque
nameLenetvalueLensont proches de la valeur maximale (0x7FFFFFFF), leur somme plus 2 provoque un dépassement d’entier (integer overflow). - Cela se traduit par une allocation très petite (généralement 0x10 octets) au lieu des gigaoctets nécessaires.
- La fonction tente ensuite de lire l’intégralité du nom et de la valeur du paramètre dans ce tampon sous-dimensionné.
- Cela crée un dépassement de tampon (heap buffer overflow) contrôlable par un attaquant.
L’aspect le plus critique est que ce dépassement permet d’écraser des structures adjacentes dans le tas (heap), notamment la structure FCGX_Stream qui contient des pointeurs de fonction. En écrasant le pointeur de la fonction fillBuffProc avec l’adresse de system() et en contrôlant le premier paramètre (le flux lui-même, qui peut contenir des commandes shell), on obtient une exécution de code à distance.
La vulnérabilité affecte toutes les versions de la bibliothèque FastCGI antérieures à la 2.4.5.
Vecteur d’attaque
L’attaque nécessite :
- Un accès direct à un socket FastCGI.
- La capacité d’envoyer des paramètres FastCGI conçus avec des dimensions spécifiques.
Bien que les sockets FastCGI ne devraient être accessibles qu’en local, de nombreuses implémentations exposent par erreur ces sockets à des connexions distantes. C’est particulièrement vrai pour certains systèmes embarqués et serveurs web mal configurés, comme dans l’exemple avec lighttpd mentionné dans le rapport, où de nombreux tutoriels suggèrent des configurations non sécurisées.
Recommandations
Pour atténuer cette vulnérabilité, les étapes suivantes doivent être entreprises :
Mettre à jour la bibliothèque FastCGI : Passer à la version 2.4.5 ou ultérieure, qui inclut les correctifs pour cette vulnérabilité.
Configurer les serveurs web de manière sécurisée :
- Utiliser des sockets UNIX au lieu de sockets TCP lorsque cela est possible.
- Si les sockets TCP sont nécessaires, limiter leur accès au seul localhost.
- Mettre en œuvre une segmentation réseau appropriée pour empêcher l’accès direct aux services FastCGI.
Mettre en œuvre des mesures de défense en profondeur :
- Activer toutes les protections système disponibles (ASLR, PIE, RELRO, etc.).
- Exécuter les applications FastCGI avec les privilèges minimaux.
- Envisager l’utilisation de pare-feu applicatifs pour filtrer les requêtes malveillantes.
Vérifier les implémentations existantes :
- Vérifier la présence de sockets FastCGI exposés sur le réseau.
- S’assurer que les configurations des serveurs web n’incluent pas d’options telles que
check-local => "disable"sans contrôles de sécurité adéquats. - Inspecter la documentation et les tutoriels pour garantir que les pratiques de déploiement sont sécurisées.
[Callforaction-THREAT-Footer]
Leave a Reply