경로추척 취약점은 웹 어플리케이션 서버의 파일 또는 디렉토리에대한 접근이 제한적이지 않고 허용이 되어 있어 해커로부터 경로가 탈취되어 중요 정보획득 및 변조가 가능한 취약점을 의미 합니다.
웹주소에 아래처럼 특정 상대경로를 계속해서 입력 해 가면서 정보가 탈취할 수 있을때가지 해커가 입력이 가능하면 해당 취약점이 존재한다 볼 수 있습니다.
#다운로드 기능이 있는 주소를 상대로 아래처럼 시도를 합니다.
#1차 시도
http:127.0.0.1/../../../../../../../../../../../etc/passwd
#2차 시도
http:127.0.0.1/../../../../../../../../../../etc/passwd
#3차 시도
http:127.0.0.1/../../../../../../../../../etc/passwd
#4차 시도
http:127.0.0.1/../../../../../../../../etc/passwd
이러한 방식으로 계속 실행..
#방법1
이러한 패턴에 대비하여 사용자의 요청이 있는 경우에 요청값을 필터해야 합니다.
대표적으로 허용해서는 안되는 문자 타입 입니다.
문자 | 설명 |
. | Path Traversal 가능성의 확인 |
/ | 특정 Path의 접근 가능성을 확인 |
\ | 운영환경에 따른 Path 접근 확인 |
% | UTF 인코딩 파라미터 |
파일 다운로드시 이러한 요청이 들어오게 되면 해당 값을 치환하여 주도록 합니다.
#방법2
웹 어플리케이션 상위 버전에서는 이러한 요청을 처음부터 실행되지 않게 막는 경우가 있습니다.
톰캣 서버를 예로 들면 해당 특수기호가 포함된 요청이 들어오면 400 또는 401 오류를 반환합니다.
이러한 경우에 서버의 정보가 나타날 수 있으므로 서버정보를 항상 끄도록 하며, 오류페이지에서의 오류 원인 또한 가려두도록 합니다.
* 파일 : 톰캣 server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false" >
<Context path="" docBase="배포위치" reloadable="false"></Context>
<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" /> <!-- 오류 리포팅 기능을 off 합니다 -->
</Host>
또한 오류가 발생하더라도 웹 어플리케이션 서버에서 바로 오류처리를 해 버리므로 내가 설정한 400페이지, 401페이지로 이동이 되지 않을 수 있습니다.
* 물론 사용하는 웹 어플리케이션 형태마다 다를 수 있습니다.
이러한 경우에는 웹 어플리케이션 특수문자에 대한 요청을 허용해 주도록 합니다.
대신 이러한 경우에는 자체 설정한 필터 또는 인터셉터기능이 해당 요청을 검증해야 합니다.
* 파일 : 톰캣 server.xml
<!-- 생략.. -->
<Service name="Catalina">
<!-- 생략.. -->
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="18723"
relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`"<>" />
<!-- relaxedPathChars과 relaxedQueryChars값을 주어서 특수기호 요청도 허용하게 합니다 -->
</Service>
이상으로 표준취약점 경로추적(PT)에 대해서 간단하게 살펴보았습니다.
궁금한점 또는 틀린 부분은 언제든 연락주세요! 👻
'웹 취약점(Web vulnerability)' 카테고리의 다른 글
27. 데이터 평문전송(SN) (0) | 2021.12.10 |
---|---|
26. 위치공개(PL) (0) | 2021.12.10 |
24. 관리자 페이지 노출(AE) (0) | 2021.12.10 |
23. 파일 다운로드(FD) (0) | 2021.12.10 |
22. 약한 문자열 강도(BF) (0) | 2021.12.09 |
댓글