
Exploit de prova de conceito para CVE-2025-53367, uma vulnerabilidade na biblioteca DjVuLibre. Demonstra a exploração de um bug de corrupção de memória no processamento de documentos DjVu.
DjVu (pronunciado "déjà vu") é um conjunto de tecnologias de compressão, um formato de arquivo, e uma plataforma de software para entrega via Web de documentos digitais, documentos digitalizados e imagens de alta resolução.
Os documentos DjVu baixam e são exibidos extremamente rápido, e têm exatamente a mesma aparência em todas as plataformas. DjVu pode ser visto como uma alternativa superior ao PDF e Postscript para documentos digitais, ao TIFF (e PDF) para documentos digitalizados, ao JPEG para fotografias e imagens, e ao GIF para imagens com paletas grandes. DjVu é o único formato Web prático para distribuir documentos digitalizados de alta resolução em cores. Nenhum outro formato chega perto.
Os tamanhos típicos de arquivos DjVu são os seguintes:
Documentos digitalizados bitonais: 5 a 30 KB por página a 300 dpi, 3 a 10 vezes menores que PDF ou TIFF.
Documentos digitalizados coloridos: 30 a 100 KB por página a 300 dpi, 5 a 10 vezes menores que JPEG.
Fotos: 2 vezes menores que JPEG, aproximadamente o mesmo que JPEG-2000.
Imagens com paletas: 2 vezes menores que GIF, até 10 vezes se houver texto.
DjVu é usado por centenas de sites comerciais, governamentais e não comerciais em todo o mundo para distribuir documentos digitalizados, documentos digitais e fotos de alta resolução.
Demos e informações gerais sobre DjVu podem ser encontradas em http://www.djvuzone.org, ou em http://www.lizardtech.com.
DjVu foi originalmente desenvolvido no AT&T Labs-Research. A AT&T vendeu o DjVu para LizardTech Inc. em março de 2000.
Em um esforço para promover DjVu como um padrão Web, a administração da LizardTech foi iluminada o suficiente para liberar a implementação de referência do DjVu sob a GNU GPL em outubro de 2000. DjVuLibre (pronunciado como o francês "déjà vu libre"), é uma versão aprimorada desse código mantida pelos inventores originais do DjVu. É compatível com o software DjVu v3.5 da LizardTech.
Este pacote inclui:
O visualizador de arquivos DjVu completo e plugin para navegador, DjView4, está disponível como um pacote separado.
DjVuLibre-3.5 depende de vários componentes disponíveis na web. A maioria das distribuições Linux recentes já vem com eles. Você também pode baixá-los e compilá-los, se desejar. Certifique-se de ler as notas específicas do sistema no final deste arquivo.
COMPILADOR -- O desenvolvimento é feito com o compilador GCC g++, que é, portanto, recomendado para todas as plataformas. O compilador CLANG foi testado e parece funcionar, mas sua saída não foi seriamente testada.
LIBJPEG/LIBTIFF -- Um pequeno número de arquivos DjVu usa internamente a codificação JPEG em vez da codificação wavelet IW44. Esses arquivos são processados usando a versão 6a ou 6b da biblioteca IJG libjpeg http://www.ijg.org. Alguns programas utilitários são capazes de ler arquivos TIFF. Esses programas dependem da biblioteca LIBTIFF http://libtiff.org. Você também pode compilar o DjVuLibre sem suporte a JPEG ou TIFF. Você pode nunca notar a diferença.
Provavelmente tudo funcionará simplesmente executando os comandos "./configure", "make" e "make install".
Observe que não haverá arquivo configure se você obtiver o código-fonte do djvulibre usando git clone. Em vez disso, há um script 'autogen.sh' que usa automake para gerar e chamar o script configure real. Como todos os argumentos do autogen.sh serão passados para o configure, você pode simplesmente tratar o autogen.sh como um substituto para o configure.
Várias opções e variáveis de ambiente afetam a execução do script de configuração. Uma lista completa pode ser obtida digitando "configure --help". Consulte também o arquivo INSTALL para mais detalhes. Aqui estão as mais importantes.
Opção "--prefix=PREFIXDIR" Esta opção especifica onde o software DjVuLibre será instalado. O prefixo padrão é /usr/local.
Opção "--enable-desktopfiles[=(yes|no)]" Instala arquivos de ícone e tipo MIME nos diretórios xdg habituais. O padrão é "yes".
Opção "--with-jpeg=JPEGDIR" Esta opção especifica um diretório onde a biblioteca JPEG foi compilada. Este diretório contém tanto os arquivos de inclusão quanto a biblioteca. Sem esta opção, o script de configuração procurará a biblioteca JPEG em locais padrão. Quando tudo mais falhar, você pode simplesmente definir as variáveis de ambiente JPEG_CFLAGS e JPEG_LIBS.
Opção "--with-tiff=TIFFDIR" Esta opção especifica um diretório onde a biblioteca LIBTIFF foi compilada. Este diretório contém tanto os arquivos de inclusão quanto a biblioteca. Sem esta opção, o script de configuração procurará a biblioteca LIBTIFF em locais padrão. Quando tudo mais falhar, você pode simplesmente definir as variáveis de ambiente TIFF_CFLAGS e TIFF_LIBS.
Sempre verifique a saída do script de configuração em busca de avisos e erros. Em particular, o script de configuração pode desabilitar a compilação do djview se não conseguir localizar as bibliotecas e utilitários necessários. As mensagens de aviso são a única maneira de saber.
Você pode então realizar a compilação digitando
$ make
A compilação pode durar alguns minutos. Verifique novamente a saída em busca de avisos e erros. Finalmente, uma breve mensagem informa que a compilação foi bem-sucedida. Você pode então prosseguir com a instalação.
Digitando:
$ make install
ou se necessário:
$ sudo make install
deve:
Onde ${prefix} se refere ao diretório especificado pela opção prefix do script de configuração, que padroniza para "/usr/local", e os caminhos acima podem ser ajustados usando argumentos apropriados para ./configure e make.
Recomendamos que você primeiro instale o homebrew e use o comando "brew install" para obter os seguintes pacotes: $ brew install autoconf automake libtool pkg-config $ brew install jpeg libtiff
Observe que o homebrew já vem com um pacote djvulibre. As instruções a seguir explicam como compilar o djvulibre de forma independente. Você pode querer fazer isso se quiser a versão mais recente do djvulibre. Caso contrário, é provável que você deva apenas instalar o pacote djvulibre do homebrew. $ brew install djvulibre
Mas a maioria das pessoas achará suficiente apenas instalar o pacote homebrew.
Então você pode executar o configure $ ./configure --disable-desktopfiles
Então você pode compilar com $ make
Executar "make install" instalará o djvulibre no diretório /usr/local. Isso pode não ser uma boa ideia, pois eles interferirão com o homebrew. Você pode, em vez disso, especificar um diretório alternativo com DESTDIR=... $ make install DESTDIR=/usr/local/djvulibre-install
Veja o diretório win32. Preencha os diretórios zlib, jpeg e tiff com o código-fonte aberto sugerido nos arquivos README. Verifique win32/djvulibre/dirs.props para ver como nomear os diretórios. Então abra win32/djvulibre/djvulibre.sln e compile.
O próximo passo seria seguir as instruções no pacote djview para criar um projeto djview e adicioná-lo a esta solução. Finalmente, você pode usar o script djvulibre-install.sh e djvulibre.nsi para preparar o instalador djvulibre+djview.
Você deve primeiro instalar o compilador mingw e o ambiente msys. Veja www.mingw.org para mais informações. A partir do shell msys, execute os comandos usuais $ configure $ make Então colete a DLL djvulibre do diretório libdjvu/.libs e os executáveis do diretório tools/.libs Consulte o arquivo INSTALL para obter informações sobre os argumentos do script 'configure'.
Simplesmente execute os comandos usuais $ configure $ make $ make install Consulte o arquivo INSTALL para obter informações sobre os argumentos do script 'configure'.