
Android 10(r33)의 WebP 코덱 라이브러리를 대상으로 하는 CVE-2023-1999용 개념 증명 익스플로잇. libwebp 라이브러리의 힙 버퍼 오버플로우 취약점을 시연하여 조작된 WebP 이미지를 통한 원격 코드 실행을 가능하게 합니다.
/ \\/ \/ _ \/ _ )/ _ \
\ / __/ _ \ __/
\__\__/\____/\_____/__/ ____ ___
/ _/ / \ \ / _ \/ _/
/ \_/ / / \ \ __/ \__
\____/____/\_____/_____/____/v1.0.2
WebP 코덱: WebP 형식의 이미지를 인코딩하고 디코딩하는 라이브러리입니다. 이 패키지에는 다른 프로그램에서 WebP 지원을 추가하는 데 사용할 수 있는 라이브러리와 명령줄 도구 'cwebp' 및 'dwebp'가 포함되어 있습니다.
http://developers.google.com/speed/webp 참조
최신 소스 트리는 다음에서 확인할 수 있습니다. https://chromium.googlesource.com/webm/libwebp
WebM 프로젝트와 동일한 라이선스로 배포됩니다. 자세한 내용은 http://www.webmproject.org/license/software/ 또는 "COPYING" 파일을 참조하세요. 추가 지적 재산권 부여는 PATENTS 파일에서 확인할 수 있습니다.
다음을 실행하여:
nmake /f Makefile.vc CFG=release-static RTLIBCFG=static OBJDIR=output
output\release-static(x64|x86)\bin 디렉터리에는 cwebp.exe 및 dwebp.exe 도구가 들어 있습니다. output\release-static(x64|x86)\lib 디렉터리에는 libwebp 정적 라이브러리가 들어 있습니다. 대상 아키텍처(x86/x64)는 시스템 경로에 있는 Visual Studio 컴파일러(cl.exe)를 통해 Makefile.vc가 감지합니다.
GNU 도구(gcc 및 make)가 설치된 플랫폼에서 다음을 실행하면
make -f makefile.unix
examples/cwebp 및 examples/dwebp 바이너리와 정적 라이브러리 src/libwebp.a를 빌드합니다. autoconf 도구 기반의 전체 설치 시스템에 대한 간단한 대안이므로 시스템 전체 설치를 제공하지는 않습니다(아래 참조). 추가 세부 사항 및 사용자 지정은 makefile.unix를 참조하세요.
사전 요구 사항: 컴파일러(예: gcc), make, autoconf, automake, libtool. Debian 계열 시스템에서는 다음 명령으로 최소 빌드에 필요한 모든 것을 설치할 수 있습니다: $ sudo apt-get install gcc make autoconf automake libtool
git 소스에서 빌드할 때는 configure 스크립트를 생성하기 위해 autogen.sh를 실행해야 합니다.
./configure make make install
다음 파일을 얻으려면 위 명령만 실행하면 됩니다.
/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
설치됩니다.
참고: '--enable-libwebpdecoder' 플래그를 사용하여 디코딩 전용 라이브러리인 libwebpdecoder를 이용할 수 있습니다. 인코딩 라이브러리는 별도로 빌드되며 해당 Makefile.am configure 파일을 약간 수정하면 독립적으로 설치할 수 있습니다(해당 파일의 주석 참조). 더 많은 옵션은 './configure --help'를 참조하세요.
안정적인 MIPS Linux 툴체인 릴리스는 다음에서 확인할 수 있습니다: 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
CMake를 사용하면 libwebp, cwebp, dwebp, gif2web, img2webp, webpinfo 및 JS 바인딩을 컴파일할 수 있습니다.
사전 요구 사항: 컴파일러(예: autotools와 함께 제공되는 gcc) 및 CMake. Debian 계열 시스템에서는 다음 명령으로 최소 빌드에 필요한 모든 것을 설치할 수 있습니다: $ sudo apt-get install build-essential cmake
git 소스에서 빌드할 때는 makefile을 생성하기 위해 cmake를 실행해야 합니다.
mkdir build && cd build && cmake ../ make make install
실행 파일도 필요하다면 CMake를 통해 활성화해야 합니다. 예:
cmake -DWEBP_BUILD_CWEBP=ON -DWEBP_BUILD_DWEBP=ON ../
또는 선호하는 인터페이스(ccmake 또는 cmake-qt-gui)를 통해 활성화할 수 있습니다.
Windows에서 유니코드를 지원하려면 -DWEBP_UNICODE=ON 옵션을 사용하세요(chcp 65001 포함).
마지막으로 설치가 완료되면 다음을 수행하여 CMake 프로젝트에서 WebP를 사용할 수도 있습니다:
find_package(WebP)
그러면 CMake 변수 WebP_INCLUDE_DIRS 및 WebP_LIBRARIES가 정의됩니다.
Gradle 지원은 최소한입니다. libwebp, cwebp, dwebp 및 webpmux_example를 컴파일하는 데만 도움이 됩니다.
사전 요구 사항: 컴파일러(예: autotools와 함께 제공되는 gcc) 및 gradle. Debian 계열 시스템에서는 다음 명령으로 최소 빌드에 필요한 모든 것을 설치할 수 있습니다: $ sudo apt-get install build-essential gradle
git 소스에서 빌드할 때는 적절한 타겟으로 Gradle 래퍼를 실행해야 합니다. 예:
./gradlew buildAllExecutables
swig/libwebp.swig에서 언어 바인딩을 생성하려면 최소 swig-1.3(http://www.swig.org)이 필요합니다.
현재 다음 함수가 매핑되어 있습니다: Decode: WebPGetDecoderVersion WebPGetInfo WebPDecodeRGBA WebPDecodeARGB WebPDecodeBGRA WebPDecodeBGR WebPDecodeRGB
Encode: WebPGetEncoderVersion WebPEncodeRGBA WebPEncodeBGRA WebPEncodeRGB WebPEncodeBGR WebPEncodeLosslessRGBA WebPEncodeLosslessBGRA WebPEncodeLosslessRGB WebPEncodeLosslessBGR
자세한 빌드 지침은 swig/README를 참조하세요.
Java 바인딩:
swig로 생성된 JNI 래퍼 코드를 빌드하려면 enum 지원을 위해 최소 JDK-1.5(또는 이에 상응하는 버전)가 필요합니다. 출력 결과는 System.loadLibrary("webp_jni")를 통해 로드할 수 있는 공유 객체/DLL로 제공됩니다.
Python 바인딩:
swig로 생성된 Python 확장 코드를 빌드하려면 최소 Python 2.6이 필요합니다. Python < 2.6은 libwebp.swig 또는 생성된 코드를 약간 수정하면 빌드될 수 있지만 테스트되지 않았습니다.
examples/ 디렉터리에는 이미지 인코딩(cwebp) 및 디코딩(dwebp) 도구가 포함되어 있습니다.
가장 간단한 사용법은 다음과 같습니다: cwebp input.png -q 80 -o output.webp 이 명령은 0->100 척도(0은 최저 품질, 100은 최고 품질. 기본값은 75)에서 품질 계수 80을 사용하여 입력 파일을 WebP 파일로 변환합니다. -lossless 플래그도 사용해 볼 수 있습니다. 이 플래그는 소스(RGBA 형식)를 손실 없이 압축합니다. 이 경우 -q 품질 매개변수는 출력 파일을 가능한 한 작게 만드는 데 소요되는 처리 시간을 제어합니다.
-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]
-m ............... compression method (0=fast, 6=slowest), default=4 -segments ........ number of segments to use (1..4), default=4 -size ............ target size (in bytes) -psnr .......... target PSNR (in dB. typically: 42)