CVE-2022-26352
dotCMS dotCMS
2022-08-25
dotCMS ContentResource API contains an unrestricted upload of file with a dangerous type vulnerability that allows for directory traversal, in which the file is saved outside of the intended storage location. Exploitation allows for remote code execution.
Технический анализ и план устранения
Суть уязвимости
CVE-2022-26352 представляет собой критическую уязвимость в API-эндпоинте /api/content системы dotCMS. Проблема заключается в недостаточной фильтрации имен файлов при их загрузке через multipart-запрос.
Злоумышленник может использовать последовательности обхода директорий (directory traversal), такие как ../, в параметре имени файла. Это позволяет сохранить произвольный файл (например, JSP-шелл) вне предназначенного для этого хранилища, в частности, в корневой каталог веб-приложения. Результатом эксплуатации является удаленное выполнение произвольного кода (RCE) с правами пользователя, под которым запущен dotCMS.
Как исправить
Основным способом устранения уязвимости является обновление dotCMS до версий, в которых данная ошибка исправлена.
- Определите текущую версию dotCMS.
- Выполните обновление до одной из следующих версий (или более новых):
- 22.03
- 21.06.7
- 5.3.8.10
Инструкции по обновлению:
- Создайте резервную копию базы данных и файловой системы.
- Скачайте соответствующий патч или новую версию с официального сайта dotCMS.
- Остановите сервис dotCMS:
./bin/shutdown.sh
- Примените обновление согласно документации вашей версии.
- Запустите сервис:
./bin/startup.sh
Временные меры
Если немедленное обновление невозможно, необходимо внедрить защитные механизмы на уровне сетевого периметра или конфигурации сервера приложений.
- Настройка Web Application Firewall (WAF):
Настройте правила WAF для блокировки POST-запросов к эндпоинту
/api/content, содержащих в теле запроса (Content-Disposition) последовательности обхода директорий:
..%2f
../
..\
..%5c
- Ограничение доступа на уровне Reverse Proxy (Nginx): Добавьте конфигурацию для фильтрации подозрительных запросов. Пример логики для Nginx:
if ($request_body ~* "filename=.*\\.\\./") {
return 403;
}
- Проверка прав доступа: Убедитесь, что процесс dotCMS запущен от имени пользователя с минимальными привилегиями и не имеет прав на запись в директории, где исполняются скрипты (например, в папки с JSP), за исключением необходимых рабочих каталогов.