반응형

년초가 되니 운영중인 사이트들에 대해 취약점 점검 문서를 받았다.

 

그렇게 크리티컬한 이슈는 없었고 처음보는 형태의 취약점이였는데, 찾아보니 예전부터 존재하던 취약점이였다.

웹에서는 보통  GET, POST만을 사용하는데 불필요한 메소드인 PUT, DELETE, COPY, MOVE 등이 허용되어 있어 외부에서 공격자가 해당 메소드를 사용하여 웹 서버의 파일을 생성하거나 변조, 삭제하는 등 문제를 야기시킬수 있다는 내용이였다.

 

TRACK메소드외 불필요한 메소드 제거하기

톰캣, 스프링 환경의 프로젝트였고, 관련 처리 방법을 찾아보니, 먼저 web.xml에 아래의 설정을 하라고 되어있었다.

 

web.xml

<security-constraint>
	<web-resource-collection>
		<web-resource-name>Protected Context</web-resource-name>
		<url-pattern>/*</url-pattern>
		<http-method>PUT</http-method>
		<http-method>DELETE</http-method>
		<http-method>HEAD</http-method>
		<http-method>TRACE</http-method>
		<http-method>OPTIONS</http-method>
	</web-resource-collection>
	<auth-constraint/>
</security-constraint>

해당 메소드들을 허용하지 않겠다는 옵션 설정으로 최하단에 해당 코드를 입력하고 재구동하였지만, 여전히 ALLOW에 비허용되어야 할 리스트들이 보였다.

 

적용되었는지 확인은 curl명령어를 통해 확인하였다.

cmd창을 열어서 아래와 같이 명령어를 실행한다.  TRACE메소드를 사용하며 제일 마지막에 전송할 url을 입력하면 된다.

??? 기존과 아무런 차이가 없다.

 

그러다 tomcat설정 파일 중 server.xml에 allowTrace를 true옵션을 처리하라는 글을 확인하고 설정 후 재기동하였다.

 

/conf/server.xml

<Service name="Catalina">

    <!--The connectors can use a shared executor, you can define one or more named thread pools-->
    <!--
    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
        maxThreads="150" minSpareThreads="4"/>
    -->


    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL/TLS HTTP/1.1 Connector on port 8080
    -->
    <Connector connectionTimeout="20000" maxParameterCount="-1" maxPostSize="-1" port="80" protocol="HTTP/1.1" redirectPort="8443"
    	allowTrace="true" />
        
    <!-- 이하생략 -->

allowTrace옵션을 주고 curl을 통해 재확인을 해보니 정상적으로 allow의 옵션이 사라진걸 볼 수 있었다.

이후는 관련 에러 페이지 body가 읽혔다.

 

반응형