
Proof-of-Concept-Exploit für CVE-2025-53367, eine Schwachstelle in der DjVuLibre-Bibliothek. Demonstriert die Ausnutzung eines Speicherkorruptionsfehlers bei der Verarbeitung von DjVu-Dokumenten.
DjVu (ausgesprochen "déjà vu") ist eine Sammlung von Komprimierungstechnologien, ein Dateiformat und eine Softwareplattform für die Bereitstellung digitaler Dokumente, gescannter Dokumente und hochauflösender Bilder über das Web.
DjVu-Dokumente werden extrem schnell heruntergeladen und angezeigt und sehen auf allen Plattformen genau gleich aus. DjVu kann als überlegene Alternative zu PDF und Postscript für digitale Dokumente, zu TIFF (und PDF) für gescannte Dokumente, zu JPEG für Fotos und Bilder und zu GIF für große Bilder mit Farbpalette angesehen werden. DjVu ist das einzige Web-Format, das für die Verteilung hochauflösender gescannter Dokumente in Farbe praktikabel ist. Kein anderes Format kommt dem nahe.
Typische DjVu-Dateigrößen sind wie folgt:
Bitonale gescannte Dokumente: 5 bis 30 KB pro Seite bei 300 dpi, 3 bis 10 Mal kleiner als PDF oder TIFF.
Farbige gescannte Dokumente: 30 bis 100 KB pro Seite bei 300 dpi, 5 bis 10 Mal kleiner als JPEG.
Fotos: 2 Mal kleiner als JPEG, etwa gleich groß wie JPEG-2000.
Bilder mit Farbpalette: 2 Mal kleiner als GIF, bis zu 10 Mal kleiner, wenn Text vorhanden ist.
DjVu wird von Hunderten kommerzieller, staatlicher und nicht-kommerzieller Websites auf der ganzen Welt verwendet, um gescannte Dokumente, digitale Dokumente und hochauflösende Fotos zu verteilen.
Demos und allgemeine Informationen über DjVu finden Sie unter http://www.djvuzone.org oder unter http://www.lizardtech.com.
DjVu wurde ursprünglich bei AT&T Labs-Research entwickelt. AT&T verkaufte DjVu im März 2000 an LizardTech Inc.
Um DjVu als Web-Standard zu fördern, war das Management von LizardTech aufgeklärt genug, die Referenzimplementierung von DjVu im Oktober 2000 unter der GNU GPL zu veröffentlichen. DjVuLibre (ausgesprochen wie das französische "déjà vu libre") ist eine erweiterte Version dieses Codes, die von den ursprünglichen Erfindern von DjVu gepflegt wird. Es ist mit LizardTechs DjVu-Software v3.5 kompatibel.
Dieses Paket enthält:
Der vollwertige DjVu-Dateibetrachter und Browser-Plug-in DjView4 ist als separates Paket erhältlich.
DjVuLibre-3.5 ist auf verschiedene im Web verfügbare Komponenten angewiesen. Die meisten aktuellen Linux-Distributionen enthalten diese bereits. Sie können sie auch herunterladen und selbst kompilieren, wenn Sie möchten. Lesen Sie unbedingt die systemspezifischen Hinweise am Ende dieser Datei.
COMPILER -- Die Entwicklung erfolgt mit dem GCC g++-Compiler, der daher für alle Plattformen empfohlen wird. Der CLANG-Compiler wurde getestet und scheint zu funktionieren, aber seine Ausgabe wurde nicht ernsthaft getestet.
LIBJPEG/LIBTIFF -- Eine kleine Anzahl von DjVu-Dateien verwendet intern JPEG-Kodierung anstelle der IW44-Wellenkodierung. Diese Dateien werden mit Version 6a oder 6b der IJG libjpeg-Bibliothek http://www.ijg.org verarbeitet. Einige Dienstprogramme können TIFF-Dateien lesen. Diese Programme verlassen sich auf die LIBTIFF-Bibliothek http://libtiff.org. Sie können DjVuLibre auch ohne JPEG- oder TIFF-Unterstützung kompilieren. Sie werden den Unterschied wahrscheinlich nie bemerken.
Die Chancen stehen gut, dass alles funktioniert, indem Sie einfach die Befehle "./configure", "make" und "make install" ausführen.
Beachten Sie, dass es keine Konfigurationsdatei gibt, wenn Sie den DjVuLibre-Quellcode über git clone beziehen. Stattdessen gibt es ein Skript 'autogen.sh', das automake verwendet, um das eigentliche configure-Skript zu generieren und aufzurufen. Da alle Argumente von autogen.sh an configure weitergegeben werden, können Sie autogen.sh einfach als Ersatz für configure behandeln.
Verschiedene Optionen und Umgebungsvariablen beeinflussen die Ausführung des Konfigurationsskripts. Eine vollständige Liste erhalten Sie durch Eingabe von "configure --help". Beachten Sie auch die Datei INSTALL für weitere Details. Hier sind die wichtigsten.
Option "--prefix=PREFIXDIR" Diese Option gibt an, wo die DjVuLibre-Software installiert wird. Das Standard-Präfix ist /usr/local.
Option "--enable-desktopfiles[=(yes|no)]" Installiert Symbol- und MIME-Typ-Dateien in den üblichen xdg-Verzeichnissen. Der Standardwert ist "yes".
Option "--with-jpeg=JPEGDIR" Diese Option gibt ein Verzeichnis an, in dem die JPEG-Bibliothek kompiliert wurde. Dieses Verzeichnis enthält sowohl die Include-Dateien als auch die Bibliothek. Ohne diese Option sucht das Konfigurationsskript die JPEG-Bibliothek an Standardorten. Wenn alles andere fehlschlägt, können Sie einfach die Umgebungsvariablen JPEG_CFLAGS und JPEG_LIBS definieren.
Option "--with-tiff=TIFFDIR" Diese Option gibt ein Verzeichnis an, in dem die LIBTIFF-Bibliothek kompiliert wurde. Dieses Verzeichnis enthält sowohl die Include-Dateien als auch die Bibliothek. Ohne diese Option sucht das Konfigurationsskript die LIBTIFF-Bibliothek an Standardorten. Wenn alles andere fehlschlägt, können Sie einfach die Umgebungsvariablen TIFF_CFLAGS und TIFF_LIBS definieren.
Überprüfen Sie immer die Ausgabe des Konfigurationsskripts auf Warnungen und Fehler. Insbesondere kann das Konfigurationsskript die Kompilierung von djview deaktivieren, wenn es die erforderlichen Bibliotheken und Dienstprogramme nicht finden kann. Die Warnmeldungen sind der einzige Weg, dies zu erfahren.
Sie können dann die Kompilierung durchführen, indem Sie Folgendes eingeben:
$ make
Die Kompilierung kann einige Minuten dauern. Überprüfen Sie erneut die Ausgabe auf Warnungen und Fehler. Schließlich zeigt Ihnen eine kurze Meldung an, dass die Kompilierung erfolgreich war. Sie können dann mit der Installation fortfahren.
Geben Sie Folgendes ein:
$ make install
oder falls nötig:
$ sudo make install
sollte:
Wobei ${prefix} sich auf das Verzeichnis bezieht, das durch die prefix-Option des Konfigurationsskripts angegeben wurde und standardmäßig "/usr/local" ist, und die obigen Pfade mit entsprechenden Argumenten für ./configure und make feinabgestimmt werden können.
Wir empfehlen, zuerst homebrew zu installieren und den Befehl "brew install" zu verwenden, um die folgenden Pakete zu erhalten: $ brew install autoconf automake libtool pkg-config $ brew install jpeg libtiff
Beachten Sie, dass homebrew bereits ein djvulibre-Paket enthält. Die folgenden Anweisungen erklären, wie man djvulibre auf eigenständige Weise kompiliert. Sie möchten dies tun, wenn Sie die neueste Version von djvulibre wünschen. Andernfalls sollten Sie wahrscheinlich einfach das djvulibre homebrew-Paket installieren. $ brew install djvulibre
Für die meisten Leute sollte es jedoch ausreichen, einfach das homebrew-Paket zu installieren.
Dann können Sie configure ausführen: $ ./configure --disable-desktopfiles
Dann können Sie mit folgendem Befehl kompilieren: $ make
Die Ausführung von "make install" wird djvulibre im Verzeichnis /usr/local installieren. Dies ist möglicherweise keine gute Idee, da es mit homebrew interferiert. Sie können stattdessen ein alternatives Verzeichnis mit DESTDIR=... angeben: $ make install DESTDIR=/usr/local/djvulibre-install
Siehe das Verzeichnis win32. Füllen Sie die Verzeichnisse zlib, jpeg und tiff mit dem in den README-Dateien vorgeschlagenen Open-Source-Code. Überprüfen Sie win32/djvulibre/dirs.props, um zu sehen, wie die Verzeichnisse benannt werden sollen. Öffnen Sie dann win32/djvulibre/djvulibre.sln und kompilieren Sie.
Der nächste Schritt wäre, den Anweisungen im djview-Paket zu folgen, um ein djview-Projekt zu erstellen und es dieser Projektmappe hinzuzufügen. Schließlich können Sie das Skript djvulibre-install.sh und djvulibre.nsi verwenden, um den djvulibre+djview-Installer vorzubereiten.
Sie müssen zuerst den Mingw-Compiler und die msys-Umgebung installieren. Siehe www.mingw.org für weitere Informationen. Führen Sie in der msys-Shell die üblichen Befehle aus: $ configure $ make Sammeln Sie dann die djvulibre-DLL aus dem Verzeichnis libdjvu/.libs und die ausführbaren Dateien aus dem Verzeichnis tools/.libs. Bitte lesen Sie die Datei INSTALL für Informationen über die Argumente des Skripts 'configure'.
Führen Sie einfach die üblichen Befehle aus: $ configure $ make $ make install Bitte lesen Sie die Datei INSTALL für Informationen über die Argumente des Skripts 'configure'.