
Proof-of-Concept-Exploit für CVE-2023-1999, das auf die WebP-Codec-Bibliothek unter Android 10 (r33) abzielt. Demonstriert eine Heap-Pufferüberlauf-Schwachstelle in der libwebp-Bibliothek, die Remote-Codeausführung über ein manipuliertes WebP-Bild ermöglicht.
/ \\/ \/ _ \/ _ )/ _ \
\ / __/ _ \ __/
\__\__/\____/\_____/__/ ____ ___
/ _/ / \ \ / _ \/ _/
/ \_/ / / \ \ __/ \__
\____/____/\_____/_____/____/v1.0.2
WebP-Codec: Bibliothek zum Kodieren und Dekodieren von Bildern im WebP-Format. Dieses Paket enthält die Bibliothek, die in anderen Programmen verwendet werden kann, um WebP-Unterstützung hinzuzufügen, sowie die Befehlszeilenwerkzeuge 'cwebp' und 'dwebp'.
Siehe http://developers.google.com/speed/webp
Der neueste Quellbaum ist verfügbar unter https://chromium.googlesource.com/webm/libwebp
Es wird unter derselben Lizenz wie das WebM-Projekt veröffentlicht. Einzelheiten finden Sie unter http://www.webmproject.org/license/software/ oder in der Datei „COPYING“. Eine zusätzliche Gewährung geistiger Eigentumsrechte finden Sie in der Datei PATENTS.
Durch Ausführen von:
nmake /f Makefile.vc CFG=release-static RTLIBCFG=static OBJDIR=output
enthält das Verzeichnis output\release-static(x64|x86)\bin die Werkzeuge cwebp.exe und dwebp.exe. Das Verzeichnis output\release-static(x64|x86)\lib enthält die statische Bibliothek libwebp. Die Zielarchitektur (x86/x64) wird von Makefile.vc anhand des im Systempfad verfügbaren Visual-Studio-Compilers (cl.exe) erkannt.
Auf Plattformen mit installierten GNU-Werkzeugen (gcc und make) erzeugt
make -f makefile.unix
die Binärdateien examples/cwebp und examples/dwebp sowie die statische Bibliothek src/libwebp.a. Es wird keine systemweite Installation bereitgestellt, da dies eine einfache Alternative zum vollständigen, auf den autoconf-Werkzeugen basierenden Installationssystem darstellt (siehe unten). Weitere Details und Anpassungsmöglichkeiten finden Sie in makefile.unix.
Voraussetzungen: Ein Compiler (z. B. gcc), make, autoconf, automake, libtool. Auf einem Debian-ähnlichen System sollte Folgendes alles installieren, was Sie für einen minimalen Build benötigen: $ sudo apt-get install gcc make autoconf automake libtool
Wenn Sie aus den Git-Quellen bauen, müssen Sie autogen.sh ausführen, um das configure-Skript zu erzeugen.
./configure make make install
sollte alles sein, was Sie benötigen, um die folgenden Dateien zu erhalten
/usr/local/include/webp/decode.h /usr/local/include/webp/encode.h /usr/local/include/webp/types.h /usr/local/lib/libwebp.* /usr/local/bin/cwebp /usr/local/bin/dwebp
installiert.
Hinweis: Eine reine Decode-Bibliothek, libwebpdecoder, ist über die Option '--enable-libwebpdecoder' verfügbar. Die Encode-Bibliothek wird separat erstellt und kann mit einer kleinen Änderung in den entsprechenden Makefile.am-Konfigurationsdateien unabhängig installiert werden (siehe dortige Kommentare). Weitere Optionen finden Sie unter './configure --help'.
Stabile verfügbare Versionen der MIPS-Linux-Toolchain finden Sie unter: https://community.imgtec.com/developers/mips/tools/codescape-mips-sdk/available-releases/
export PATH=$PATH:/path/to/toolchain/bin
HOST=mips-mti-linux-gnu
MIPS_CFLAGS="-O3 -mips32r5 -mabi=32 -mtune=p5600 -mmsa -mfp64
-msched-weight -mload-store-pairs -fPIE"
MIPS_LDFLAGS="-mips32r5 -mabi=32 -mmsa -mfp64 -pie"
HOST=mips-img-linux-gnu
MIPS_CFLAGS="-O3 -mips64r6 -mabi=64 -mtune=i6400 -mmsa -mfp64
-msched-weight -mload-store-pairs -fPIE"
MIPS_LDFLAGS="-mips64r6 -mabi=64 -mmsa -mfp64 -pie"
./configure --host=${HOST} --build=config.guess
CC="${HOST}-gcc -EL"
CFLAGS="$MIPS_CFLAGS"
LDFLAGS="$MIPS_LDFLAGS"
make
make install
Mit CMake können Sie libwebp, cwebp, dwebp, gif2web, img2webp, webpinfo und die JS-Bindings kompilieren.
Voraussetzungen: Ein Compiler (z. B. gcc mit autotools) und CMake. Auf einem Debian-ähnlichen System sollte Folgendes alles installieren, was Sie für einen minimalen Build benötigen: $ sudo apt-get install build-essential cmake
Wenn Sie aus den Git-Quellen bauen, müssen Sie cmake ausführen, um die Makefiles zu erzeugen.
mkdir build && cd build && cmake ../ make make install
Wenn Sie auch eines der ausführbaren Programme wünschen, müssen Sie diese über CMake aktivieren, z. B.:
cmake -DWEBP_BUILD_CWEBP=ON -DWEBP_BUILD_DWEBP=ON ../
oder über Ihre bevorzugte Oberfläche (wie ccmake oder cmake-qt-gui).
Verwenden Sie die Option -DWEBP_UNICODE=ON für Unicode-Unterstützung unter Windows (mit chcp 65001).
Schließlich können Sie WebP nach der Installation auch in Ihrem CMake-Projekt verwenden, indem Sie Folgendes ausführen:
find_package(WebP)
Dadurch werden die CMake-Variablen WebP_INCLUDE_DIRS und WebP_LIBRARIES definiert.
Die Unterstützung für Gradle ist minimal: Sie hilft Ihnen nur beim Kompilieren von libwebp, cwebp, dwebp und webpmux_example.
Voraussetzungen: Ein Compiler (z. B. gcc mit autotools) und gradle. Auf einem Debian-ähnlichen System sollte Folgendes alles installieren, was Sie für einen minimalen Build benötigen: $ sudo apt-get install build-essential gradle
Wenn Sie aus den Git-Quellen bauen, müssen Sie den Gradle-Wrapper mit dem entsprechenden Ziel ausführen, z. B.:
./gradlew buildAllExecutables
Zum Erzeugen von Sprachbindungen aus swig/libwebp.swig ist mindestens swig-1.3 (http://www.swig.org) erforderlich.
Derzeit werden die folgenden Funktionen zugeordnet: Dekodieren: WebPGetDecoderVersion WebPGetInfo WebPDecodeRGBA WebPDecodeARGB WebPDecodeBGRA WebPDecodeBGR WebPDecodeRGB
Kodieren: WebPGetEncoderVersion WebPEncodeRGBA WebPEncodeBGRA WebPEncodeRGB WebPEncodeBGR WebPEncodeLosslessRGBA WebPEncodeLosslessBGRA WebPEncodeLosslessRGB WebPEncodeLosslessBGR
Weitere detaillierte Build-Anweisungen finden Sie in swig/README.
Zum Erstellen des von SWIG generierten JNI-Wrapper-Codes ist mindestens JDK-1.5 (oder gleichwertig) für die Enum-Unterstützung erforderlich. Die Ausgabe ist als Shared Object / DLL vorgesehen, die über System.loadLibrary("webp_jni") geladen werden kann.
Zum Erstellen des von SWIG generierten Python-Erweiterungscodes ist mindestens Python 2.6 erforderlich. Python < 2.6 lässt sich möglicherweise mit einigen kleineren Änderungen an libwebp.swig oder am generierten Code erstellen, ist aber ungetestet.
Das Verzeichnis examples/ enthält Werkzeuge zum Kodieren (cwebp) und Dekodieren (dwebp) von Bildern.
Die einfachste Verwendung sieht wie folgt aus: cwebp input.png -q 80 -o output.webp Dies wandelt die Eingabedatei mit einem Qualitätsfaktor von 80 auf einer Skala von 0 bis 100 in eine WebP-Datei um (0 ist die niedrigste Qualität, 100 die beste. Der Standardwert ist 75). Sie können auch das Flag -lossless ausprobieren, das die Quelle (im RGBA-Format) ohne Verluste komprimiert. Der Qualitätsparameter -q steuert in diesem Fall den Umfang der Verarbeitungszeit, die aufgewendet wird, um die Ausgabedatei so klein wie möglich zu machen.
Eine längere Liste der Optionen ist über die Befehlszeilenoption -longhelp verfügbar:
cwebp -longhelp Verwendung: cwebp [-preset <...>] [options] in_file [-o out_file]
Wenn die Eingabegröße (-s) für ein Bild nicht angegeben ist, wird angenommen, dass es sich um eine PNG-, JPEG-, TIFF- oder WebP-Datei handelt.