
बिना डोंगल, बिना रूट ब्लूटूथ सुरक्षा मूल्यांकन उपकरण, जो Airoha SDK भेद्यता श्रृंखला (CVE-2025-20700/20701/20702) से प्रभावित वायरलेस ईयरबड्स के लिए है।
संस्करण 1.0.0
Airoha SDK भेद्यता श्रृंखला (CVE-2025-20700 / CVE-2025-20701 / CVE-2025-20702) से प्रभावित वायरलेस ईयरबड्स के लिए Bluetooth सुरक्षा मूल्यांकन उपकरण। आस-पास के डिवाइसों को स्कैन करता है, ज्ञात-प्रभावित Airoha-आधारित चिपसेट की फ़िंगरप्रिंटिंग करता है, और अनधिकृत GATT पहुँच तथा RACE प्रोटोकॉल पहुँच-क्षमता की जाँच करता है - पूरी तरह से OS Bluetooth स्टैक (BlueZ) के माध्यम से bleak द्वारा। किसी बाहरी Bluetooth डोंगल की आवश्यकता नहीं है और root की आवश्यकता नहीं है। परिणाम तकनीकी विवरण के साथ सरल भाषा में रिपोर्ट किए जाते हैं, ताकि आप गहरे Bluetooth ज्ञान के बिना उन पर कार्रवाई कर सकें।
यह उपकरण उन डिवाइसों के मूल्यांकन के लिए है जिनके आप मालिक हैं या जिनके परीक्षण के लिए आपके पास स्पष्ट प्राधिकरण है। GATT और RACE जाँच सक्रिय ऑपरेशन हैं: वे लक्षित डिवाइस से जुड़ते हैं और उसे कमांड भेजते हैं। --gatt, --race, --firmware, --bd-address, --assess, --baseline, --check-drift, या --memory-read को ऐसे डिवाइस के विरुद्ध न चलाएँ जो आपका नहीं है या जिसके परीक्षण की आपको अनुमति नहीं दी गई है। --scan निष्क्रिय है और केवल उन विज्ञापनों को सुनता है जो पहले से ही सार्वजनिक रूप से प्रसारित हो रहे हैं, इसलिए इसे सीमा में मौजूद किसी भी चीज़ के विरुद्ध चलाना सुरक्षित है।
--memory-read अन्य सक्रिय जाँचों से एक कदम आगे जाता है: यह डिवाइस की वास्तविक फ्लैश सामग्री का एक वास्तविक, केवल-पठनीय पृष्ठ (256 बाइट्स) एक निश्चित पते से प्राप्त करता है, जो CVE-2025-20702 की निश्चित पुष्टि के रूप में होता है, जब केवल-पहुँच-क्षमता वाली --race जाँच को कोई प्रतिक्रिया नहीं मिलती। यह केवल-पठनीय है (फ्लैश रीड में लिखने/मिटाने/FOTA कमांड के विपरीत कोई घिसाव या ब्रिकिंग जोखिम नहीं होता, जो यह उपकरण कभी नहीं भेजता), ऑप्ट-इन है, और कुछ भी चलाने से पहले यह वास्तव में क्या करता है इसका वर्णन करने वाले मानक स्वामित्व प्रॉम्प्ट के अतिरिक्त अपनी अलग पुष्टि की आवश्यकता होती है।
किसी भी आस-पास के डिवाइस की जाँच करना केवल नीति संबंधी चिंता नहीं है - इसके वास्तविक दुष्प्रभाव हो सकते हैं। --gatt उसे मिलने वाली हर विशेषता पर रीड या notify-subscribe का प्रयास करता है, और कुछ उपभोक्ता डिवाइस provisioning-शैली की सेवाएँ (जैसे Google की Fast Pair सेवा) उजागर करते हैं जो उस पर प्रतिक्रिया करते हुए लक्षित डिवाइस पर एक वास्तविक पेयरिंग हैंडशेक शुरू कर देती हैं, जो इस उपकरण द्वारा स्पष्ट रूप से अनुरोधित किसी भी चीज़ से स्वतंत्र है। एन्क्रिप्शन की आवश्यकता वाली विशेषता आपके अपने डिवाइस के विरुद्ध भी वही चीज़ ट्रिगर कर सकती है, क्योंकि BlueZ उस प्रमाणीकरण अनुरोध को आपके डेस्कटॉप पर पंजीकृत किसी भी एजेंट (जैसे KDE का पेयरिंग प्रॉम्प्ट) को चुपचाप रूट कर सकता है - इसलिए हर सक्रिय कमांड अपना अस्थायी BlueZ एजेंट भी पंजीकृत करता है जो जाँच की अवधि के लिए ऐसे किसी भी अनुरोध को स्वतः अस्वीकार कर देता है, ताकि कोई पेयरिंग प्रॉम्प्ट बिल्कुल भी प्रकट न हो। हर सक्रिय कमांड रेडियो पर कुछ भी करने से पहले यह पुष्टि करने के लिए प्रॉम्प्ट भी करता है कि लक्षित पता आपका है; एक बार आपने पुष्टि कर ली है कि यह आपका डिवाइस है, तो स्क्रिप्टेड उपयोग के लिए प्रॉम्प्ट छोड़ने हेतु --yes पास करें:
buds_audit.py --assess --target AA:BB:CC:DD:EE:FF --yes
--watch निष्क्रिय है, --scan की तरह - यह केवल पहले से प्रसारित हो रहे विज्ञापनों को सुनता है और कभी किसी से कनेक्ट नहीं होता, इसलिए यह पुष्टि के लिए प्रॉम्प्ट नहीं करता।
python3 -m venv venv
venv/bin/pip install -r requirements.txt
Python 3.10+ की आवश्यकता है (3.14 के विरुद्ध विकसित) और BlueZ चलाने वाली Linux प्रणाली जिसमें चालू Bluetooth एडाप्टर हो।
केवल Linux, और स्वचालित रूप से हर Linux प्रणाली नहीं:
bleak का स्वयं Windows बैकएंड है, लेकिन यह उपकरण केवल bleak पर निर्भर नहीं करता - Bluetooth Classic डिस्कवरी (core/scanner.py) और बॉन्डिंग-स्थिति जाँच (core/gatt.py) दोनों सीधे bluetoothctl को शेल आउट करते हैं, जो एक केवल-BlueZ CLI उपकरण है जो Windows पर मौजूद नहीं है। वे कोड पथ केवल "command not found" के साथ विफल हो जाएँगे।bluetoothctl के साथ BlueZ की आवश्यकता है, केवल किसी भी Linux कर्नेल की नहीं। अधिकांश डेस्कटॉप डिस्ट्रो इसे शिप करते हैं; bluez पैकेज स्थापित किए बिना एक न्यूनतम या सर्वर इमेज में यह आउट ऑफ़ द बॉक्स नहीं होगा। BlueZ 5.86 पर root-मुक्त सत्यापित - अन्य संस्करणों को उसी तरह काम करना चाहिए क्योंकि bleak BlueZ के मानक D-Bus API को लक्षित करता है, लेकिन यह स्वतंत्र रूप से पुनः सत्यापित नहीं है।usbipd-win के माध्यम से Windows से फॉरवर्ड करना आवश्यक है, जो केवल USB-संलग्न एडाप्टरों को फॉरवर्ड करता है। अधिकांश लैपटॉप का अंतर्निहित Bluetooth एक गैर-USB बस (SDIO/PCIe, Wi-Fi के साथ) पर जुड़ा होता है, जिसे usbipd-win आम तौर पर फॉरवर्ड नहीं कर सकता - इसलिए यह पूरी तरह से विशिष्ट हार्डवेयर पर निर्भर करता है।आपको अपनी स्वयं की Linux मशीन की आवश्यकता नहीं है - आपको केवल Linux चाहिए जिसकी Bluetooth रेडियो तक वास्तविक पहुँच हो। इसे पाने के दो व्यावहारिक तरीके हैं:
किसी भी तरह से, नियम समान है: उपकरण स्वयं अपरिवर्तित है - उसे केवल ऐसे Linux की आवश्यकता है जिसमें एक Bluetooth एडाप्टर हो जिस तक BlueZ वास्तव में पहुँच सके।
कई TWS ईयरबड्स बिजली बचाने के लिए निष्क्रियता की अवधि के बाद विज्ञापन बंद कर देते हैं (और किसी भी सक्रिय कनेक्शन को छोड़ देते हैं), और कुछ अपने आप पूरी तरह बंद हो जाते हैं। यदि कोई स्कैन एक मिनट पहले मिले डिवाइस को नहीं ढूँढ पाता है, या कोई जाँच बीच में विफल हो जाती है, तो यह आमतौर पर ईयरबड्स का निष्क्रिय हो जाना होता है, कोई बग नहीं - उन्हें केस से निकालें या पेयरिंग बटन फिर से दबाएँ और पुनः प्रयास करें।
यह पता स्थिरता को भी प्रभावित करता है: इस परियोजना की पुष्टि की गई परीक्षण इकाई (एक Sony WF-1000XM3) ने परीक्षण किए गए हर पावर चक्र में समान BLE पता बनाए रखा, जो कंपेनियन-ऐप पुनः-कनेक्शन के लिए डिज़ाइन किए गए ईयरबड्स के लिए अपेक्षित है - वे आम तौर पर घूमने वाले पते के बजाय एक निश्चित/सार्वजनिक BLE पता उपयोग करते हैं (फ़ोनों के विपरीत, जो निजी पते घुमाते हैं और इसी कारण इस उपकरण के लिए उपयुक्त लक्ष्य नहीं हैं)। हालाँकि, यह हर ईयरबड मॉडल के लिए गारंटीकृत नहीं है - कुछ विक्रेता पूर्व-पेयरिंग/पुनः-कनेक्शन मोड में भी resolvable निजी पते उपयोग करते हैं, जो इस उपकरण जैसे अयुग्मित स्कैनर को हर पावर चक्र के बाद एक अलग पते के रूप में दिखाई देंगे।