
Exploit de prova de conceito para CVE-2023-1999 visando a biblioteca de codec WebP no Android 10 (r33). Demonstra uma vulnerabilidade de estouro de buffer na heap na biblioteca libwebp, permitindo execução remota de código por meio de uma imagem WebP maliciosa.
/ \\/ \/ _ \/ _ )/ _ \
\ / __/ _ \ __/
\__\__/\____/\_____/__/ ____ ___
/ _/ / \ \ / _ \/ _/
/ \_/ / / \ \ __/ \__
\____/____/\_____/_____/____/v1.0.2
Codec WebP: biblioteca para codificar e decodificar imagens no formato WebP. Este pacote contém a biblioteca que pode ser usada em outros programas para adicionar suporte a WebP, bem como as ferramentas de linha de comando 'cwebp' e 'dwebp'.
Consulte http://developers.google.com/speed/webp
A árvore de fontes mais recente está disponível em https://chromium.googlesource.com/webm/libwebp
É distribuído sob a mesma licença do projeto WebM. Consulte http://www.webmproject.org/license/software/ ou o arquivo "COPYING" para obter detalhes. Uma concessão adicional de direitos de propriedade intelectual pode ser encontrada no arquivo PATENTS.
Executando:
nmake /f Makefile.vc CFG=release-static RTLIBCFG=static OBJDIR=output
o diretório output\release-static(x64|x86)\bin conterá as ferramentas cwebp.exe e dwebp.exe. O diretório output\release-static(x64|x86)\lib conterá a biblioteca estática libwebp. A arquitetura alvo (x86/x64) é detectada pelo Makefile.vc a partir do compilador Visual Studio (cl.exe) disponível no caminho do sistema.
Em plataformas com ferramentas GNU instaladas (gcc e make), executar
make -f makefile.unix
compilará os binários examples/cwebp e examples/dwebp, juntamente com a biblioteca estática src/libwebp.a. Não é fornecida instalação em todo o sistema, pois esta é uma alternativa simples ao sistema de instalação completo baseado nas ferramentas autoconf (veja abaixo). Consulte makefile.unix para obter detalhes e personalizações adicionais.
Pré-requisitos: Um compilador (por exemplo, gcc), make, autoconf, automake, libtool. Em um sistema Debian-like, o seguinte deve instalar tudo que você precisa para uma compilação mínima: $ sudo apt-get install gcc make autoconf automake libtool
Ao compilar a partir das fontes git, você precisará executar autogen.sh para gerar o script configure.
./configure make make install
deve ser tudo que você precisa para ter os seguintes arquivos
/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: Uma biblioteca apenas de decodificação, libwebpdecoder, está disponível usando a flag '--enable-libwebpdecoder'. A biblioteca de codificação é compilada separadamente e pode ser instalada independentemente usando uma pequena modificação nos arquivos configure Makefile.am correspondentes (veja comentários lá). Consulte './configure --help' para mais opções.
Versões estáveis disponíveis do toolchain MIPS Linux podem ser encontradas em: 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
Com CMake, você pode compilar libwebp, cwebp, dwebp, gif2web, img2webp, webpinfo e os bindings JS.
Pré-requisitos: Um compilador (por exemplo, gcc com autotools) e CMake. Em um sistema Debian-like, o seguinte deve instalar tudo que você precisa para uma compilação mínima: $ sudo apt-get install build-essential cmake
Ao compilar a partir das fontes git, você precisará executar cmake para gerar os makefiles.
mkdir build && cd build && cmake ../ make make install
Se você também quiser algum dos executáveis, precisará habilitá-los através do CMake, por exemplo:
cmake -DWEBP_BUILD_CWEBP=ON -DWEBP_BUILD_DWEBP=ON ../
ou através da sua interface favorita (como ccmake ou cmake-qt-gui).
Use a opção -DWEBP_UNICODE=ON para suporte a Unicode no Windows (com chcp 65001).
Finalmente, uma vez instalado, você também pode usar WebP em seu projeto CMake fazendo:
find_package(WebP)
que definirá as variáveis do CMake WebP_INCLUDE_DIRS e WebP_LIBRARIES.
O suporte para Gradle é mínimo: ele apenas ajuda você a compilar libwebp, cwebp e dwebp e webpmux_example.
Pré-requisitos: Um compilador (por exemplo, gcc com autotools) e gradle. Em um sistema Debian-like, o seguinte deve instalar tudo que você precisa para uma compilação mínima: $ sudo apt-get install build-essential gradle
Ao compilar a partir das fontes git, você precisará executar o wrapper do Gradle com o alvo apropriado, por exemplo:
./gradlew buildAllExecutables
Para gerar bindings de linguagem a partir de swig/libwebp.swig, pelo menos swig-1.3 (http://www.swig.org) é necessário.
Atualmente, as seguintes funções são mapeadas: Decodificar: WebPGetDecoderVersion WebPGetInfo WebPDecodeRGBA WebPDecodeARGB WebPDecodeBGRA WebPDecodeBGR WebPDecodeRGB
Codificar: WebPGetEncoderVersion WebPEncodeRGBA WebPEncodeBGRA WebPEncodeRGB WebPEncodeBGR WebPEncodeLosslessRGBA WebPEncodeLosslessBGRA WebPEncodeLosslessRGB WebPEncodeLosslessBGR
Consulte swig/README para instruções de compilação mais detalhadas.
Bindings Java:
Para compilar o código wrapper JNI gerado por swig, pelo menos JDK-1.5 (ou equivalente) é necessário para suporte a enum. A saída é destinada a ser um objeto compartilhado / DLL que pode ser carregado via System.loadLibrary("webp_jni").
Bindings Python:
Para compilar o código de extensão Python gerado por swig, pelo menos Python 2.6 é necessário. Python < 2.6 pode compilar com algumas pequenas alterações no libwebp.swig ou no código gerado, mas não foi testado.
O diretório examples/ contém ferramentas para codificar (cwebp) e decodificar (dwebp) imagens.
O uso mais fácil deve ser assim: cwebp input.png -q 80 -o output.webp que converterá o arquivo de entrada para um arquivo WebP usando um fator de qualidade de 80 em uma escala de 0 a 100 (0 sendo a qualidade mais baixa, 100 a melhor. O valor padrão é 75). Você também pode querer experimentar a flag -lossless, que comprimirá a fonte (no formato RGBA) sem qualquer perda. O parâmetro de qualidade -q neste caso controlará a quantidade de tempo de processamento gasto tentando tornar o arquivo de saída o menor possível.
Uma lista mais longa de opções está disponível usando a flag de linha de comando -longhelp:
cwebp -longhelp Uso: cwebp [-preset <...>] [opções] arquivo_entrada [-o arquivo_saída]
Se o tamanho de entrada (-s) de uma imagem não for especificado, assume-se que seja um arquivo PNG, JPEG, TIFF ou WebP.