1 पॉइंट द्वारा GN⁺ 2024-07-02 | 1 टिप्पणियां | WhatsApp पर शेयर करें

सारांश

  • OpenSSH में सुरक्षा भेद्यता मिली: OpenSSH सर्वर (sshd) में signal handler race condition के कारण Remote Code Execution (RCE) भेद्यता मिली। यह भेद्यता default configuration में sshd को प्रभावित करती है।
  • भेद्यता की उत्पत्ति: यह भेद्यता 2006 में रिपोर्ट किए गए CVE-2006-5051 का regression है, जो अक्टूबर 2020 में OpenSSH 8.5p1 में लाए गए code change के कारण पैदा हुई।
  • भेद्यता का प्रभाव: glibc-आधारित Linux सिस्टम पर इसे remotely exploit किया जा सकता है, और यह sshd के privileged code को प्रभावित करके root privileges के साथ remote code execution संभव बनाती है।
  • भेद्यता के exploitation का तरीका: इस भेद्यता का exploit करने के लिए खास code path ढूँढना पड़ता है और उसे सही समय पर interrupt करना होता है। इसके लिए पुराने OpenSSH versions से शुरुआत करके नवीनतम versions तक विस्तार किया गया।
  • Patch और mitigation: भेद्यता को ठीक करने के लिए patch और mitigation methods उपलब्ध कराए गए हैं।

SSH-2.0-OpenSSH_3.4p1 Debian 1:3.4p1-1.woody.3 (Debian 3.0r6, 2005)

सिद्धांत

  • SIGALRM handler: इस version का SIGALRM handler packet_close() को call करता है, जो buffer_free() को call करता है, जो आगे xfree() और free() को call करता है। free() asynchronous-signal-safe नहीं है।
  • malloc code analysis: malloc code में ऐसा path मिला जहाँ free() call को SIGALRM interrupt कर सकता है, और SIGALRM handler के भीतर दोबारा call होने पर भेद्यता exploit की जा सकती है।

व्यवहारिक परीक्षण

  • हमले का तरीका: DSA public key को parse करने वाले code में free() call को interrupt किया गया, और SIGALRM handler के भीतर इसका उपयोग करके remote code execution हासिल किया गया।
  • Race condition जीतना: इस race condition को जीतने के लिए लगभग 10,000 प्रयास चाहिए, और औसतन करीब 1 हफ्ता लगता है।

Timing

  • Timing strategy: network latency कम करने के लिए आख़िरी byte को बिल्कुल आख़िरी क्षण में भेजा गया और round-trip time को track करके timing adjust की गई। इससे race condition जीतने की संभावना बढ़ी।

SSH-2.0-OpenSSH_4.2p1 Debian-7ubuntu3 (Ubuntu 6.06.1, 2006)

सिद्धांत 1

  • SIGALRM handler: इस version का SIGALRM handler packet_close() को call नहीं करता, और malloc function हमेशा lock लेता है, इसलिए दूसरा समाधान चाहिए था।
  • PAM का उपयोग: यह पाया गया कि PAM का pam_end() asynchronous-signal-safe नहीं है, और इसे exploit करने योग्य path खोजे गए।

सिद्धांत 2

  • pam_start() analysis: अगर pam_start() interrupt हो जाए, तो PAM structure inconsistent state में रह सकता है, और इसे SIGALRM handler के भीतर exploit किया जा सकता है।
  • House of Mind तकनीक: हमले के लिए House of Mind तकनीक का उपयोग कर memory allocation को manipulate किया गया और root privileges के साथ remote code execution हासिल किया गया।

व्यवहारिक परीक्षण

  • हमले का तरीका: लंबे username का उपयोग करके memory allocation को manipulate किया गया, और कई pam_start() calls के ज़रिए race condition जीतने की संभावना बढ़ाई गई।

Timing

  • Timing strategy: पहले वाले Debian version में इस्तेमाल की गई timing strategy को दोबारा उपयोग किया गया, जिससे race condition जीतने की संभावना बढ़ी। औसतन 1-2 दिन लगे।

