В офисном пакете Apache OpenOffice выявлена уязвимость (CVE-2021-33035), позволяющая добиться выполнения кода при открытии специально оформленного файла в формате DBF. Выявивший проблему исследователь предупредил о создании рабочего эксплоита для платформы Windows. Исправление уязвимости пока доступно только в форме патча в репозитории проекта, который вошёл в состав тестовых сборок OpenOffice 4.1.11. Обновления для стабильной ветки пока не сформировано.
Проблема вызвана тем, что при выделении памяти OpenOffice полагался на значения fieldLength и fieldType в заголовке файлов DBF, не проверяя при этом соответствие фактического типа данных в полях. Для совершения атаки можно указать в значении fieldType тип INTEGER, но разместить данные большего размера и указать значение fieldLength не соответствующее размеру данных c типом INTEGER, что приведёт к тому, что хвост данных из поля будет записан за пределы выделенного буфера. В результате контролируемого переполнения буфера исследователю удалось переопределить указатель возврата из функции и при помощи приёмов возвратно-ориентированного программирования (ROP – Return-Oriented Programming) добиться выполнения своего кода.
При использовании техники ROP атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися в загруженных библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления (как правило, это окончания библиотечных функций). Работа эксплоита сводится к построению цепочки вызовов подобных блоков (“гаджетов”) для получения нужной функциональности. В качестве гаджетов в эксплоите для
OpenOffice использовался код из используемой в OpenOffice библиотеки libxml2, которая в отличие от самого OpenOffice оказалась собрана без механизмов защиты DEP (Data Execution Prevention) и ASLR (Address Space Layout Randomization).
Разработчики OpenOffice были уведомлены о проблеме 4 мая, после чего на 30 августа было назначено публичное раскрытие сведений об уязвимости. Так как к намеченному сроку обновление стабильной ветки так и не было сформировано, исследователь перенёс раскрытие деталей на 18 сентября, но разработчики OpenOffice не успели сформировать релиз 4.1.11 и к этому сроку. Примечательно, что в ходе того же исследования была выявлена похожая уязвимость в коде поддержки формата DBF в Microsoft Office Access (CVE-2021–38646), детали о которой будут раскрыты позднее. В LibreOffice проблем не найдено.