파일 다운로드 취약점은 임의의 파일을 다운로드할 수 있는 취약점이다.
임의의 파일을 다운로드할 수 있는 만큼 서버 내의 중요 파일, 소스 코드, 심지어 DB 연동 파일처럼 보호되어야 할 파일이 무분별하게 다운로드될 수 있다.
정상적인 일반 파일을 다운로드 해보자.
잘 다운로드된다.
지금 사이트는 파일 다운로드 취약점에 대한 아무런 대응 방안이 없다. 사용자가 파일 다운로드를 의도된 대로 사용해주길 바라겠지만 이를 악용해 의도되지 않은 방식으로 임의의 파일을 다운로드할 수 있다.
우선 파일 다운로드가 어떠한 경로로 다운로드되고 있는지 확인해본다.
프록시같은 툴로도 확인할 수 있을 것이고, 간단하게 다운로드 버튼에 우클릭하여 링크 주소 복사를 하는 등의 방식을 사용할 수도 있다.
~/download.php?file=green.jpg
내 웹 사이트는 이와 같은 경로로 다운로드 기능을 수행해주고 있다. 이러한 방식을 다운로드 스크립트를 사용한 다운로드 방식이라고 하며 다운로드 기능을 수행하는 스크립트를 새로 만들어 파일의 경로나 파일명을 파라미터로 받아 처리한다.
다만 어떠한 검증도 없는 경우 이를 이용해 파라미터를 조작하여 파일 업로드 디렉터리를 벗어나 허용되지 않은 다른 파일들에 대해 접근이 가능해진다.
다운로드 경로를 확인했으니 file 파라미터에 green.jpg 대신 passwd 파일을 한 번 다운로드 해보자.
다운 받아진 passwd 파일을 text 파일로 연결해서 구경해보기
이로써 임의의 파일을 다운로드할 수 있음을 확인했다. 좀 더 악의적인 상황을 가볍게 가정해보자면..
소스 코드를 아무거나 다운로드 받아서
소스 코드 내의 주석이나 소스 코드를 이용해 취약점을 찾을 수도 있고 아니면 위와 같이 db 연결 파일을 찾아낼 수 있다.
파일 다운로드 취약점과 노출된 db 연결 파일명을 이용해 다운로드 받았다. db 연결 파일이 노출되었다는 것은 굉장한 보안 문제를 유발한다. 권한이 없는 공격자가 DB에 접근할 수 있다는게 얼마나 큰 문제인지는 작성해봐야 손만 아플 정도.
파일 다운로드 공격은 이런 방식으로 이루어진다. 그리고 하나 더 짚어볼게 있는데 아까 다운로드하는 방식은 다운로드 스크립트를 이용한 방식이라 했는데, 다른 방식으로는 직접 접근하여 다운로드하는 방식이 있다.
<a href="업로드 디렉터리/다운로드 받을 파일" download>download</a>
이런 식으로 다운로드를 직접적인 접근으로 할 수 있게 하는데, 굳이 다운로드 스크립트를 짜지 않아도 되서 정말 간편하다. 이번에도 링크 주소 복사를 통해 그 경로를 확인해보면..!
~/upload/green.jpg
위와 같이 업로드 디렉터리에서 파일에 직접 접근한다. 다만 이러한 직접 접근 다운로드 방식은 그 자체가 취약점으로 잡힌다고 한다.
url만 알고 있다면 누구나 파일에 접근할 수 있다는게 문제다. 다운로드 스크립트를 사용하면 접근 제어를 할 수 있지만 이와 같은 방식으로는 접근 제어가 불가능하다. 다운로드는 따로 스크립트를 만들어서 하는 방식이 안전하다.
대응법은 다음 포스팅때 작성해볼 예정. 아마 얘기하겠지만 Directory traversal 취약점과 겹치는 부분이 꽤 많아서 대응 방안도 같거나 많이 유사한 부분이 많다.
'File Download' 카테고리의 다른 글
파일 다운로드 취약점 대응 방안 (0) | 2024.08.24 |
---|