CVE-2024-34102
Adobe Commerce and Magento Open Source
2024-07-17
Adobe Commerce and Magento Open Source contain an improper restriction of XML external entity reference (XXE) vulnerability that allows for remote code execution.
Технический анализ и план устранения
Суть уязвимости
CVE-2024-34102 (известная как CosmicSting) представляет собой критическую уязвимость типа XML External Entity (XXE) Injection. Проблема возникает из-за небезопасной конфигурации парсера XML в библиотеке libxml2, используемой в Adobe Commerce и Magento.
Злоумышленник может отправить специально сформированный XML-запрос к API-эндпоинтам (например, /rest/V1/guest-carts/ или /rest/all/V1/shipping-information), что позволяет считывать произвольные файлы с сервера, включая конфигурационные файлы env.php. Получение ключа шифрования из env.php позволяет атакующему подделать JWT-токены администратора, что в конечном итоге ведет к полному удалению или захвату данных и удаленному выполнению кода (RCE).
Как исправить
Основным способом устранения является обновление системы до актуальных версий, в которых исправлена логика обработки XML-сущностей.
-
Определите текущую версию Adobe Commerce или Magento Open Source.
-
Обновите систему до одной из следующих версий (или выше):
- Adobe Commerce: 2.4.7-p1, 2.4.6-p6, 2.4.5-p8, 2.4.4-p9
- Magento Open Source: 2.4.7-p1, 2.4.6-p6, 2.4.5-p8, 2.4.4-p9
-
B2B для Adobe Commerce: 1.4.2, 1.3.7, 1.2.8
-
Для обновления используйте Composer:
composer require-root-package magento/product-community-edition 2.4.7-p1 --no-update
composer update
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
- Если полное обновление невозможно, примените официальный патч безопасности (Isolated Patch) через утилиту
magento/quality-patches.
Временные меры
Если вы не можете немедленно произвести обновление, необходимо применить следующие защитные меры для снижения риска эксплуатации:
- Обновите конфигурацию PHP, чтобы предотвратить загрузку внешних сущностей на уровне интерпретатора. Добавьте или измените следующие параметры в
php.ini:
libxml_disable_entity_loader = 1
- Настройте правила фильтрации на уровне Web Application Firewall (WAF) или Nginx для блокировки подозрительных POST-запросов к REST API, содержащих XML-структуры с объявлением
DOCTYPEилиENTITY. Пример правила для Nginx:
if ($request_body ~* "<!ENTITY") { return 403; }
-
Ограничьте доступ к API-эндпоинтам
/rest/V1/guest-carts/и/rest/all/V1/shipping-informationтолько для доверенных IP-адресов, если это не нарушает бизнес-логику фронтенда. -
После установки патчей или обновления системы рекомендуется принудительно сменить ключи шифрования в
app/etc/env.phpи перегенерировать все сессии администраторов, так как они могли быть скомпрометированы до момента исправления.