게임 포털 웹서비스 조직에서 개발자 지원 업무를 하고 있었을때 발생한 보안 이슈였고 원인과 해결 방법에 대해 정리해본다.


1. 현상

사이트내 갤러리 게시판이고, 이미지를 클릭하면 다운로드하는 형태.

특정 url의 response 데이터에 /etc/passwd 내용이 노출되었다,

ex) http://xxx.xxx.com/xxx/xxx?param=file%3A%2F%2F%2Fetc%2Fpasswd



2. 원인

원래는 http://xxxxxx 식의 이미지 경로가 들어와야 하는 하며, 내부 로직에서는 들어온 파라미터를 이용해 

new Url("http://xxxx") 처리를 하도록 되어 있다. 문제는 파라미터로 들어온 file%3A%2F%2F%2Fetc%2Fpasswd

 url decoding을 하면 file:///etc/passwd 값인데 Url클래스가 로컬 파일 접근이 가능하기 때문에 

password 가 response 에 고스란히 노출되었던 것이었다.


3. 해결

기본적으로 XssFilter 적용이 되어 있어서 CRCF injection (http://www.acunetix.com/websitesecurity/crlf-injection/) 

공격과  directory/path traversal 도 되지 않도록 아파치 설정이 되어 있어 노출만 될뿐 추가적인 피해는 없었다.

따라서 아래와 같은 방법으로 해결하도록 가이드하여 적용하였다.

 

1. 파일 확장자 체크 - 정해진 확장자만 허용  (.gif, .jpg, .png )

2. URL 클래스 사용시 새로운 객체 생성에서 url에 HTTP만 허용 (ftp, telnet, file 등은 사용하지 않도록)

 

 추후에라도 파일 다운로드를 하는 웹서비스를 할 경우 까먹지 말고 유의하도록 해야겠다.


연관 이슈

sql injection, xss, parameter manipulation, buffer overflows, directory/path traversal etc.

'Security' 카테고리의 다른 글

서버와 클라이언트 간 메세지 전송  (0) 2015.09.03

+ Recent posts