🇰🇷 한글 설명
Slim PHP 마이크로 프레임워크 4.4.0부터 4.15 버전에서 HttpException::setTitle() 또는 setDescription()에 사용자 입력값을 포함할 경우 발생하는 XSS 취약점입니다. 공격자는 HTML 에러 페이지를 통해 악성 JavaScript를 실행할 수 있으며, 이는 에러 상세 정보 표시 설정이 꺼져 있어도 발생합니다. 해당 문제는 4.15.2 버전에서 수정되었습니다.
💡 쉬운 설명
웹사이트 에러 메시지에 사용자가 입력한 글자가 그대로 표시되어, 해커가 몰래 악성 코드를 심을 수 있는 문제입니다. 에러 화면이 뜰 때 사용자의 브라우저에서 해커가 원하는 동작이 실행될 수 있습니다.
🇺🇸 원문 (English)
Slim is a PHP micro framework that enables users to write simple web applications and APIs. In versions 4.4.0 through 4.15, if an application uses HttpException::setTitle() and/or setDescription() to include untrusted/request-derived data in the error title or description (e.g. "No products found matching '{$query}'."), an attacker could inject arbitrary HTML/JavaScript that executes in the victim's browser when they encounter an HTML error page generated by Slim. The vulnerability is present even with displayErrorDetails = false as the unescaped title and description are rendered on this error path. Built-in exceptions (HttpNotFoundException, HttpBadRequestException, etc.) ship plain-text defaults, so a vanilla Slim app with no user code is not exploitable. Only applications that feed untrusted data into setTitle() and/or setDescription() are affected. The issue has been fixed in 4.15.2. If developers are unable to immediately update their applications, they can work around this issue by avoiding passing untrusted/request-derived data into HttpException::setTitle() and setDescription() and using static, plain-text error copy instead.
They should also register a custom error renderer (an ErrorRendererInterface implementation, or a subclass of HtmlErrorRenderer that escapes the title and description) for the HTML media type.
📍 영향받는 시스템
Slim Framework versions 4.4.0 through 4.15
⚔️ 공격 벡터
HttpException의 제목이나 설명에 포함된 검증되지 않은 사용자 입력 데이터를 통한 HTML/JavaScript 주입
🛡️ 대응 방법
Slim Framework를 4.15.2 이상으로 업데이트하거나, 에러 메시지에 사용자 입력값을 직접 사용하지 말고 정적 텍스트를 사용하십시오.
🔧 검증 코드
출력된 버전이 4.4.0에서 4.15 사이라면 취약한 버전이 설치된 것입니다.
composer show slim/slim | grep 'versions'