Unrestricted File Upload (UFU) vulnerability is a critical security threat that enables an adversary to upload her choice of a forged file to a target Web server. This uploaded file poses a potential security threat, which the adversary abuses as a stepping-stone to compromise the target server. Furthermore, this bug evolves into an Unrestricted Executable File Upload (UEFU) vulnerability when the adversary is able to conduct remote code execution of this uploaded file via triggering its URL. We design and implement FUSE, the first penetration testing tool designed to discover UFU and UEFU vulnerabilities in server-side PHP Web applications. The goal of FUSE is to generate upload requests; each request becomes an exploit payload that triggers a UFU or UEFU vulnerability. However, this approach entails two technical challenges: (1) it should generate an upload request that bypasses all content filtering checks present in a target Web application; and (2) it should preserve the execution semantic of the resulting uploaded file. We address these technical challenges by mutating standard upload requests with carefully designed mutation operations that enable bypassing content filtering checks and do not tamper with the execution of uploaded files. FUSE discovered 30 previously unreported UEFU vulnerabilities, including 15 CVEs from 33 real-world Web applications.
제한 없는 파일 업로드 취약점 (Unrestricted File Upload, UFU)은 공격자가 임의로 생성한 파일을 대상 웹 서버에 업로드하는 것을 허용하는 버그이다. 업로드된 파일은 대상 웹 서버를 침해하기 위한 디딤돌이 될 수 있으며, URL을 통해 그 파일을 실행시키는 제한 없는 실행 가능한 파일 업로드 취약점 (Unrestricted Executable File Upload, UEFU)로 발전할 수 있다. 본 논문에서는 모의침투 방식으로 PHP 애플리케이션 의 UFU 및 UEFU 취약점을 탐색하는 도구인 FUSE를 처음 설계 및 구현하여 소개한다. FUSE의 목표는 UFU 또는 UEFU 취약점을 발생시키는 HTTP 요청을 생성하는 것이다. 하지만, 이런 접근은 다음 두 가 지 기술적 문제를 수반한다: 업로드 요청이 (1) 대상 웹 애플리케이션에 구현된 모든 콘텐츠 검증 로직을 우회해야 하고, (2) 그 결과로 업로드된 파일의 실행 가능성이 보존되어야 한다. 본 논문에서는 FUSE의 이러한 문제들을 고려한 변형 명령을 설계 및 이용하여 일반적인 파일 업로드 요청을 생성하였다. FUSE 는 33개의 실제 사용되는 PHP 애플리케이션에서 15개의 CVE 번호를 부여받은 취약점을 포함한 30개의 새로운 UEFU 취약점을 발견하였다.