1 Résumé Exécutif & Contexte
Une série de vulnérabilités critiques affectant l'interpréteur PHP a été identifiée. Dans plusieurs configurations très courantes (notamment mode CGI, wrappers FastCGI et environnements avec gestion de codepage spécifique), un attaquant distant non authentifié peut injecter des arguments de ligne de commande directement à l'interpréteur PHP via des requêtes HTTP forgées. Cette faille permet d'obtenir l'exécution arbitraire de code sur le serveur hôte et la prise de contrôle complète de l'application publique.
L'Agence Nationale des Systèmes d'Information de l'État (ANSIE), dans le cadre de sa mission de coordination et de sécurisation des systèmes d'information gouvernementaux, enjoint l'ensemble des responsables informatiques des ministères, institutions publiques et régies étatiques à appliquer sans délai les mesures correctives et palliatives détaillées ci-après.
2 Versions Affectées & Disponibilité des Correctifs
3 Plan d'Action Technique Obligatoire pour les Équipes SI
L'ANSIE prescrit l'application systématique des 5 mesures conservatoires et correctives ci-dessous sur l'ensemble des serveurs publics et intranets de l'État :
Mise à niveau immédiate (Patching de sécurité)
Appliquer immédiatement les paquets correctifs fournis par les dépôts officiels de votre distribution (Ubuntu, Debian, RHEL/Rocky Linux) vers les versions PHP 8.3.8+, 8.2.20+ ou 8.1.29+. Redémarrer les services PHP-FPM et les serveurs web associés.
Désactivation des fonctions système d'exécution dans php.ini
Dans les fichiers php.ini de production (/etc/php/*/fpm/php.ini et /etc/php/*/cli/php.ini), renseigner explicitement la directive : disable_functions = exec, passthru, shell_exec, system, proc_open, popen, eval. Cela neutralise toute tentative d'appel de commande OS par un attaquant.
Blocage strict de l'inclusion distante de fichiers
Vérifier et forcer allow_url_fopen = Off et allow_url_include = Off. Ces deux directives empêchent le téléchargement et l'évaluation directe de scripts malveillants distants hébergés sur des serveurs tiers.
Masquage des signatures et désactivation de l'affichage des erreurs
Forcer expose_php = Off pour empêcher la détection automatique de la version de PHP via les en-têtes HTTP X-Powered-By. Configurer display_errors = Off et log_errors = On pour journaliser les incidents sans les exposer aux utilisateurs.
Filtrage WAF et surveillance des journaux d'accès
Déployer sur vos reverse-proxies ou pare-feux applicatifs (WAF) des règles d'interdiction pour les requêtes HTTP contenant la séquence encodée %ad, %adauto_prepend_file, ou des arguments CLI anormaux. Analyser activement les logs Nginx/Apache pour détecter tout code HTTP 200 suspect sur des chemins d'injection connus.
4 Directives de Durcissement Recommandées (php.ini)
Insérez ces directives dans vos fichiers de configuration php.ini (modules FPM, CLI et Apache) puis rechargez les démons avec systemctl reload php*-fpm :
; ===================================================================
; Configuration de durcissement préconisée par l'ANSIE
; À insérer dans /etc/php/[version]/fpm/php.ini & /etc/php/[version]/apache2/php.ini
; ===================================================================
[PHP-SECURITY-HARDENING]
; 1. Désactivation des fonctions d'exécution du système d'exploitation
disable_functions = exec, passthru, shell_exec, system, proc_open, popen, curl_exec, curl_multi_exec, parse_ini_file, show_source, eval
; 2. Blocage des inclusions distantes
allow_url_fopen = Off
allow_url_include = Off
; 3. Masquage des informations techniques
expose_php = Off
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php_errors.log
; 4. Isolation des sessions et permissions
session.cookie_httponly = 1
session.cookie_secure = 1
session.use_strict_mode = 1
session.cookie_samesite = Strict
; 5. Restriction des accès répertoires
open_basedir = /var/www/html/:/tmp/
5 Indicateurs de Compromission (IoC) à Rechercher
Les équipes d'exploitation doivent inspecter leurs journaux d'accès web (/var/log/nginx/access.log ou /var/log/apache2/access.log) pour vérifier l'absence des signaux suivants :
- ⚠️ Présence dans les logs web de requêtes contenant `?%ad` ou `?-d+auto_prepend_file`
- ⚠️ Connexions sortantes non planifiées vers des adresses IP publiques depuis les comptes système `www-data`, `apache` ou `nginx`
- ⚠️ Fichiers suspects récemment créés dans les répertoires `/tmp`, `/dev/shm` ou `C:\Windows\Temp`
- ⚠️ Processus persistants exécutant des commandes shell interactives lancés par le processus parent PHP-FPM