Уязвимость заключается в том, что код Ghostscript раскрывает слишком много информации о себе через уведомления об ошибках.
Изучив новый выпуск популярного PDF-интерпретатора Ghostscript, исследователь безопасности Тэвис Орманди (Tavis Ormandy) из Google Project Zero обнаружил частично исправленную уязвимость во всех версиях программы вплоть до 9.26.
Орманди выявил проблему 11 декабря прошлого года в ходе анализа патча, присланного ему разработчиками Ghostscript из компании Artifex. Патч оказался недостаточно эффективным, поэтому исследователь публично сообщил о проблеме только после выхода новой, исправленной версии программы.
Ghostscript представляет собой интерпретатор Postscript и Adobe PDF с открытым исходным кодом, позволяющий пользователям Unix-подобных ОС просматривать PDF-файлы. Уязвимость также затрагивает web-серверы Ghostscript, поскольку такие наборы инструментов, как ImageMagick, используют его для преобразования просматриваемых пользователями PDF-файлов и изображений.
Уязвимость заключается в том, что код Ghostscript раскрывает слишком много информации о себе через уведомления об ошибках, которые могли контролироваться злоумышленником. Проблема связана с подпрограммами, скрытыми в псевдодифференциальных операторах. Для защиты подпрограмм от глаз пользователей они должны помечаться как executeonly. Однако, по словам Орманди, содержимое подпрограмм также должно быть защищено от отображения в обработчиках ошибок. Для этого используется команда odef, превращающая подпрограммы в псевдодифференциальных операторов.
Однако псевдодифференциальные операторы не являются достаточной защитой, отметил исследователь. «Подпрограммы в псевдодифференциальных операторах сами должны быть псевдодифференциальными операторами», - пишет Орманди. Если программист забыл об этом или просто не знал, то операторы все равно могут оказаться в стеке операндов. При наличии в коде ошибки переполнения стека стек операндов будет открыт перед обработчиком ошибок, и его потенциально можно просмотреть и использовать.
Живой, мертвый или в суперпозиции? Узнайте в нашем канале