🇰🇷 한글 설명
Apache Tomcat의 Default Servlet에서 정적 에러 페이지에 접근할 때 원본 HTTP 메소드(POST, PUT, DELETE 등)를 그대로 처리하는 취약점입니다. 정상적으로는 GET 요청으로만 처리되어야 하는데, 다른 메소드가 전달되면서 DefaultServlet이 쓰기 권한을 가진 경우 에러 페이지를 덮어쓰거나 삭제할 수 있습니다.
💡 쉬운 설명
웹 서버가 에러가 발생했을 때 보여주는 페이지를 다양한 HTTP 메소드(POST, DELETE 등)로 접근할 수 있다는 뜻입니다. 관리자 설정에 따라 이 페이지를 악의적으로 수정하거나 삭제할 수 있습니다.
🇺🇸 원문 (English)
The error page mechanism of the Java Servlet Specification requires that, when an error occurs and an error page is configured for the error that occurred, the original request and response are forwarded to the error page. This means that the request is presented to the error page with the original HTTP method. If the error page is a static file, expected behaviour is to serve content of the file as if processing a GET request, regardless of the actual HTTP method. The Default Servlet in Apache Tomcat 9.0.0.M1 to 9.0.0.M20, 8.5.0 to 8.5.14, 8.0.0.RC1 to 8.0.43 and 7.0.0 to 7.0.77 did not do this. Depending on the original request this could lead to unexpected and undesirable results for static error pages including, if the DefaultServlet is configured to permit writes, the replacement or removal of the custom error page. Notes for other user provided error pages: (1) Unless explicitly coded otherwise, JSPs ignore the HTTP method. JSPs used as error pages must must ensure that they handle any error dispatch as a GET request, regardless of the actual method. (2) By default, the response generated by a Servlet does depend on the HTTP method. Custom Servlets used as error pages must ensure that they handle any error dispatch as a GET request, regardless of the actual method.
📍 영향받는 시스템
Apache Tomcat 9.0.0.M1-M20, 8.5.0-8.5.14, 8.0.0.RC1-8.0.43, 7.0.0-7.0.77
⚔️ 공격 벡터
PUT, DELETE 등의 HTTP 메소드를 사용하여 에러 페이지 URL에 접근하면 정적 에러 페이지를 수정/삭제할 수 있음
🛡️ 대응 방법
Tomcat을 최신 패치 버전으로 업그레이드 (9.0.0.M21+, 8.5.15+, 8.0.44+, 7.0.78+)