
Exploit proof-of-concept per CVE-2023-1999 che colpisce la libreria del codec WebP su Android 10 (r33). Dimostra una vulnerabilità di heap buffer overflow nella libreria libwebp, consentendo l'esecuzione remota di codice tramite un'immagine WebP appositamente creata.
/ \\/ \/ _ \/ _ )/ _ \
\ / __/ _ \ __/
\__\__/\____/\_____/__/ ____ ___
/ _/ / \ \ / _ \/ _/
/ \_/ / / \ \ __/ \__
\____/____/\_____/_____/____/v1.0.2
Codec WebP: libreria per codificare e decodificare immagini in formato WebP. Questo pacchetto contiene la libreria che può essere utilizzata in altri programmi per aggiungere il supporto WebP, così come gli strumenti da riga di comando 'cwebp' e 'dwebp'.
Vedi http://developers.google.com/speed/webp
L'ultimo albero sorgente è disponibile su https://chromium.googlesource.com/webm/libwebp
È rilasciato sotto la stessa licenza del progetto WebM. Vedi http://www.webmproject.org/license/software/ o il file "COPYING" per i dettagli. Una concessione aggiuntiva di diritti di proprietà intellettuale si trova nel file PATENTS.
Eseguendo:
nmake /f Makefile.vc CFG=release-static RTLIBCFG=static OBJDIR=output
la directory output\release-static(x64|x86)\bin conterrà gli strumenti cwebp.exe e dwebp.exe. La directory output\release-static(x64|x86)\lib conterrà la libreria statica libwebp. L'architettura target (x86/x64) viene rilevata da Makefile.vc dal compilatore Visual Studio (cl.exe) disponibile nel percorso di sistema.
Su piattaforme con strumenti GNU installati (gcc e make), eseguendo
make -f makefile.unix
verranno compilati i binari examples/cwebp e examples/dwebp, insieme alla libreria statica src/libwebp.a. Non viene fornita un'installazione a livello di sistema, poiché questa è una semplice alternativa al sistema di installazione completo basato sugli strumenti autoconf (vedi sotto). Si prega di fare riferimento a makefile.unix per ulteriori dettagli e personalizzazioni.
Prerequisiti: Un compilatore (es. gcc), make, autoconf, automake, libtool. Su un sistema Debian-like, quanto segue dovrebbe installare tutto il necessario per una compilazione minima: $ sudo apt-get install gcc make autoconf automake libtool
Quando si compila da sorgenti git, sarà necessario eseguire autogen.sh per generare lo script configure.
./configure make make install
dovrebbe essere tutto ciò che serve per avere i seguenti file
/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
installati.
Nota: È disponibile una libreria solo per decodifica, libwebpdecoder, utilizzando il flag '--enable-libwebpdecoder'. La libreria di codifica viene compilata separatamente e può essere installata indipendentemente con una piccola modifica nei corrispondenti file Makefile.am configure (vedi commenti lì). Vedi './configure --help' per ulteriori opzioni.
I rilasci stabili di toolchain MIPS Linux sono disponibili su: 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
Con CMake puoi compilare libwebp, cwebp, dwebp, gif2web, img2webp, webpinfo e i binding JS.
Prerequisiti: Un compilatore (es. gcc con autotools) e CMake. Su un sistema Debian-like, quanto segue dovrebbe installare tutto il necessario per una compilazione minima: $ sudo apt-get install build-essential cmake
Quando si compila da sorgenti git, sarà necessario eseguire cmake per generare i makefile.
mkdir build && cd build && cmake ../ make make install
Se desideri anche uno qualsiasi degli eseguibili, dovrai abilitarli tramite CMake, ad es.:
cmake -DWEBP_BUILD_CWEBP=ON -DWEBP_BUILD_DWEBP=ON ../
o tramite la tua interfaccia preferita (come ccmake o cmake-qt-gui).
Usa l'opzione -DWEBP_UNICODE=ON per il supporto Unicode su Windows (con chcp 65001).
Infine, una volta installato, puoi anche utilizzare WebP nel tuo progetto CMake facendo:
find_package(WebP)
che definirà le variabili CMake WebP_INCLUDE_DIRS e WebP_LIBRARIES.
Il supporto per Gradle è minimale: ti aiuta solo a compilare libwebp, cwebp, dwebp e webpmux_example.
Prerequisiti: Un compilatore (es. gcc con autotools) e gradle. Su un sistema Debian-like, quanto segue dovrebbe installare tutto il necessario per una compilazione minima: $ sudo apt-get install build-essential gradle
Quando si compila da sorgenti git, sarà necessario eseguire il wrapper Gradle con il target appropriato, ad es. :
./gradlew buildAllExecutables
Per generare i binding linguistici da swig/libwebp.swig è necessario almeno swig-1.3 (http://www.swig.org).
Attualmente sono mappate le seguenti funzioni: Decodifica: WebPGetDecoderVersion WebPGetInfo WebPDecodeRGBA WebPDecodeARGB WebPDecodeBGRA WebPDecodeBGR WebPDecodeRGB
Codifica: WebPGetEncoderVersion WebPEncodeRGBA WebPEncodeBGRA WebPEncodeRGB WebPEncodeBGR WebPEncodeLosslessRGBA WebPEncodeLosslessBGRA WebPEncodeLosslessRGB WebPEncodeLosslessBGR
Vedi swig/README per istruzioni di compilazione più dettagliate.
Binding Java:
Per compilare il codice wrapper JNI generato da swig è necessario almeno JDK-1.5 (o equivalente) per il supporto enum. L'output è pensato per essere un oggetto condiviso / DLL che può essere caricato tramite System.loadLibrary("webp_jni").
Binding Python:
Per compilare il codice di estensione Python generato da swig è necessario almeno Python 2.6. Python < 2.6 potrebbe essere compilato con piccole modifiche a libwebp.swig o al codice generato, ma non è stato testato.
La directory examples/ contiene strumenti per la codifica (cwebp) e decodifica (dwebp) di immagini.
L'uso più semplice dovrebbe essere: cwebp input.png -q 80 -o output.webp che convertirà il file di input in un file WebP utilizzando un fattore di qualità di 80 su una scala da 0 a 100 (0 è la qualità più bassa, 100 è la migliore. Il valore predefinito è 75). Potresti voler provare anche il flag -lossless, che comprimerà la sorgente (in formato RGBA) senza alcuna perdita. Il parametro di qualità -q in questo caso controllerà la quantità di tempo di elaborazione speso per cercare di rendere il file di output il più piccolo possibile.
Un elenco più lungo di opzioni è disponibile utilizzando il flag da riga di comando -longhelp:
cwebp -longhelp Usage: cwebp [-preset <...>] [options] in_file [-o out_file]
If input size (-s) for an image is not specified, it is assumed to be a PNG, JPEG, TIFF or WebP file.
Options: -h / -help ............. short help -H / -longhelp ......... long help -q ............. quality factor (0:small..100:big), default=75 -alpha_q ......... transparency-compression quality (0..100), default=100 -preset ....... preset setting, one of: default, photo, picture, drawing, icon, text -preset must come first, as it overwrites other parameters -z ............... activates lossless preset with given level in [0:fast, ..., 9:slowest]