
Exploit di prova di concetto per CVE-2025-53367, una vulnerabilità nella libreria DjVuLibre. Dimostra lo sfruttamento di un bug di corruzione della memoria nell'elaborazione dei documenti DjVu.
DjVu (pronunciato "déjà vu") è un insieme di tecnologie di compressione, un formato file, e una piattaforma software per la distribuzione sul Web di documenti digitali, documenti scansionati e immagini ad alta risoluzione.
I documenti DjVu vengono scaricati e visualizzati molto rapidamente, e appaiono esattamente uguali su tutte le piattaforme. DjVu può essere considerato un'alternativa superiore a PDF e Postscript per documenti digitali, a TIFF (e PDF) per documenti scansionati, a JPEG per fotografie e immagini, e a GIF per immagini con palette estese. DjVu è l'unico formato Web che è pratico per distribuire documenti scansionati ad alta risoluzione a colori. Nessun altro formato si avvicina.
Le dimensioni tipiche dei file DjVu sono le seguenti:
Documenti scansionati bitonali: 5-30 KB per pagina a 300 dpi, 3-10 volte più piccoli di PDF o TIFF.
Documenti scansionati a colori: 30-100 KB per pagina a 300 dpi, 5-10 volte più piccoli di JPEG.
Foto: 2 volte più piccole di JPEG, più o meno come JPEG-2000.
Immagini con palette: 2 volte più piccole di GIF, fino a 10 volte se è presente del testo.
DjVu è utilizzato da centinaia di siti web commerciali, governativi e non commerciali in tutto il mondo per distribuire documenti scansionati, documenti digitali e foto ad alta risoluzione.
Demo e informazioni generali su DjVu sono disponibili su http://www.djvuzone.org, o su http://www.lizardtech.com.
DjVu è stato originariamente sviluppato presso i laboratori di ricerca AT&T. AT&T ha venduto DjVu a LizardTech Inc. nel marzo 2000.
Nel tentativo di promuovere DjVu come standard Web, la dirigenza di LizardTech fu abbastanza illuminata da rilasciare l'implementazione di riferimento di DjVu sotto la GNU GPL nell'ottobre 2000. DjVuLibre (pronunciato come il francese "déjà vu libre"), è una versione migliorata di quel codice mantenuta dagli inventori originali di DjVu. È compatibile con il software DjVu di LizardTech v3.5.
Questo pacchetto include:
Il visualizzatore completo di file DjVu e plugin per browser DjView4 è disponibile come pacchetto separato.
DjVuLibre-3.5 si basa su vari componenti disponibili sul web.
La maggior parte delle distribuzioni Linux recenti li includono già.
Puoi anche scaricarli e compilarli se lo desideri.
Assicurati di leggere le note specifiche per sistema
alla fine di questo file.
COMPILATORE -- Lo sviluppo è fatto con il compilatore GCC g++, che è quindi raccomandato per tutte le piattaforme. Il compilatore CLANG è stato provato e sembra funzionare, ma il suo output non è stato seriamente testato.
LIBJPEG/LIBTIFF --
Un piccolo numero di file DjVu utilizza internamente la codifica JPEG invece
della codifica wavelet IW44. Questi file vengono elaborati utilizzando la
versione 6a o 6b della libreria IJG libjpeg http://www.ijg.org.
Alcuni programmi di utilità sono in grado di leggere file TIFF. Questi programmi
si basano sulla libreria LIBTIFF http://libtiff.org.
Puoi anche compilare DjVuLibre senza supporto né JPEG né TIFF.
Potresti non notare mai la differenza.
È probabile che tutto funzioni semplicemente eseguendo i comandi "./configure", "make" e "make install".
Nota che non ci sarà un file configure se ottieni il sorgente di djvulibre usando git clone. Invece c'è uno script 'autogen.sh' che usa automake per generare e chiamare lo script configure vero e proprio. Poiché tutti gli argomenti di autogen.sh verranno passati a configure, puoi semplicemente trattare autogen.sh come un sostituto di configure.
Varie opzioni e variabili d'ambiente influenzano l'esecuzione dello script di configurazione. È possibile ottenere un elenco completo digitando "configure --help". Vedi anche il file INSTALL per ulteriori dettagli. Ecco le più importanti.
Opzione "--prefix=PREFIXDIR" Questa opzione specifica dove verrà installato il software DjVuLibre. Il prefisso predefinito è /usr/local.
Opzione "--enable-desktopfiles[=(yes|no)]" Installa i file di icone e tipi mime nelle directory xdg consuete. Il valore predefinito è "yes".
Opzione "--with-jpeg=JPEGDIR" Questa opzione specifica una directory in cui è stata compilata la libreria JPEG. Questa directory contiene sia i file include che la libreria. Senza questa opzione, lo script di configurazione cercherà la libreria JPEG nelle posizioni standard. Quando tutto il resto fallisce, puoi semplicemente definire le variabili d'ambiente JPEG_CFLAGS e JPEG_LIBS.
Opzione "--with-tiff=TIFFDIR" Questa opzione specifica una directory in cui è stata compilata la libreria LIBTIFF. Questa directory contiene sia i file include che la libreria. Senza questa opzione, lo script di configurazione cercherà la libreria LIBTIFF nelle posizioni standard. Quando tutto il resto fallisce, puoi semplicemente definire le variabili d'ambiente TIFF_CFLAGS e TIFF_LIBS.
Controlla sempre l'output dello script di configurazione per avvisi ed errori. In particolare, lo script di configurazione potrebbe disabilitare la compilazione di djview se non riesce a localizzare le librerie e utilità richieste. I messaggi di avviso sono l'unico modo per saperlo.
Puoi quindi eseguire la compilazione digitando
$ make
La compilazione può durare alcuni minuti. Controlla di nuovo l'output per avvisi ed errori. Infine un breve messaggio ti informa che la compilazione è riuscita. Puoi quindi procedere con l'installazione.
Digitando:
$ make install
o se necessario:
$ sudo make install
dovrebbe:
Dove ${prefix} si riferisce alla directory specificata dall'opzione prefix dello script di configurazione, che per default è "/usr/local", e i percorsi sopra possono essere perfezionati usando argomenti appropriati per ./configure e make.
Raccomandiamo di installare prima homebrew e usare il comando "brew install" per ottenere i seguenti pacchetti: $ brew install autoconf automake libtool pkg-config $ brew install jpeg libtiff
Nota che homebrew ha già un pacchetto djvulibre. Le seguenti istruzioni spiegano come compilare djvulibre in modo standalone. Potresti volerlo fare se desideri l'ultima versione di djvulibre. Altrimenti, è probabile che dovresti semplicemente installare il pacchetto homebrew di djvulibre. $ brew install djvulibre
Ma la maggior parte delle persone dovrebbe trovare sufficiente installare semplicemente il pacchetto homebrew.
Poi puoi eseguire configure $ ./configure --disable-desktopfiles
Poi puoi compilare con $ make
Eseguire "make install" installerà djvulibre nella directory /usr/local. Questo potrebbe non essere una buona idea poiché interferirà con homebrew. Puoi invece specificare una directory alternativa con DESTDIR=... $ make install DESTDIR=/usr/local/djvulibre-install
Vedi la directory win32. Popola le directory zlib, jpeg e tiff con il codice open source suggerito nei file README. Controlla win32/djvulibre/dirs.props per vedere come nominare le directory. Poi apri win32/djvulibre/djvulibre.sln e compila.
Il passo successivo sarebbe seguire le istruzioni nel pacchetto djview per creare un progetto djview e aggiungerlo a questa soluzione. Infine puoi usare lo script djvulibre-install.sh e djvulibre.nsi per preparare l'installer di djvulibre+djview.
Devi prima installare il compilatore mingw e l'ambiente msys. Vedi www.mingw.org per maggiori informazioni. Dalla shell msys, esegui i comandi usuali $ configure $ make Poi raccogli la dll di djvulibre dalla directory libdjvu/.libs e gli eseguibili dalla directory tools/.libs Fai riferimento al file INSTALL per informazioni sugli argomenti dello script 'configure'.
Esegui semplicemente i comandi usuali $ configure $ make $ make install Fai riferimento al file INSTALL per informazioni sugli argomenti dello script 'configure'.