🇰🇷 한글 설명
phpMyFAQ 4.1.2 이전 버전의 SvgSanitizer::decodeAllEntities() 함수에서 재귀적 엔티티 디코딩이 5번으로 제한되어 있어, 공격자가 깊게 중첩된 앰퍼샌드 인코딩을 통해 sanitization을 우회할 수 있습니다. FAQ_EDIT 권한을 가진 인증된 사용자가 악의적인 SVG 파일을 업로드하여 javascript: URL을 재구성하면, 다른 사용자가 이를 조회할 때 임의의 JavaScript 코드가 자동 실행됩니다.
💡 쉬운 설명
phpMyFAQ에서 SVG 파일 업로드 시 보안 검사 로직이 충분하지 않아 권한 있는 사용자가 악의적인 파일을 올릴 수 있습니다. 이 파일을 다른 사용자가 보면 자동으로 해킹 코드가 실행되어 세션 탈취나 정보 도용이 발생할 수 있습니다.
🇺🇸 원문 (English)
phpMyFAQ before 4.1.2 contains a stored cross-site scripting vulnerability in SvgSanitizer::decodeAllEntities() that limits recursive entity decoding to 5 iterations, allowing attackers to bypass sanitization. Authenticated users with FAQ_EDIT permission can upload malicious SVG files with deeply nested ampersand encoding around numeric HTML entities to reconstruct javascript: URLs, which execute arbitrary JavaScript when clicked by other users viewing the uploaded SVG.
📍 영향받는 시스템
phpMyFAQ 4.1.2 이전 모든 버전
⚔️ 공격 벡터
FAQ_EDIT 권한 보유 인증 사용자가 깊게 중첩된 엔티티 인코딩을 포함한 SVG 파일 업로드 후 다른 사용자의 조회 유도
🛡️ 대응 방법
phpMyFAQ를 4.1.2 이상으로 업데이트하고 SVG 파일 업로드 권한을 최소화하며 엔티티 디코딩 반복 한계를 증가시킴
🔧 검증 코드
버전이 4.1.2 이상이면 안전하고, 4.1.1 이하면 즉시 업데이트 필요함
dpkg -l | grep phpmyfaq || php -r "echo isset($GLOBALS['config']) ? 'phpMyFAQ installed' : 'not installed';"