SSH-2.0-OpenSSH_9.2p1 Debian-2+deb12u2 (Debian 12.5.0, 2024)

सिद्धांत

  • SIGALRM handler: इस version का SIGALRM handler syslog() को call करता है, जो asynchronous-signal-safe न होने वाले functions को call करता है।
  • glibc analysis: glibc का syslog() malloc को call करता है, जो asynchronous-signal-safe नहीं है। साथ ही, glibc का malloc function single-threaded होने पर lock नहीं लेता।

Patch और mitigation

  • Patch: भेद्यता की रिपोर्ट OpenSSH developers को दी गई और इसे ठीक करने के लिए patch उपलब्ध कराया गया।

GN⁺ की राय

  • सुरक्षा का महत्व: OpenSSH बहुत महत्वपूर्ण security software है, और यह भेद्यता बहुत दुर्लभ प्रकार का मामला है।
  • भेद्यता exploit करने की कठिनाई: इस भेद्यता का exploit करने के लिए बेहद सटीक timing और बहुत अधिक प्रयासों की ज़रूरत होती है।
  • वैकल्पिक समाधान: OpenSSH के अलावा भी कई security solutions मौजूद हैं, और उनका साथ में उपयोग करना अच्छा है।
  • तकनीकी चुनौती: यह शोध बहुत उच्च स्तर की तकनीकी चुनौती मांगता है और security researchers के लिए बड़ी प्रेरणा बन सकता है।
  • भेद्यता mitigation: नवीनतम security patches लागू करना और security settings को मज़बूत करना महत्वपूर्ण है।

1 टिप्पणियां

 
GN⁺ 2024-07-02
Hacker News राय
  • RCE का fix लगभग एक महीने पहले सार्वजनिक रूप से "चुपचाप" किया गया था

    • जब PerSourcePenalties enabled होता है, sshd(8) child pre-authentication session process की exit status को monitor करता है
    • जब client बार-बार authentication attempt करता है या sshd crash होता है, तो penalty record की जाती है
    • यह patch binary architecture को बदलकर एक specific vulnerability को हटाता है और पूरी exploit class को mitigate करता है
  • bug को introduce करने वाले diff में function को इस तरह refactor किया गया था

    • मूल function: sigdie(const char *fmt,...)
    • refactor किया गया function: sshsigdie(const char *file, const char *func, int line, const char *fmt, ...)
    • #ifdef छूट गया था
    • अगर ज़्यादा लोगों ने pull request review की होती, तो इसे रोका जा सकता था
  • OpenSSH release notes में एक दिलचस्प टिप्पणी

    • 32-bit Linux/glibc systems पर ASLR के साथ successful exploit दिखाया गया था
    • 64-bit systems पर भी यह संभव लगता है
  • OpenBSD इस vulnerability से प्रभावित नहीं है क्योंकि SIGALRM handler syslog_r() को call करता है

    • यह syslog() का async-signal-safe version इस्तेमाल करता है
    • signal handler के अंदर code की मात्रा कम से कम रखने के लिए refactoring की ज़रूरत थी
  • musl के syslog(3) की जांच में पाया गया कि, glibc के विपरीत, इसे आसानी से exploit नहीं किया जा सकता

    • सब कुछ stack में है या reentrancy-protected static variables में है
  • FreeBSD के लिए patch जारी हो चुका है, और क्योंकि यह glibc इस्तेमाल नहीं करता, इसलिए संभवतः प्रभावित नहीं है

  • sshd_config file में 'LoginGraceTime 0' set करने से समस्या को mitigate किया जा सकता है

    • इससे denial-of-service attacks का जोखिम बढ़ता है, लेकिन remote code execution रुक जाता है
  • Debian 12 के लिए patch जारी हो चुका है, जबकि Debian 11 प्रभावित नहीं है

  • OpenSSH release notes और minimal patch के links दिए गए हैं

  • एक independent नज़रिए से, मेरा मानना है कि सिर्फ एक single vulnerability ढूँढना ही पर्याप्त होना चाहिए

    • लोगों का इसे गंभीरता से लेना या bounty देना अक्सर तभी होता है जब पूरी chain भी ढूँढी जाए