FlawOpen

flawopen.com/Teardowns/cve-2026-55269-android-snooplogger-heap-write

● CVE-2026-55269 · CVSS 7.8 · उच्च
सुरक्षा अनुसंधान · FlawOpen

CVE-2026-55269: Android Bluetooth SnoopLogger में heap buffer के बाहर लिखना

CVE-2026-55269 Android Bluetooth SnoopLogger की memory-safety खामी है, जिससे स्थानीय privilege escalation हो सकता है। डेवलपर logging की एक खास configuration में छोटा controller packet पर्याप्त जगह के बिना fixed-string write तक पहुँच सकता था। Google ने उलटी resize condition ठीक की और parse की गई लंबाई सीमित की।

💡 आसान भाषा में (ELI5)

कल्पना करें कि कर्मचारी संकरे पार्सल पर “PROHIBITED” की मुहर लगा रहा है। पहले पार्सल में अतिरिक्त पैकिंग होनी चाहिए, लेकिन उलटे संकेत के कारण सबसे छोटे पार्सल में यह कदम छूट जाता था। सुधार मुहर से पहले छोटे packet में जगह जोड़ता है और दर्ज लंबाई को उपलब्ध आकार तक सीमित करता है।

इस पेज के मुख्य शब्द

SnoopLogger
Android Bluetooth का code जो capture किए गए HCI packets को filter और record करता है। प्रभावित path के लिए वर्णित filtered logging configuration जरूरी है।
HCI ACL packet
Bluetooth host और controller के बीच data packet। Upstream बदलाव बताता है कि संबंधित filter चालू होने पर असामान्य रूप से छोटा packet buffer-capacity की समस्या खोल सकता है।
EXTRA_BUF_SIZE
Filtered packet में fixed “PROHIBITED” marker लिखने से पहले जो अतिरिक्त capacity जोड़ी जाती है। सुधार छोटे packets के लिए यह जगह सुनिश्चित करता है।
CWE-20
Input validation की कमी। CISA ADP ने यह कमजोरी जोड़ी; वास्तविक दोष buffer handling में उलटी size condition थी।

फ्रेमवर्क मैपिंग

  • MITRE CWE के लिए FlawOpen की वैचारिक मैपिंग; किसी विक्रेता या CVE रिकॉर्ड ने इस शोध प्रदर्शन को यह कमजोरी ID नहीं दी है। CWE-20

मूल कारण विश्लेषण (Root Cause)

अक्टूबर 2026 का Android bulletin CVE-2026-55269 को Android 16, 16 QPR2 और 17 के लिए सूचीबद्ध करता है। NVD में वर्तमान में CISA ADP का CVSS 3.1 स्कोर 7.8 (High) दिखता है, जबकि Google bulletin में System प्रविष्टि को Critical कहता है; ये अलग आकलन हैं। Upstream Bluetooth commit में SnoopLogger::FilterCapturedPacket filtered PBAP/MAP path में जाता है और PayloadStrip fixed PROHIBITED marker लिख सकता है। कमजोर condition packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE छोटे packet के लिए resize छोड़ देती थी, जिससे capacity कम पड़ती थी। सुधार operator को <= करता है और length को packet.size() + PACKET_TYPE_LENGTH तक सीमित करता है। Commit में malicious Bluetooth controller द्वारा छोटा HCI ACL packet भेजने का वर्णन है, लेकिन संबंधित Developer Options और SnoopLogger filter सक्रिय होना जरूरी है। यह इंटरनेट से उपलब्ध Android service नहीं है। कोई exploit payload नहीं दिया गया है। अपडेट का मिलना डिवाइस निर्माता पर निर्भर है।

हमले का चरण-दर-चरण प्रवाह

चरण 1

एक खास logging configuration चालू है

Commit में Developer Options के तहत Bluetooth SnoopLogger filtering चालू और PBAP/MAP filter profile magic होना बताया गया है। इसे सभी Android devices या default configuration पर लागू न मानें।

चरण 2

Controller बहुत छोटा packet भेजता है

Malicious Bluetooth controller filtered capture path में छोटा HCI ACL packet भेज सकता है। लेख packet bytes और संचालन संबंधी trigger विवरण छोड़ता है।

चरण 3

उलटी condition जरूरी जगह जोड़ना छोड़ती है

FilterCapturedPacket में > था, जबकि <= चाहिए था। छोटे packets को EXTRA_BUF_SIZE नहीं मिलता था, फिर भी बाद में filtering छोटे buffer में PROHIBITED लिख सकती थी।

चरण 4

Upstream सुधार buffer सीमा फिर से लागू करता है

सुधार योग्य छोटे packets में जगह जोड़ता है और parsed length को उपलब्ध data तक सीमित करता है। निर्माता से उपलब्ध होने पर security patch level 2026-10-01 या बाद का अपडेट लगाएँ।

सोर्स कोड: कमज़ोर बनाम सुरक्षित कार्यान्वयन

यह अंश Google के सार्वजनिक बदलाव के अनुरूप है: comparison उलटकर छोटे packet को marker के लिए अतिरिक्त capacity दी जाती है और parsed length उपलब्ध आकार तक सीमित होती है। Commit छोटे packets के tests भी जोड़ता है। यह upstream fix का संक्षिप्त उदाहरण है, device के लिए standalone patch नहीं; निर्माता का patch level 2026-10-01 या बाद का अपडेट लगाएँ।

सोर्स अंश: snoop_logger.cc

कमज़ोर कार्यान्वयन
if (packet.size() + EXTRA_BUF_SIZE > DEFAULT_PACKET_SIZE) {
  // छोटे पैकेट में filter marker के लिए जगह होनी चाहिए।
  packet.resize(packet.size() + EXTRA_BUF_SIZE);
}

// इसके बाद PayloadStrip तय PROHIBITED marker लिखता है।
सुरक्षित और सुदृढ़ फ़िक्स
if (packet.size() + EXTRA_BUF_SIZE <= DEFAULT_PACKET_SIZE) {
  // फ़िल्टर करने से पहले पात्र छोटे पैकेट में padding जोड़ें।
  packet.resize(packet.size() + EXTRA_BUF_SIZE);
}

// Parsed length को आकार बदले गए पैकेट की सीमा में रखें।
length = std::min(
    length, static_cast<uint32_t>(packet.size() + PACKET_TYPE_LENGTH));

इंजीनियरिंग और सिस्टम सुरक्षा चेकलिस्ट

स्रोत