🇰🇷 한글 설명
phpMyFAQ 4.1.1 이전 버전에서 비인증 공격자가 RFC 5321 형식의 이메일 주소에 HTML 코드를 삽입하여 FAQ를 제출할 수 있습니다. PHP의 FILTER_VALIDATE_EMAIL이 이를 유효한 이메일로 처리하고, Twig 템플릿의 |raw 필터로 인해 이스케이프 없이 관리자 페이지에 렌더링됩니다. 이로 인해 저장형 XSS(Cross-Site Scripting) 공격이 가능합니다.
💡 쉬운 설명
공격자가 이메일 주소처럼 보이는 악성 코드를 FAQ 제출 폼에 넣으면, 관리자가 해당 FAQ를 열람할 때 악성 스크립트가 실행됩니다. 마치 편지 봉투 주소란에 폭발물을 숨겨 두는 것처럼, 관리자가 열어보는 순간 공격이 발동됩니다.
🇺🇸 원문 (English)
phpMyFAQ is an open source FAQ web application. Prior to version 4.1.1, an unauthenticated attacker can submit a guest FAQ with an email address that is syntactically valid per RFC 5321 (quoted local part) yet contains raw HTML — for example "<script>alert(1)</script>"@evil.com. PHP's FILTER_VALIDATE_EMAIL accepts this email as valid. The email is stored in the database without HTML sanitization and later rendered in the admin FAQ editor template using Twig's |raw filter, which bypasses auto-escaping entirely. This issue has been patched in version 4.1.1.
📍 영향받는 시스템
phpMyFAQ 4.1.1 미만 모든 버전
⚔️ 공격 벡터
비인증 사용자가 이메일 필드에 '<script>alert(1)</script>'@evil.com 형태의 XSS 페이로드를 삽입한 guest FAQ 제출 → 관리자 FAQ 편집 페이지에서 |raw 필터로 렌더링 시 실행
🛡️ 대응 방법
phpMyFAQ를 버전 4.1.1 이상으로 업그레이드하거나, 이메일 저장 전 HTML 이스케이프 처리 및 Twig 템플릿에서 |raw 필터 제거
🔧 검증 코드
출력된 버전이 4.1.1 미만이면 취약, 4.1.1 이상이면 패치 완료
php -r "require 'vendor/autoload.php'; echo (new phpMyFAQ\System())->getVersion();" 2>/dev/null || grep -rE "version.*[0-9]+\.[0-9]+\.[0-9]+" composer.json 2>/dev/null | head -1