- curl 8.4.0 में पाए गए महत्वपूर्ण सुरक्षा मुद्दे CVE-2023-38545 पर लेख, जिसे लंबे समय में curl की सबसे गंभीर सुरक्षा समस्याओं में से एक माना गया
- समस्या heap overflow की है, जो SOCKS5 proxy से कनेक्ट करने वाले function में एक खामी के कारण होती है
- यह समस्या 2020 की शुरुआत में तब लाई गई थी, जब function को blocking call से non-blocking state machine में बदला गया था; यह SOCKS5 के ज़रिए बड़े पैमाने पर parallel transfer की performance बेहतर करने के लिए किया गया था
- खामी state machine की INIT state में है, जहाँ एक local variable सेट किया जाता है और curl यह तय करता है कि host को resolve करना है या नाम को proxy तक भेजना है। अगर host name बहुत लंबा हो, तो code local resolution mode में स्विच हो जाता है, जिससे host name target buffer से लंबा होने पर memory overflow हो सकता है
- अगर buffer size 65541 bytes से छोटा सेट किया गया हो और host name buffer size से लंबा हो, तो overflow हो सकता है। इसके लिए किसी दुर्भावनापूर्ण actor को फ़ॉर्मूले के अनुसार बहुत बड़ा host name इनपुट देकर खामी ट्रिगर करनी होती है
- libcurl इस्तेमाल करने वाले client जो SOCKS5 proxy के माध्यम से HTTPS server तक पहुँचते हैं, उनके लिए server को नियंत्रित करने वाला attacker HTTP 30x response के ज़रिए application को manipulated redirect लौटाकर heap buffer overflow ट्रिगर कर सकता है
- इस समस्या को curl 8.4.0 में इस तरह ठीक किया गया कि host name बहुत लंबा होने पर remote resolution से local resolution पर स्विच करने के बजाय curl error लौटाता है। इस scenario के लिए एक dedicated test case भी जोड़ा गया है
- लेखक मानते हैं कि अगर curl को C की जगह memory-safe language में लिखा गया होता, तो यह खामी नहीं आती, लेकिन curl को किसी दूसरी language में port करना फिलहाल योजना में नहीं है
- लेखक का सुझाव है कि memory-safe language में लिखी गई अधिक dependencies को अनुमति देना, इस्तेमाल करना और support करना एक व्यावहारिक तरीका है, और धीरे-धीरे curl के कुछ हिस्सों को बदला भी जा सकता है
- लेखक अपनी गलती स्वीकार करते हैं और माफ़ी मांगते हैं, और कहते हैं कि बेहतर test set से इस खामी का पता लगाया जा सकता था। वे यह भी बताते हैं कि static code analyzer इस function में समस्या नहीं पकड़ सके
- लेखक निष्कर्ष निकालते हैं कि 20 अरब से अधिक instances में इंस्टॉल किए गए code में heap overflow भेजना ऐसा अनुभव नहीं है जिसकी सिफारिश की जाए
1 टिप्पणियां
Hacker News राय