
Эксплойт для проверки концепции для CVE-2025-53367, уязвимости в библиотеке DjVuLibre. Демонстрирует эксплуатацию ошибки повреждения памяти при обработке документов DjVu.
DjVu (произносится "дежа вю") — это набор технологий сжатия, формат файлов и программная платформа для доставки через Интернет цифровых документов, отсканированных документов и изображений с высоким разрешением.
Документы DjVu загружаются и отображаются чрезвычайно быстро и выглядят одинаково на всех платформах. DjVu можно считать превосходной альтернативой PDF и PostScript для цифровых документов, TIFF (и PDF) для отсканированных документов, JPEG для фотографий и изображений, а также GIF для изображений с большой палитрой. DjVu — единственный веб-формат, который практичен для распространения цветных отсканированных документов с высоким разрешением. Ни один другой формат не приближается к нему.
Типичные размеры файлов DjVu следующие:
Битональные отсканированные документы: 5–30 КБ на страницу при 300 dpi, 3–10 раз меньше, чем PDF или TIFF.
Цветные отсканированные документы: 30–100 КБ на страницу при 300 dpi, 5–10 раз меньше, чем JPEG.
Фотографии: 2 раза меньше, чем JPEG, примерно столько же, сколько JPEG-2000.
Изображения с палитрой: 2 раза меньше, чем GIF, до 10 раз, если есть текст.
DjVu используется сотнями коммерческих, государственных и некоммерческих веб-сайтов по всему миру для распространения отсканированных документов, цифровых документов и фотографий высокого разрешения.
Демонстрации и общая информация о DjVu доступны по адресу http://www.djvuzone.org или http://www.lizardtech.com.
DjVu был первоначально разработан в AT&T Labs-Research. AT&T продала DjVu компании LizardTech Inc. в марте 2000 года.
В рамках усилий по продвижению DjVu как веб-стандарта руководство LizardTech проявило достаточную проницательность, чтобы выпустить эталонную реализацию DjVu под лицензией GNU GPL в октябре 2000 года. DjVuLibre (произносится как французское "déjà vu libre") — это улучшенная версия этого кода, поддерживаемая первоначальными изобретателями DjVu. Она совместима с программным обеспечением LizardTech DjVu версии 3.5.
Этот пакет включает:
Полноценный просмотрщик файлов DjVu и плагин для браузера DjView4 доступны в виде отдельного пакета.
DjVuLibre-3.5 полагается на различные компоненты, доступные в Интернете. Большинство современных дистрибутивов Linux уже содержат их. Вы также можете загрузить и скомпилировать их, если хотите. Обязательно прочитайте примечания, специфичные для системы, в конце этого файла.
КОМПИЛЯТОР -- Разработка ведется с помощью компилятора GCC g++, который поэтому рекомендуется для всех платформ. Компилятор CLANG был опробован и, похоже, работает, но его результаты не были серьезно протестированы.
LIBJPEG/LIBTIFF -- Небольшое количество файлов DjVu внутренне используют кодировку JPEG вместо вейвлет-кодировки IW44. Эти файлы обрабатываются с помощью либо версии 6a, либо 6b библиотеки IJG libjpeg http://www.ijg.org. Некоторые служебные программы могут читать файлы TIFF. Эти программы полагаются на библиотеку LIBTIFF http://libtiff.org. Вы также можете скомпилировать DjVuLibre без поддержки ни JPEG, ни TIFF. Вы, возможно, никогда не заметите разницы.
Вероятно, все будет работать при простом выполнении команд "./configure", "make" и "make install".
Обратите внимание, что файла configure не будет, если вы получили исходный код djvulibre через git clone. Вместо этого есть скрипт 'autogen.sh', который использует automake для генерации и вызова реального скрипта configure. Поскольку все аргументы autogen.sh передаются configure, вы можете просто обращаться с autogen.sh как с заменой configure.
Различные опции и переменные окружения влияют на выполнение скрипта конфигурации. Полный список можно получить, набрав "configure --help". Также смотрите файл INSTALL для получения дополнительных сведений. Вот наиболее важные из них.
Опция "--prefix=PREFIXDIR" Эта опция указывает, куда будет установлено программное обеспечение DjVuLibre. Префикс по умолчанию — /usr/local.
Опция "--enable-desktopfiles[=(yes|no)]" Устанавливает файлы значков и типов MIME в стандартных каталогах xdg. Значение по умолчанию — "yes".
Опция "--with-jpeg=JPEGDIR" Эта опция указывает каталог, в котором была скомпилирована библиотека JPEG. Этот каталог содержит как заголовочные файлы, так и библиотеку. Без этой опции скрипт конфигурации будет искать библиотеку JPEG в стандартных местах. Если ничего не помогает, вы можете просто определить переменные окружения JPEG_CFLAGS и JPEG_LIBS.
Опция "--with-tiff=TIFFDIR" Эта опция указывает каталог, в котором была скомпилирована библиотека LIBTIFF. Этот каталог содержит как заголовочные файлы, так и библиотеку. Без этой опции скрипт конфигурации будет искать библиотеку LIBTIFF в стандартных местах. Если ничего не помогает, вы можете просто определить переменные окружения TIFF_CFLAGS и TIFF_LIBS.
Всегда проверяйте вывод скрипта конфигурации на предмет предупреждений и ошибок. В частности, скрипт конфигурации может отключить компиляцию djview, если не сможет найти необходимые библиотеки и утилиты. Сообщения с предупреждениями — единственный способ узнать об этом.
Затем вы можете выполнить компиляцию, набрав
$ make
Компиляция может занять несколько минут. Снова проверьте вывод на предмет предупреждений и ошибок. Наконец, краткое сообщение сообщит вам, что компиляция прошла успешно. Затем вы можете перейти к установке.
Набрав:
$ make install
или, если необходимо:
$ sudo make install
должно:
Где ${prefix} относится к каталогу, указанному опцией prefix скрипта конфигурации, которая по умолчанию равна "/usr/local", и указанные выше пути можно точно настроить с помощью соответствующих аргументов для ./configure и make.
Мы рекомендуем сначала установить homebrew и использовать команду "brew install" для получения следующих пакетов: $ brew install autoconf automake libtool pkg-config $ brew install jpeg libtiff
Обратите внимание, что homebrew уже содержит пакет djvulibre. Следующие инструкции объясняют, как скомпилировать djvulibre автономно. Возможно, вам захочется сделать это, если вам нужна последняя версия djvulibre. В противном случае, скорее всего, вам следует просто установить пакет djvulibre через homebrew. $ brew install djvulibre
Но большинству людей должно быть достаточно просто установить пакет homebrew.
Затем вы можете запустить configure $ ./configure --disable-desktopfiles
Затем вы можете скомпилировать с помощью $ make
Выполнение "make install" установит djvulibre в каталог /usr/local. Это может быть не самой хорошей идеей, так как они будут мешать homebrew. Вместо этого вы можете указать альтернативный каталог с помощью DESTDIR=... $ make install DESTDIR=/usr/local/djvulibre-install
Смотрите каталог win32. Заполните каталоги zlib, jpeg и tiff открытым исходным кодом, предложенным в файлах README. Проверьте win32/djvulibre/dirs.props, чтобы увидеть, как называть каталоги. Затем откройте win32/djvulibre/djvulibre.sln и скомпилируйте.
Следующим шагом будет следование инструкциям в пакете djview для создания проекта djview и добавления его в это решение. Наконец, вы можете использовать скрипт djvulibre-install.sh и djvulibre.nsi для подготовки установщика djvulibre+djview.
Сначала необходимо установить компилятор mingw и среду msys. Смотрите www.mingw.org для получения дополнительной информации. Из оболочки msys выполните обычные команды $ configure $ make Затем соберите DLL djvulibre из каталога libdjvu/.libs и исполняемые файлы из каталога tools/.libs Пожалуйста, обратитесь к файлу INSTALL для получения информации об аргументах скрипта 'configure'.
Просто выполните обычные команды $ configure $ make $ make install Пожалуйста, обратитесь к файлу INSTALL для получения информации об аргументах скрипта 'configure'.