Однако... в августе этого года в HashiCorp Vault было обнаружено 9 уязвимостей, одна из которых (CVE-2025-6000) критическая (score 9.1). И это первая в истории публично задокументированная RCE-уязвимость в HashiCorp Vault, просуществовавшая 9 лет до исправления.
Уязвимость позволяет привилегированному оператору Vault создать подконтрольный файл аудита и зарегистрировать его как плагин, чтобы получить возможность выполнения произвольного кода.
Для эксплуатации нужно:
0. Иметь root токен. Его получение выходит за рамки данной статьи, однако стоит упомянуть, что связка нескольких CVE даёт возможность это сделать: CVE-2025-6037 позволяет имперсонироваться через уязвимость проверки сертификатов, CVE-2025-5999 позволяет повысить привилегии до root.
Условие является необходимым, так как для создания аудита и регистрации плагина обычно нужны привилегии root.
1. Определить директорию с плагинами. При попытке загрузить несуществующий файл эндпоинт возвращает сообщение об ошибке, которое содержит полный путь к директории. Достаточно отправить
POST /v1/sys/plugins/catalog/non_existing_name
и в ответ получить
1 error occurred:\n\t* failed to verify plugin plugin \"non_existing_name\" version \"v1.0.0\": extracted artifact directory not found: /home/vault/vault_plugins/non_existing_name_1.0.0_linux_amd64\n\n
Полный путь до директории плагинов нужен для записи файла аудита в эту директорию. А запись именно в этот каталог необходима для последующей загрузки файла в качестве плагина. Плагины могут быть загружены только из этой директории.
2. Записать файл аудита в каталог плагинов. Для этого зарегистрировать аудит с такими параметрами:
file_path (путь к файлу аудита) = "/home/vault/vault_plugins/script.sh" Указывается директория с плагинами из предыдущего шага.
mode (права на файл аудита) = "0755" Файл аудита должен быть исполняемым (rwxr-xr-x)
prefix (префикс будет добавлен перед каждым логом) = "#!/bin/bash\n(some bash payload)" Эта часть содержит наш пейлоад. Содержимое префикса будет выполняться при загрузке плагина.
3. Зарегистрировать плагин. Для регистрации плагина необходимо указать его sha256, однако тут есть загвоздка: лог аудита содержит различные временные метки, а также хэшированные данные, предсказать которые практически невозможно. Поэтому для получения точной копии лога аудита, можно предварительно зарегистрировать еще один аудит, транслирующий логи на подконтрольный нам сокет. В этом случае добавляется шаг по удалению аудита с префиксом перед подсчетом sha256.
После регистрации исполняемого файла в качестве плагина, он выполняется от имени пользователя vault.
Как обнаружить эксплуатацию CVE-2025-6000:
1. Корреляция событий из шагов выше явно укажет на попытку эксплуатации:
- Попытка регистрации несуществующего плагина;
- Cоздание аудита с указанием prefix и mode;
- Удаление недавно созданного аудита (также рекомендуем мониторить удаление аудита в принципе, так как это событие само по себе должно вызывать подозрения);
- Регистрация подозрительного плагина.
2. Отслеживайте аномалии в цепочках процессов от vault. Например, запуск скриптов.
Методы защиты:
Уязвимость CVE-2025-6000 исправлена в Vault Community Edition 1.20.1 и Vault Enterprise 1.20.1, 1.19.7, 1.18.12 и 1.16.23.
Поэтому стоит обновиться до этих версий. В исправленных версиях аудит с префиксом требует явного указания в конфигурации vault, а также аудит не может использовать файлы с правами на выполнение (0777, 0755 и т.д.) и не может быть записан в директорию плагинов.
