A PHP object injection (POI) vulnerability is a security-critical bug that allows the remote code execution of class methods existing in a vulnerable PHP application. Exploiting this vulnerability often requires laborious property-oriented programming to shape an injection object. Existing off-the-shelf testing tools only focus on identifying potential POI vulnerabilities and fail to report exploit objects. We design and implement FUGIO, the first automatic exploit generation (AEG) tool for POI vulnerabilities. FUGIO conducts a coarse-grained static analysis and a dynamic program analysis, generating a list of gadget chains, which serve as the blueprints for exploit objects. FUGIO then runs fuzzing campaigns using these identified chains and produces exploit objects. FUGIO generated 53 exploit objects from 11 applications containing known POI vulnerabilities with zero false positive. FUGIO also found two previously unreported POI vulnerabilities with two exploit objects, thereby demonstrating its efficacy in generating functional exploits.
PHP 객체 주입 취약점 (POI) 은 공격자가 취약한 PHP 애플리케이션에 존재하는 클래스 메서드의 코드를 실행할 수 있도록 하는 보안에 중요한 버그이다. 이 취약점을 악용하기 위해서는 속성 지향 프로그래밍을 통해 주입할 객체를 생성해야 한다. 기존 도구들은 PHP 객체 주입 취약점을 식별하는 데만 초점을 두고 익스플로잇 객체를 보고하지는 않았다. 본 논문에서는 POI 취약점을 위한 최초의 자동 익스플로잇 생성 도구인 FUGIO를 설계하고 구현한다. FUGIO는 대략적인 정적 분석과 동적 분석을 통해 악용 객체의 청사진 역할을 하는 가젯 체인들을 식별한다. 그 후, FUGIO는 식별된 체인을 퍼징하여 익스플로잇 객체를 생성한다. FUGIO는 11개의 애플리케이션에서 53개의 익스플로잇 객체를 오탐없이 생성했다. 또한, FUGIO는 두 개의 최신 애플리케이션에서 이전에 보고되지 않은 POI 취약점을 탐지해 익스플로잇 객체를 생성했으며 이로써 익스플로잇 생성 기능의 효과를 입증했다.