
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) का पता Makefile.vc सिस्टम पथ में उपलब्ध Visual Studio कंपाइलर (cl.exe) से लगाता है।
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 स्रोतों से बिल्ड करते समय, makefiles उत्पन्न करने के लिए आपको cmake चलाना होगा।
mkdir build && cd build && cmake ../ make make install
यदि आप इनमें से किसी भी एक्ज़ीक्यूटेबल को भी चाहते हैं, तो आपको उन्हें CMake के माध्यम से सक्षम करना होगा, उदाहरण के लिए:
cmake -DWEBP_BUILD_CWEBP=ON -DWEBP_BUILD_DWEBP=ON ../
या अपने पसंदीदा इंटरफ़ेस (जैसे ccmake या cmake-qt-gui) के माध्यम से।
विंडोज़ पर यूनिकोड समर्थन के लिए -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) आवश्यक है।
वर्तमान में निम्नलिखित फ़ंक्शन मैप किए गए हैं: डिकोड: WebPGetDecoderVersion WebPGetInfo WebPDecodeRGBA WebPDecodeARGB WebPDecodeBGRA WebPDecodeBGR WebPDecodeRGB
एन्कोड: WebPGetEncoderVersion WebPEncodeRGBA WebPEncodeBGRA WebPEncodeRGB WebPEncodeBGR WebPEncodeLosslessRGBA WebPEncodeLosslessBGRA WebPEncodeLosslessRGB WebPEncodeLosslessBGR
अधिक विस्तृत बिल्ड निर्देशों के लिए swig/README देखें।
swig-जनित JNI रैपर कोड बनाने के लिए enum समर्थन हेतु कम से कम JDK-1.5 (या समकक्ष) आवश्यक है। आउटपुट एक shared object / DLL होना चाहिए जिसे System.loadLibrary("webp_jni") के माध्यम से लोड किया जा सके।
swig-जनित Python एक्सटेंशन कोड बनाने के लिए कम से कम Python 2.6 आवश्यक है। Python < 2.6 libwebp.swig या जनित कोड में कुछ छोटे बदलावों के साथ बिल्ड हो सकता है, लेकिन यह परीक्षण नहीं किया गया है।
examples/ निर्देशिका में छवियों को एन्कोड (cwebp) और डिकोड (dwebp) करने के लिए टूल हैं।
सबसे आसान उपयोग इस प्रकार होगा: cwebp input.png -q 80 -o output.webp
यह इनपुट फ़ाइल को 0->100 पैमाने पर गुणवत्ता कारक 80 का उपयोग करके WebP फ़ाइल में परिवर्तित करेगा (0 सबसे कम गुणवत्ता, 100 सबसे अच्छी। डिफ़ॉल्ट मान 75 है)। आप -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)