OpenBSD में 37 साल पुराना Kernel Bug मिला

मूल शीर्षक: Big Fish: Exploiting a 37-Year-Old Kernel Bug in OpenBSD

यह क्यों महत्वपूर्ण है

दशकों पुराने open source code में छिपे bugs अभी भी आधुनिक सुरक्षा तंत्र को bypass कर root access दे सकते हैं।

Calif की सुरक्षा टीम ने OpenBSD के Kernel में 37 वर्ष पुराना integer overflow बग खोजा, जो मूल BSD source से चला आ रहा था। इसे exploit कर बिना information leak के local root shell मिली। OpenBSD ने errata 026 और 018 जारी कर इसे ठीक किया।

Calif की offensive research टीम ने OpenBSD के Kernel में एक गंभीर बग की पहचान की, जिसकी जड़ें करीब 37 साल पहले मूल BSD source code में हैं। समस्या यह थी कि shared memory attachment counter को signed 16-bit short के रूप में परिभाषित किया गया था। इसकी अधिकतम सीमा 32,767 है। किसी process को बार-बार fork करने पर यह counter wrap होकर negative हो जाता है — यानी integer overflow।

इस overflow से race condition के ज़रिए use-after-free की स्थिति बनती है। इसके साथ Kernel में एक अलग out-of-bounds write मिलाने पर local privilege escalation यानी root तक पहुंच संभव हो जाती है।

exploit की प्रक्रिया में टीम ने 127 SysV shared memory segments map किए, munmap() से हटाए, और 259 processes fork करके counter को -32,643 तक wrap किया। फिर sysctl(KERN_MALLOCSTATS) से heap layout का अनुमान लगाया। IP socket allocations और IP_MULTICAST_TTL को 2 पर सेट कर 16-byte struct ip_moptions allocate की। out-of-bounds write से membership counters overwrite हुए, socket बंद करने पर PTE self-referential mapping बदली और Kernel code execution हासिल हुई।

खास बात यह है कि यह KARL, SMAP, और SMEP जैसी सुरक्षा व्यवस्थाओं के बावजूद और बिना किसी information disclosure vulnerability के काम करता है। OpenBSD के memory allocators में base address randomization न होने की वजह से boot-time allocations predictable रहती हैं — जो exploitation को आसान बनाती है। Calif ने OpenBSD को vulnerabilities और suggested patches दोनों सौंपे।

स्रोत

calif.io — मूल लेख पढ़ें →