본문 바로가기

System/Tomcat

tomcat 기본 에러 페이지 반환

0. 들어가며

프록시툴(Burp Suite)을 통해 tomcat으로 구동되고 있는 웹어플리케이션에 대하여 웹취약점에 대한 검사를 하였다.
특정 페이지의 파라미터에 특수문자(>")를 삽입한뒤 수정하여 보낼 경우, 아래 이미지와 같이 web.xml에 설정되어 있는 페이지가 아닌 기본 톰캣 에러페이지가 리턴되었다. 

 

원인은 아래와 같고, 원인에 대한 조치방법을 알아보자.

 

1. 원인


1) tomcat URL PATCH( RFC7230,RFC3986 )
아래는 버그 리포트에 남겨진 정보이며, 이미지는 그와 관련된 패치 내역이다.
https://bz.apache.org/bugzilla/show_bug.cgi?id=62273

 

tomcat의 8.5.31 , 9.0.8 버젼 이상부터는 위 패치로 인해 URL 파라미터에 특수문자가 들어갈 경우 웹애플리케이션으로 REQUEST를 전달을 하지 않게끔 패치가 되었다. web.xml의 에러페이지의 경우 웹애플리케이션이 처리할 때의 에러페이지를 나타내므로, tomcat 자체에서 에러를 리턴할 경우 기본 페이지가 노출되는 것으로 확인할 수 있다.

 

2. 조치방안

 

조치방법은 총 2가지인데, 아래와 같다.

 

1) relaxedQueryChars 설정

 

해당 설정의 경우 server.xml의 connect에 설정을 하면되는데, 패치로 인해 막힌 특수문자에 대한 설정을 풀어주는 옵션이다.  아래이미지는 해당옵션에 대한 설명이다.

 

<Connector port="8079" 
           protocol="HTTP/1.1" 
           connectionTimeout="20000" 
           redirectPort="8443"
           relaxedQueryChars="[]()^|&quot;"
           />

선언된 특수문자는 예외처리되어 웹어플리케이션에서 처리되기 때문에 web.xml에 선언되어 있는 에러페이지에서 처리가 된다. 

* relaxedQueryChars 선언시 <,>를 추가한 뒤 tomcat을 재구 동하면 에러가 발생하는데 아래 URL의 코드를 참고하여 설정하면 정상적으로 적용된다.

https://www.codetable.net/unicodecharacters

 

Unicode character list - Code Table.NET

 

www.codetable.net

ex )

특수문자 Unicode Character Hex Code
< &#x3C;
> &#x3E;

 

2) org.apache.catalina.valves.ErrorReportValve 설정

   
1)의 조치방법은 잡히는 특수문자에 대해 전부 필터를 걸어야하는 번거로움이 있다. 이 방법은 

tomcat의 기본 에러 페이지를 별도로 선언하여, 조치하는 방법이다 

<Valve className="org.apache.catalina.valves.ErrorReportValve"
       showReport="false"
       showServerInfo="false"
       errorCode.0="/home/tomcat_svr/webapps/WEB-INF/classes/static/error.html"

 

errorCode 선언을 통하여 각 HTTP상태코드에 따른 페이지를 설정할 수 있지만,. 0 설정 시 기본 에러페이지이므로 해당 페이지로 설정함이 편의성이 좋아 보인다. 추가로 showReport는 false설정 시 에러에 대한 상세한 내용을 표시하지 않는 옵션이며, showServerInfo는 false설정 시 서버정보를 반환하지 않는 옵션이다. 아래 이미지는 해당 옵션들에 대한 설정이다.

'System > Tomcat' 카테고리의 다른 글

[Tomcat] OutOfMemoryError: unable to create new native thread  (0) 2025.04.01