
Exploit de prueba de concepto para CVE-2023-1999 dirigido al códec WebP en Android 10 (r33). Demuestra una vulnerabilidad de desbordamiento de búfer en el montón en la librería libwebp, permitiendo la ejecución remota de código a través de una imagen WebP manipulada.
/ \\/ \/ _ \/ _ )/ _ \
\ / __/ _ \ __/
\__\__/\____/\_____/__/ ____ ___
/ _/ / \ \ / _ \/ _/
/ \_/ / / \ \ __/ \__
\____/____/\_____/_____/____/v1.0.2
Códec WebP: biblioteca para codificar y decodificar imágenes en formato WebP. Este paquete contiene la biblioteca que se puede usar en otros programas para añadir soporte WebP, así como las herramientas de línea de comandos 'cwebp' y 'dwebp'.
Consulte http://developers.google.com/speed/webp
El árbol fuente más reciente está disponible en https://chromium.googlesource.com/webm/libwebp
Se publica bajo la misma licencia que el proyecto WebM. Consulte http://www.webmproject.org/license/software/ o el archivo "COPYING" para más detalles. Se puede encontrar una concesión adicional de derechos de propiedad intelectual en el archivo PATENTS.
Ejecutando:
nmake /f Makefile.vc CFG=release-static RTLIBCFG=static OBJDIR=output
el directorio output\release-static(x64|x86)\bin contendrá las herramientas cwebp.exe y dwebp.exe. El directorio output\release-static(x64|x86)\lib contendrá la biblioteca estática libwebp. La arquitectura destino (x86/x64) es detectada por Makefile.vc a partir del compilador de Visual Studio (cl.exe) disponible en la ruta del sistema.
En plataformas con herramientas GNU instaladas (gcc y make), ejecutando
make -f makefile.unix
se construirán los binarios examples/cwebp y examples/dwebp, junto con la biblioteca estática src/libwebp.a. No se proporciona instalación a nivel de sistema, ya que esta es una alternativa simple al sistema de instalación completo basado en las herramientas autoconf (ver más abajo). Consulte makefile.unix para obtener detalles adicionales y personalizaciones.
Requisitos previos: Un compilador (por ejemplo, gcc), make, autoconf, automake, libtool. En un sistema tipo Debian, lo siguiente debería instalar todo lo necesario para una compilación mínima: $ sudo apt-get install gcc make autoconf automake libtool
Al compilar desde fuentes git, necesitará ejecutar autogen.sh para generar el script configure.
./configure make make install
debería ser todo lo necesario para tener los siguientes archivos
/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
instalados.
Nota: Una biblioteca solo de decodificación, libwebpdecoder, está disponible usando el indicador '--enable-libwebpdecoder'. La biblioteca de codificación se construye por separado y puede instalarse de forma independiente usando una modificación menor en los archivos de configuración correspondientes de Makefile.am (consulte los comentarios allí). Consulte './configure --help' para más opciones.
Las versiones estables disponibles del conjunto de herramientas MIPS Linux se pueden encontrar en: 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, puede compilar libwebp, cwebp, dwebp, gif2web, img2webp, webpinfo y los enlaces JS.
Requisitos previos: Un compilador (por ejemplo, gcc con autotools) y CMake. En un sistema tipo Debian, lo siguiente debería instalar todo lo necesario para una compilación mínima: $ sudo apt-get install build-essential cmake
Al compilar desde fuentes git, necesitará ejecutar cmake para generar los archivos make.
mkdir build && cd build && cmake ../ make make install
Si también desea alguno de los ejecutables, deberá habilitarlos a través de CMake, por ejemplo:
cmake -DWEBP_BUILD_CWEBP=ON -DWEBP_BUILD_DWEBP=ON ../
o a través de su interfaz favorita (como ccmake o cmake-qt-gui).
Use la opción -DWEBP_UNICODE=ON para soporte Unicode en Windows (con chcp 65001).
Finalmente, una vez instalado, también puede usar WebP en su proyecto CMake haciendo:
find_package(WebP)
lo que definirá las variables CMake WebP_INCLUDE_DIRS y WebP_LIBRARIES.
El soporte para Gradle es mínimo: solo le ayuda a compilar libwebp, cwebp y dwebp y webpmux_example.
Requisitos previos: Un compilador (por ejemplo, gcc con autotools) y gradle. En un sistema tipo Debian, lo siguiente debería instalar todo lo necesario para una compilación mínima: $ sudo apt-get install build-essential gradle
Al compilar desde fuentes git, necesitará ejecutar el wrapper de Gradle con el objetivo apropiado, por ejemplo:
./gradlew buildAllExecutables
Para generar enlaces de lenguajes a partir de swig/libwebp.swig se requiere al menos swig-1.3 (http://www.swig.org).
Actualmente se asignan las siguientes funciones: Decodificación: WebPGetDecoderVersion WebPGetInfo WebPDecodeRGBA WebPDecodeARGB WebPDecodeBGRA WebPDecodeBGR WebPDecodeRGB
Codificación: WebPGetEncoderVersion WebPEncodeRGBA WebPEncodeBGRA WebPEncodeRGB WebPEncodeBGR WebPEncodeLosslessRGBA WebPEncodeLosslessBGRA WebPEncodeLosslessRGB WebPEncodeLosslessBGR
Consulte swig/README para instrucciones de compilación más detalladas.
Enlaces Java:
Para compilar el código wrapper JNI generado por swig se necesita al menos JDK-1.5 (o equivalente) para el soporte de enumeraciones. La salida está destinada a ser un objeto compartido / DLL que puede cargarse mediante System.loadLibrary("webp_jni").
Enlaces Python:
Para compilar el código de extensión Python generado por swig se requiere al menos Python 2.6. Python < 2.6 puede compilarse con algunos cambios menores en libwebp.swig o el código generado, pero no ha sido probado.
El directorio examples/ contiene herramientas para codificar (cwebp) y decodificar (dwebp) imágenes.
El uso más sencillo debería verse así: cwebp input.png -q 80 -o output.webp lo que convertirá el archivo de entrada a un archivo WebP usando un factor de calidad de 80 en una escala de 0 a 100 (0 es la calidad más baja, 100 es la mejor. El valor predeterminado es 75). Quizás desee probar también el indicador -lossless, que comprimirá la fuente (en formato RGBA) sin ninguna pérdida. El parámetro de calidad -q en este caso controlará la cantidad de tiempo de procesamiento dedicado a intentar hacer que el archivo de salida sea lo más pequeño posible.
Una lista más larga de opciones está disponible usando el indicador de línea de comandos -longhelp:
cwebp -longhelp Uso: cwebp [-preset <...>] [opciones] in_file [-o out_file]
Si no se especifica el tamaño de entrada (-s) para una imagen, se asume que es un archivo PNG, JPEG, TIFF o WebP.