CVE-2024-11680
ProjectSend ProjectSend
2024-12-03
ProjectSend contains an improper authentication vulnerability that allows a remote, unauthenticated attacker to enable unauthorized modification of the application's configuration via crafted HTTP requests to options.php. Successful exploitation allows attackers to create accounts, upload webshells, and embed malicious JavaScript.
Технический анализ и план устранения
Суть уязвимости
CVE-2024-11680 представляет собой критическую уязвимость обхода аутентификации в файле options.php программного обеспечения ProjectSend. Проблема заключается в отсутствии проверки прав доступа и сессии пользователя перед обработкой POST-запросов.
Дистанционный неавторизованный злоумышленник может отправить специально сформированный HTTP-запрос, который позволяет изменять глобальные настройки приложения. Это открывает следующие векторы атаки: * Включение свободной регистрации пользователей (позволяет создать аккаунт администратора). * Изменение списка разрешенных расширений файлов для загрузки (позволяет загрузить PHP-webshell). * Внедрение произвольного JavaScript-кода в поля конфигурации (Stored XSS).
Как исправить
Основным способом устранения является обновление ProjectSend до версии r1720 или выше, где была добавлена проверка авторизации для доступа к конфигурационным файлам.
- Сделайте резервную копию базы данных и файлов приложения.
- Скачайте последнюю версию с официального репозитория GitHub или сайта проекта.
- Замените файлы текущей установки новыми файлами из архива.
- Если обновление невозможно, необходимо вручную отредактировать файл
options.php, добавив проверку прав в начало файла:
/**
* Проверка, что пользователь авторизован и является администратором
*/
require_once('sys.includes.php');
if (!$auth->is_admin()) {
exit;
}
Временные меры
Если вы не можете немедленно обновить систему, примените следующие меры для ограничения доступа к уязвимому компоненту:
- Ограничьте доступ к файлу
options.phpна уровне веб-сервера (Nginx/Apache), разрешив его только с доверенных IP-адресов администраторов.
Пример для Nginx:
location = /options.php {
allow 192.168.1.100;
deny all;
proxy_pass http://backend;
}
Пример для Apache (.htaccess):
<Files "options.php">
Order Deny,Allow
Deny from all
Allow from 192.168.1.100
</Files>
- Установите запрет на запись в файл конфигурации
sys.config.phpна уровне файловой системы, чтобы предотвратить его перезапись через веб-интерфейс:
chmod 444 sys.config.php
- Проверьте логи веб-сервера на наличие подозрительных POST-запросов к
options.phpот неавторизованных пользователей.