WebP 0day का विश्लेषण
(blog.isosceles.com)- Chrome के stable update में शामिल एकमात्र security fix CVE-2023-4863 WebP image library में heap buffer overflow है, और Google ने बताया कि इसका exploit पहले से वास्तविक वातावरण में मौजूद है
- Apple SEAR की 6 सितंबर 2023 की रिपोर्ट, Apple के CVE-2023-41064, और Citizen Lab के BLASTPASS संकेतों को साथ देखने पर यह उसी bug होने की प्रबल संभावना बनती है
- विश्लेषण के अनुसार यह कमजोरी WebP lossless compression VP8L में Huffman table बनाते समय precomputed buffer size से बाहर write संभव होने की समस्या थी
- सामान्य fuzzing के लिए इसे पकड़ना कठिन था क्योंकि इसके लिए कई maximum-size Huffman tables और एक खास invalid table को क्रम से बनाना पड़ता था, यानी कठिन trigger condition थी
- upstream libwebp patch पर्याप्त दिखता है, लेकिन libwebp browser, operating system और apps में व्यापक रूप से इस्तेमाल होता है, इसलिए patch rollout और sandboxing महत्वपूर्ण हैं
Chrome patch का BLASTPASS से जुड़ाव क्यों है
- Google ने सितंबर 2023 की शुरुआत में Chrome stable update में Apple Security Engineering and Architecture(SEAR) द्वारा रिपोर्ट की गई CVE-2023-4863 को fix किया
- यह कमजोरी WebP image library में heap buffer overflow है
- Google ने कहा कि उसे पता है कि “CVE-2023-4863 का exploit वास्तविक वातावरण में मौजूद है”
- इसी समय Citizen Lab ने Washington DC स्थित एक civil society organization से जुड़े व्यक्ति के iPhone में संदिग्ध गतिविधि पाई
- BLASTPASS iMessage zero-click zero-day exploit से जुड़ा मामला है, जिसका उपयोग NSO Group के Pegasus spyware को फैलाने में हुआ
- Citizen Lab ने अपनी technical analysis Apple को देने के बाद, Apple ने 7 सितंबर की security advisory में दो CVE जारी किए
- Apple का पहला CVE CVE-2023-41061 इस बात से जुड़ता है कि PassKit attachment के साथ image exploit जोड़कर iMessage के BlastDoor sandbox को bypass किया गया
- ऐसा लगता है कि malicious image को किसी दूसरे non-sandboxed process में process किया गया
- दूसरा CVE CVE-2023-41064 Apple ImageIO में buffer overflow vulnerability है
- ImageIO Apple का image parsing framework है, जो कई image formats की पहचान कर सही decoder से जोड़ता है
- तकनीकी विवरण न होने के कारण यह पुष्टि नहीं हो सकी कि CVE-2023-41064 किस image format को प्रभावित करता है
- Apple ने हाल में ImageIO में WebP support जोड़ा था, Apple security team ने 6 सितंबर को Chrome को WebP vulnerability report की, और Google ने 5 दिनों के भीतर emergency patch जारी कर इसे actively exploited के रूप में चिह्नित किया; इन कारणों से BLASTPASS और CVE-2023-4863 के एक ही bug होने की संभावना अधिक है
libwebp patch ने vulnerability का स्थान कैसे दिखाया
- Chrome security advisory के bug ID और libwebp open source commit को मिलाने पर Fix OOB write in BuildHuffmanTable patch को CVE-2023-4863 से जोड़ा जा सकता है
- यह patch Apple की रिपोर्ट के अगले दिन, 7 सितंबर 2023 को बनाया गया
- यह vulnerability WebP के lossless compression support VP8L में है
- WebP lossless compression pixels को 100% सटीकता से store और restore करने के लिए Huffman coding का उपयोग करता है
- आधुनिक implementation conceptual tree structure की जगह tables का उपयोग करके decoding को optimize करती है
- vulnerable version fixed tables से मिले precomputed buffer size के आधार पर memory allocate करता था, और उसी space में सीधे Huffman table बनाता था
- नए version में पहले pass में output table के लिए आवश्यक total size calculate किया जाता है, लेकिन actual write नहीं होती
- अगर total size precomputed buffer से बड़ा हो, तो अब बड़ी allocation बनाई जाती है
- मुख्य flow
src/dec/vp8l_dec.cकेReadHuffmanCodesमें allocate होने वालेhuffman_tablesऔरReadHuffmanCodeके अंदरVP8LBuildHuffmanTable/BuildHuffmanTablecalls से जुड़ा है- Huffman tables पाँच segments में बँटे होते हैं, जिनकी alphabet sizes अलग-अलग होती हैं
- overflow पैदा करने के लिए इन पाँचों tables को बहुत सावधानी से बनाना पड़ता है
trigger file बनाने की प्रक्रिया
- WebP lossless compression input pixels की frequency analysis के आधार पर अक्सर आने वाले values को छोटे bit sequences और कम आने वाले values को लंबे bit sequences देता है
- code इस तरह बनाए जाते हैं कि decoder हमेशा bit sequence lengths को अलग-अलग पहचान सके
- compressed image में mapping को दोबारा बनाने के लिए statistical information और code assignment information शामिल करनी पड़ती है
- WebP file size घटाने के लिए Huffman table को भी Huffman coding से compress करता है
- इसी संरचना के कारण vulnerability का analysis और trigger बनाना जटिल हो जाता है
@mistymntncopने ऐसा harness code दिया जो arbitrary Huffman coding data, यानी code lengths, के साथ valid-format WebP बना सकता है- इस harness से target
BuildHuffmanTablecall को arbitrarycode_lengthsarray दिया जा सका
- इस harness से target
- manual experiments में
BuildHuffmanTableके अंदर histogram,num_open,num_nodes, औरReplicateValueकी start position को track करने वालेkeyvalue के बीच interaction बहुत जटिल थाcount[0]सेcount[8]तक का root table सीधेtotal_sizeपर बड़ा असर नहीं डालता, लेकिन बाद की internal state बदल सकता हैcount[9]सेcount[15]तक के second level tables अंतिमtotal_sizeको सीधे प्रभावित करते हैं
- Mark Adler का enough.c alphabet size, root table size, और maximum code length के लिए संभव maximum Huffman tree lookup table का histogram output करता है
- libwebp के
kTableSizeपर टिप्पणी में लिखा है कि यह मान इसी tool से calculate किए गए हैं - इस tool से precomputed buffer size को reproduce किया जा सका, और
@mistymntncopके tool से यह भी पुष्टि हुई कि “enough” द्वारा बनाए गए code lengthshuffman_tablesallocation को 100% तक भर देते हैं
- libwebp के
वास्तविक overflow किन शर्तों में होता है
enoughtool valid और complete codes के लिए maximum value calculate करता है- छोटे tables में से एक, symbol size 40, root table 8-bit, और maximum code length 15 के लिए maximum size 410 है
BuildHuffmanTableजिन codes को valid मानता है, उनमें 410 से बड़ा size बनाने वाला कोई मामला नहीं मिला
- overflow केवल valid Huffman tree से नहीं, बल्कि अंतिम चरण में invalid Huffman tree डालने पर होता है
- पहले 4 valid Huffman trees से maximum-size output table बनाया जाता है
- अंतिम table में invalid Huffman tree डालने पर final consistency check से पहले
ReplicateValuebounds के बाहर write कर सकता है
- reproduction के लिए vulnerable libwebp commit
7ba44f80f3b94fc0138db159afea770ef06532a0checkout करके AddressSanitizer चालू किया जाता है, फिर@mistymntncopके PoC code सेbad.webpबनाकरdwebpसे decode किया जाता है- AddressSanitizer
BuildHuffmanTableमेंheap-buffer-overflowreport करता है - report के अनुसार write 11816-byte region के ठीक बाद वाले address पर होती है
- AddressSanitizer
huffman_tablesको overflow कराने वाले कई inputs मौजूद हैं- मिले हुए code lengths में ऐसे मामले भी हैं जो
huffman_tablesallocation के अंत से 400 bytes आगे तक write करते हैं - write होने वाले value पर control आंशिक ही हो, तब भी exploit संभव दिखता है
- मिले हुए code lengths में ऐसे मामले भी हैं जो
- invalid input का Huffman tree आंशिक रूप से unbalanced है, और unbalanced branch के एक हिस्से में ऐसे बहुत से internal nodes होते हैं जिनके कोई children नहीं होते
- यह संरचना ऐसे
keyindexes बनाती है जिन तक valid tree से पहुँचना संभव नहीं
- यह संरचना ऐसे
patch overflow को कैसे रोकता है
- शुरू में यह लगा कि patch आवश्यक size के अनुसार buffer को dynamically बढ़ाकर heap overflow रोकता है
- वास्तव में patched version का पहला pass
BuildHuffmanTableचलाते हुए आवश्यक total size calculate करता है, लेकिन table में write नहीं करता- जो invalid input overflow कराता था, उसमें पहले pass के दौरान
BuildHuffmanTablefail होकर 0 return करता है - पहले pass में write नहीं होने के कारण invalid tree partial process होने पर भी out-of-bounds write नहीं होती
- जो invalid input overflow कराता था, उसमें पहले pass के दौरान
- valid और complete codes में ऐसा कोई मामला नहीं मिला जो वही overflow कराए, इसलिए यह patch पर्याप्त दिखता है
fuzzing के लिए इसे पकड़ना कठिन क्यों था
- libwebp लंबे समय से Google OSS-Fuzz में fuzz हो रहा था, और WebP lossless support भी व्यापक रूप से fuzz किया जा रहा था
- मुख्य कठिनाई यह थी कि format भी जटिल था और trigger conditions भी
- अरबों संभावनाओं में से alphabet size 280 और 256 के लिए पहले 4 maximum-size Huffman tables बनानी पड़ती हैं
- इसके बाद alphabet size 40 के लिए बहुत खास आकार का invalid Huffman table बनाना पड़ता है
- किसी भी चरण में 1 bit भी गलत होने पर image decoder error देकर सुरक्षित रूप से बंद हो जाता है
- Google ने WebP 0day fix के बाद WebP Huffman routines के लिए dedicated नया fuzzer जारी किया
- उस fuzzer को चलाने पर भी CVE-2023-4863 नहीं मिला
- standard bit-flip mutation, code coverage feedback loop, और AFL++ के CmpLog जैसे input-state आधारित तरीकों से भी इस extreme state तक पहुँचने के लिए जरूरी intermediate steps पार करना कठिन है
- Quarkslab के TritonDSE जैसी dynamic symbolic execution techniques में संभावना हो सकती है, हालांकि इसकी पुष्टि नहीं हुई
- यह FreeType की Load_SBit_Png vulnerability जैसी प्रकृति की नहीं है
- Load_SBit_Png इसलिए नहीं मिली थी क्योंकि fuzzing harness API usage pattern को पर्याप्त रूप से reflect नहीं कर रहा था
- CVE-2023-4863 में harness की कमी से अधिक, vulnerability की अपनी constraints के कारण fuzzing कठिन थी
प्रभाव का दायरा और response status
- Citizen Lab ने वास्तविक वातावरण में उपयोग किए गए advanced exploit को capture किया, और Apple तथा Chrome ने कुछ ही दिनों में अरबों users तक updates पहुँचाए प्रतीत होते हैं
- उस समय Android पर प्रभाव की संभावना अभी बाकी थी
- Android का BitmapFactory Apple ImageIO की तरह image decoding संभालता है और libwebp को support करता है
- उस समय Android security advisory में CVE-2023-4863 fix शामिल नहीं था, लेकिन fix AOSP में merge हो चुका था
- यदि Android प्रभावित होता, तो Signal या WhatsApp जैसे apps में remote exploit की संभावना बन सकती थी
- उम्मीद थी कि अक्टूबर security advisory में यह fix आएगा
- upstream libwebp patch सही तरीके से लागू किया गया लगता है और जहाँ जरूरत है वहाँ फैल रहा है
- libwebp बहुत जगह इस्तेमाल होता है, इसलिए patch पूरी तरह फैलने में समय लग सकता है
- image decoding जैसी zero-click remote exploit attack surface के करीब आने वाले complex parser code की security केवल fuzzing से सुनिश्चित करना कठिन है, और proactive source code review तथा उचित sandboxing में निवेश आवश्यक है
तकनीकी जानकारी के खुलासे की असमानता
- जब vendor पर्याप्त technical details जारी नहीं करते, तो defenders के लिए vulnerability impact को verify करना कठिन हो जाता है
- attackers के पास N-day vulnerabilities को track और exploit करने की मजबूत प्रेरणा होती है, और details न होने पर भी वे बहुत धीमे नहीं पड़ते
- defenders के पास अक्सर इस स्तर की technical analysis करने के लिए पर्याप्त resources नहीं होते
- अगर बुनियादी attack behavior information भी छिपा दी जाए, तो ऐसी असमानता पैदा होती है जिसमें attackers के पास defenders से अधिक vulnerability और exploit insight होती है
1 टिप्पणियां
Hacker News की रायें
यह बग 2015 के Timsort बग से सबसे ज़्यादा मिलता-जुलता दिखता है [1]
Timsort CPython से निकला एक स्मार्ट hybrid sorting algorithm है, और OpenJDK समेत कई implementations ने इसे लगभग source-level translation की तरह अपना लिया था। यह sorted runs का stack बनाए रखता है, और एक प्रमाण था कि संरचनात्मक रूप से संभव अधिकतम stack size के लिए पर्याप्त रूप से छोटा finite upper bound है, लेकिन मूल CPython implementation उस प्रमाण से ठीक-ठीक मेल नहीं खाता था, इसलिए दुर्लभ मामलों में stack overflow संभव था। इसलिए CPython में यह एक गंभीर security bug था, लेकिन Java में उस स्थिति में exception throw होता था, इसलिए OpenJDK में यह उसी तरह की security problem नहीं था
इसी तरह यह WebP बग भी इसलिए हुआ कि maximum table size औपचारिक रूप से prove किया गया था, लेकिन actual source code में डाली गई value उससे मेल नहीं खाती थी। ऐसे bugs को verify करना और review करना दोनों मुश्किल है। Proof मौजूद है और source भी उस proof से मेल खाता लगता है, इसलिए आसानी से लगता है कि सब ठीक है। यह accessible formal verification और memory-safe languages के उपयोग की कड़ी ज़रूरत का संकेत लगता है, मानव review से भी ज़्यादा। Type system को भी formal verification के एक कमजोर रूप के तौर पर देखा जा सकता है
[1] http://envisage-project.eu/wp-content/uploads/2015/02/sortin...
https://github.com/google/wuffs
उसी तरह के checks explicit रूप से लिखकर इस requirement को satisfy किया जा सकता है, लेकिन अगर आप मान रहे थे कि high-performance software होने के कारण checks की ज़रूरत नहीं है, तो WUFFS tool जहां code accept नहीं करेगा, वहां आपके गलत होने का पता चलने की संभावना बहुत ज़्यादा है। यह full formal verification से कमजोर है, लेकिन program safety के लक्ष्य के लिए बड़ा improvement है और किसी इंसान के “LGTM” कहने से कहीं बेहतर है
इस लेख में “अभी क्या patch करना चाहिए” के अलावा भी कुछ दिलचस्प बातें थीं। Vulnerability की जगह और fix पता होने पर भी exploit PoC reproduce करने में काफी काम लग सकता है, और image decoder के अंदर lossless decompressor fuzzing के खिलाफ काफी मजबूत हो सकता है। Security वाले लोगों के लिए यह शायद obvious हो, लेकिन non-expert के तौर पर पढ़ना दिलचस्प था
कुछ सवाल हैं जिनका साफ जवाब नहीं मिल पा रहा। 1) Brave जैसे दूसरे Chrome-based browsers भी प्रभावित हैं? 2) Desktop Chrome भी प्रभावित है, या यह सिर्फ mobile की समस्या है? 3) मैंने WebP के बारे में कभी क्यों नहीं सुना? क्या मैं दुनिया से कटा हुआ था, या यह mobile-first technology है?
Desktop Chrome भी Linux और Windows दोनों पर प्रभावित था। Chrome अपनी libwebp bundle करता है, इसलिए अगर Linux distribution ने अभी patch नहीं किया हो, तब भी Chrome updated है तो कम से कम browser attack के लिहाज से ठीक है
प्रमुख browsers और operating systems आश्चर्यजनक रूप से कई अपरिचित image formats support करते हैं। उदाहरण के लिए, MacOS में KTX2(Khronos Texture Container) और Android में DNG(Adobe Digital Negative) load किया जा सकता है। Attackers के explore करने के लिए कई रोचक और high-exposure attack surfaces हैं
Bug codec library में है, और WebP का ecosystem implementation के लिहाज से practically single-library है, इसलिए सभी वही library इस्तेमाल करते हैं और सभी को patch करना होगा
Google ने 10 साल पहले WebP को push किया था, लेकिन लंबे समय तक यह Chrome-only रहा, इसलिए ज्यादा traction नहीं मिला। यह ठीक से standardize भी नहीं हुआ, हालांकि open source है। Low-quality images में यह JPEG से बेहतर compress करता है, लेकिन high-quality images में colors bleed और blur होने की tendency है। विडंबना यह है कि जब WebP widely supported होना शुरू हुआ, तब तक AVIF और JPEG XL की वजह से यह technically obsolete होने लगा था
अगर कोई Android डिवाइस सपोर्ट खत्म होने की स्थिति में है, तो क्या वह अभी असल में चल रहे 0-क्लिक एक्सप्लॉइट के संपर्क में है? या सिर्फ SMS ऐप, Chrome, WhatsApp, Signal वगैरह अपडेट करने से मुख्य इनपुट रास्ते पर्याप्त रूप से बंद हो जाते हैं?
सपोर्ट खत्म हो चुके डिवाइसों पर भी Chrome अपडेट करने से Chrome वाली समस्या ठीक हो जाती है, लेकिन Signal या WhatsApp जैसे ऐप्स को ठीक करने के लिए Android OS upgrade की जरूरत होती है। Chrome अपना libwebp बंडल करता है, लेकिन messaging apps और Gmail जैसे ज्यादा exposed apps इमेज दिखाने के लिए OS द्वारा दिए गए interfaces का इस्तेमाल करते हैं। जिन Android डिवाइसों को security support मिल रहा है, उनके लिए अक्टूबर की शुरुआत से updates आने की उम्मीद है
“असल में huffman_tables को overflow कराने वाले inputs बहुत हैं” यह ज्यादा सामान्य समस्या जैसा लगता है। संरचना ऐसी है कि software A lookup table B बनाता है, और वह table input data stream को process करने में इस्तेमाल होती है
अब security या correctness की थोड़ी भी परवाह करने वाले developer को दो में से एक बात सुनिश्चित करनी होगी। A) software इस तरह लिखा गया हो कि कोई भी input data lookup table का misuse न कर सके या उसे fail न करा सके, या B) इसका इस्तेमाल केवल controlled environment में हो, जैसे point-to-point communication जहां दोनों communicating parties trusted हों, और यह guarantee हो कि stream कभी lookup table का misuse नहीं करेगी या abnormal behavior पैदा नहीं करेगी
B छोटे group या office के अलावा लगभग असंभव है, और internet scale पर तो सचमुच असंभव है, इसलिए अंततः A ही बचता है। आगे की software engineering में generalized best practice यह होगी कि अगर किसी भी वजह से lookup table इस्तेमाल की जाती है, तो developer यह सुनिश्चित करे कि वह table सभी data types पर सही तरह काम करे, या invalid data को table तक पहुंचने से पहले detect करके उचित तरीके से handle करे
अगर मैं serious security researcher होता और समय होता, तो past में lookup tables से किसी भी तरह संबंधित सभी security vulnerabilities की list इकट्ठी करके एक-एक पढ़ता और commonalities की तुलना करता। शायद कोई pattern मिलेगा। फिर data streams में lookup tables इस्तेमाल करने वाले सभी software को छानकर vulnerabilities audit करता, लेकिन यह किसी एक व्यक्ति के जीवनभर का काम नहीं, team sport है
NSO को यह bug खोजने में source code公开 ने कितनी मदद की होगी? अगर code केवल binary blob होता, तो क्या modern decompilers ही code को समझने और ऐसे obscure bug को खोजने के लिए पर्याप्त होते?
हैरानी की बात है कि यह image format का “new” हिस्सा नहीं है। Huffman compression 70 साल से ज्यादा पुराना है, और canonical Huffman भी उससे बस कुछ दशक कम पुराना है; यहां तक कि JPEG भी Huffman इस्तेमाल करता है। यह दशकों पुरानी तकनीक है और implementation methods पर अनगिनत लेख हैं, इसलिए अब तक तो कई implementations में इसके bugs साफ हो जाने चाहिए थे
मैंने पहले JPEG specification पढ़ी थी और decoder भी लिखा था, इसलिए WebP specification देखी: https://developers.google.com/speed/webp/docs/webp_lossless_...
महत्वपूर्ण बात section 6 में है। पहली नजर में जो दिखता है वह यह है कि code कैसे बनता है, यह JPEG specification के विपरीत स्पष्ट नहीं है। JPEG में process के बारे में पढ़ने में आसान flowcharts बहुत हैं। WebP LZH/deflate(zlib) जैसा दिखता है, और “specification” से ज्यादा comments वाले कुछ source code snippets का collection लगता है
GIF, JPEG, PNG के बाद WebP decoder भी लिखने का मन था, लेकिन ऊपर की “specification” देखकर लगता है मानो यह लगभग न लिखने को कह रही हो
Huffman tree implementations में कई अलग-अलग trade-offs होते हैं, इसलिए यह कहना मुश्किल है कि पुरानी तकनीक होने से सारे bugs साफ हो गए होंगे। Charles Bloom ने कहा था कि 1997 का Huffman optimization पर निर्णायक paper [1] भी 2010 तक ज्यादा जाना-पहचाना नहीं था, और कई optimizations फिर से खोजे गए और फिर भुला दिए गए। इसलिए inefficient implementations बहुत होने की संभावना है
[1] https://cbloomrants.blogspot.com/2010/08/08-12-10-lost-huffm...
अब तो लगता है कि images देखने तक में security की चिंता किए बिना काम नहीं चलता
यह unsafe language C इस्तेमाल करने से होने वाली typical growing pains जैसा लगता है। Browser speed की वजह से इसका आकर्षण समझ आता है, लेकिन उम्मीद है कि industry उस तरीके से बाहर निकलेगी जो C इस्तेमाल शुरू करने के बाद से दोहराई जाती रही वही गलतियां बढ़ावा देता है
यह तेज होने के कारण rivets की जगह self-tapping screws से पुल बनाने जैसा है। जब पुल झुकने लगे, तो और screws लगा दो—ऐसी सोच
“अच्छी बात यह है कि Apple और Chrome ने इस समस्या की तात्कालिकता के हिसाब से शानदार प्रतिक्रिया दी” कहना समझना मुश्किल है। इस समस्या को सिर्फ Chrome वाली श्रेणी में डालने वाला Google ही था। पिछले 7 दिनों को ही देखें तो सभी प्रमुख Linux distributions को अपडेट push करने पड़े, और Red Hat ने इसे 9.6 स्कोर दिया। 1 अरब से ज़्यादा बार pull की गई Python Docker images, Puppeteer, WordPress, Node.js वगैरह भी प्रभावित हुए, लेकिन CRBug अभी भी private है
BleepingComputer जैसी साइटों ने बिना जांच के जो दिखा वही रिपोर्ट किया, और इस issue को third party की तरह treat करने वाली कई security firms ने भी ऐसा ही किया। जब आपको पता हो कि सामने वाले ने due diligence नहीं किया, तो trust बनाना सचमुच मुश्किल होता है
Adam Caudill ने 1Password के शुरुआती patch के उदाहरण के साथ “Whose CVE is it anyway?”[0] नाम का अच्छा लेख लिखा, और उसमें यहां बताई जा रही समस्या को ठीक से पकड़ा है। Citizen Lab ने यह बताने से इनकार किया कि दोनों issues जुड़े हुए हैं या नहीं, लेकिन कुछ चीज़ें देखने के लिए जीनियस होना ज़रूरी नहीं है
[0]: https://adamcaudill.com/2023/09/14/whose-cve-is-it-anyway/
लेखक भी कहता है कि कई दूसरे systems को patch करना चाहिए। लेकिन 1 अरब बार pull की गई Python Docker images में से कितनी untrusted WebP images render करती होंगी? Node आदि के लिए भी यही बात है। बेशक, उन्हें जल्दी patch करना चाहिए, लेकिन यह iOS/Android/Chrome वाली श्रेणी का नहीं है
दुनिया भर के करोड़ों लोग इस library से प्रभावित हैं, और हर किसी के इस्तेमाल किए जाने वाले devices और apps के हिसाब से इसका असर कई गुना बढ़ जाता है
मुझे C पसंद है, लेकिन मेरा मानना है कि दुनिया भर में करोड़ों लोगों द्वारा इस्तेमाल की जाने वाली libraries में C का इस्तेमाल नहीं होना चाहिए। ऐसी core libraries में risk ratio बहुत ज़्यादा है। C expert भी कभी न कभी गलती कर ही देगा
लगता है fix यह है https://github.com/webmproject/libwebp/commit/dce8397fec159c...
“malloc fail” कहना निराशाजनक है। Slack, Discord, Teams, सभी modern OS तक प्रभावित हैं
C/C++ और dynamic languages undefined behavior और subtle bugs की सतह को बहुत बड़ा बना देती हैं, और सबसे होशियार developers के लिए भी इन्हें lint करना मुश्किल और बोझिल होता है। foundational libraries को seL4 जैसे तरीके से formal verification से गुजरना चाहिए
एक और समस्या FOSS में फैली गैर-पेशेवरता, और rigor, quality, correctness, security के प्रति उपेक्षा है। मौजूदा तरीके से रेत पर साम्राज्य खड़ा करना मूर्खता है