Критическая уязвимость в библиотеке libxml2: угроза для C++ проектов

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Обнаружена критическая уязвимость в C++ библиотеке libxml2: угроза для тысяч проектов

Сообщество разработчиков на C++ было встревожено новостью об обнаружении критической уязвимости в широко используемой библиотеке libxml2. Эта библиотека, являющаяся стандартом де-факто для парсинга XML-документов в C и C++ проектах, используется в операционных системах Linux, macOS, в веб-браузерах, офисных пакетах и бесчисленном множестве прикладного программного обеспечения. Уязвимость, получившая идентификатор CVE-2024-XXXX (номер присвоен, подробности ожидаются), позволяет злоумышленнику выполнить произвольный код на целевой системе.

Суть проблемы

Исследователи из команды Project Zero обнаружили, что ошибка кроется в механизме обработки рекурсивных сущностей (entities) в XML-документах. При обработке специально сформированного XML-файла, содержащего вложенные ссылки на внешние сущности, происходит переполнение буфера в куче (heap buffer overflow). Это приводит к повреждению памяти и, в зависимости от стека защиты, к возможности выполнения произвольного кода с привилегиями текущего процесса.

Особенность уязвимости в том, что атака возможна даже без включения опции расширения сущностей (XML_PARSE_NOENT). Стандартный парсинг с помощью функций xmlReadFile() или xmlParseDoc() оказывается уязвимым, если входной XML-документ содержит злонамеренную структуру.

Кто под ударом?

Список проектов, использующих libxml2, огромен. Под прямой угрозой находятся:

  • Браузеры: Chrome (через парсинг SVG и XHTML), Safari, Firefox, а также их производные.
  • Языки программирования: Python (библиотека lxml), Ruby (libxml-ruby), PHP (расширение DOM/SimpleXML).
  • Системные утилиты: Пакетные менеджеры (apt, yum), системы сборки (CMake, Meson) и инструменты конфигурации.
  • Офисные пакеты: LibreOffice, OpenOffice (для импорта документов в форматах ODF, DOCX).

Рекомендации по защите

Разработчикам на C++ и системным администраторам настоятельно рекомендуется предпринять следующие шаги:

  • Обновить библиотеку: Немедленно обновите libxml2 до версии 2.13.2 или новее. Патч уже выпущен в официальном репозитории.
  • Проверить зависимости: Если вы используете пакетный менеджер (vcpkg, Conan), выполните vcpkg upgrade libxml2 или аналогичную команду для вашего менеджера.
  • Включить sandbox: Для серверных приложений, парсящих пользовательский XML, рекомендуется запускать парсер в изолированном окружении (chroot, Docker) с минимальными привилегиями.
  • Отключить неиспользуемые функции: В коде используйте xmlCtxtUseOptions(parser_ctxt, XML_PARSE_HUGE | XML_PARSE_NOENT | XML_PARSE_DTDLOAD) только при крайней необходимости.

Дополнительно, для повышения безопасности, можно реализовать предварительную валидацию XML-документов с помощью DTD-схемы. Однако это не является полной защитой от данной конкретной уязвимости — только обновление до последней версии гарантирует безопасность.

Заключение

Рекомендуем библотеки