파일 업로드 취약점
공격자가 실행 가능한 악의적인 파일(ex : php, jsp, asp, html 등)을 서버에 업로드할 수 있는 경우, 서버 권한 탈취, 악성 스크립트 실행, 데이터 탈취, Lateral Movement(측면 이동) 등의 위협이 발생할 수 있음
공격 시나리오
웹 셸 업로드를 통한 서버 권한 탈취
ex : PHP 기반 웹 서버에 .php 파일을 업로드하여 웹 셸을 실행할 수 있음
ex : 일부 로직에 따라 Polygot 파일 또는 이미지 파일 내 Exif Header를 활용하여 웹 셀을 실행할 수 있음
HTML 파일 업로드를 통한 악의적인 목적의 사이트 활용
ex : html과 같은 파일을 업로드하여 신뢰할 수 있는 도메인 악용 (피싱 페이지 등)
우회 방안
- .htaccess 설정 파일을 업로드할 수 있는 경우, .png를 .php와 같은 파일로 인식하게 할 수 있음
- 블랙 리스트 방식으로 검증하는 경우 .phar와 같은 일반적이지 않은 확장자를 활용해 공격을 수행할 수도 있음
- S3 Bucket의 경우 저장 시 사용되는 Content-Type을 기준으로 파일을 불러오기 때문에 Content-Type을 조작하여 우회 가능함
- RFC2047 표준을 활용하여 부적절하게 WAF에서 검증하는 로직을 우회 가능함 (=?UTF8?B?YWJjZC5qcGc=?=.jpg)
- .php%00.png와 같은 방식으로 우회가 가능한 경우도 있음 (PHP 5.x 이하에서만 인식됨)
- .shell.asp;.jpg 와 같은 방식으로 우회가 가능한 경우도 있음 (구형 IIS에서 인식됨)
대응 방안
파일 확장자 제한
- 화이트 리스트 방식으로 파일 확장자(.jpg, .png 등)를 허용
Content-Type 검증
- S3 Bucket의 경우, 저장 시 사용된 Content-Type을 활용하여 파일을 불러오기 때문에 Content-Type에 대한 검증이 필요함
- image/jpeg와 같은 이미지 Content-Type만을 허용할 것을 권고함
- 파일명과 불러오는 형식은 무관하나 사용자의 혼란을 방지하기 위해 파일명에 대한 검증도 같이 수행할 것을 권고함
업로드 폴더의 실행 권한 제거
- 웹 서버 설정을 통하여 업로드 폴더 내 실행 가능한 확장자의 실행 차단이 필요함
# Apache .htaccess 예시
RemoveHandler .php .phtml .php3
php_flag engine off
# Nginx 예시
location /uploads/ {
autoindex off;
default_type text/plain;
try_files $uri =404;
}
폴더 및 파일 명을 서버에서 임의 설정
- 사용자가 업로드된 파일의 경로와 파일명을 사용자가 유추할 수 없도록 임의 설정(UUID, hash 등)하고 경로를 노출하지 않아야 함
- 업로드된 파일을 사용자에게 직접적으로 보여줄 필요가 없는 경우에만 해당될 수 있음
파일 보관 서버 별도 구축
- 업로드된 파일을 보관하는 파일 서버를 별도 구축
- 해당 서버가 새로운 공격 포인트가 될 수 있기 때문에 적절한 보안 조치(보안 그룹 설정, 실행 권한 제거, 접근 제어, 보안 모니터링, 정기 보안 검사 등)가 필요함
'Hack > Web' 카테고리의 다른 글
[Dreamhack] Hangul Revenge (0) | 2025.03.21 |
---|---|
[go-and-dont-return] Github Security Lab CodeQL CTF (0) | 2023.08.21 |
CodeQL 설치 및 사용 방법 (0) | 2023.08.21 |
[2020 Hitcon] Discover Vulnerabilities with CodeQL 번역 (0) | 2023.07.25 |
[CVE-2023-0842] xml2js Prototype Pollution (0) | 2023.05.13 |
댓글