Android, Linux, macOS, iOS में Bluetooth की-इनपुट injection vulnerability
(github.com/skysafe)- CVE-2023-45866 कई operating systems के Bluetooth stack में authentication bypass vulnerability है, जिससे user confirmation के बिना fake keyboard connect कर key input inject किया जा सकता है
- नज़दीक मौजूद attacker बिना special equipment के, सिर्फ Linux computer और सामान्य Bluetooth adapter से app install करने, arbitrary commands execute करने, messages भेजने जैसी actions की कोशिश कर सकता है
- vulnerable conditions platform के हिसाब से अलग हैं: Android में Bluetooth enabled होना मुख्य factor है, Linux/BlueZ में discoverable/connectable state, और iOS व macOS में Magic Keyboard pairing status असर डालता है
- Android 11-14 में 2023-12-05 security patch level से mitigation मिलती है, लेकिन Android 4.2.2-10 के लिए fix नहीं है, और BlueZ में 2020 का fix default रूप से disabled था
- password या biometric authentication मांगने वाली actions सिर्फ key input injection से पूरी नहीं की जा सकतीं, लेकिन unpatched devices short-range Bluetooth attacks के exposure में रह सकते हैं
Authentication के बिना Bluetooth key input injection
- CVE-2023-45866 Android, Linux, macOS, iOS में unauthenticated Bluetooth keystroke injection allow करने वाली vulnerability है
- कई Bluetooth stacks में attacker user confirmation के बिना discoverable host से connect कर सकता है और key input inject कर सकता है; यह authentication bypass संभव बनाता है
- नज़दीक मौजूद attacker vulnerable device से unauthenticated Bluetooth connection बनाकर key input के रूप में ये actions कर सकता है
- app install करना
- arbitrary commands execute करना
- messages भेजना
- attack के लिए special hardware की जरूरत नहीं है; Linux computer और सामान्य Bluetooth adapter से इसे किया जा सकता है
- पूरी exploit details और PoC script ShmooCon सप्ताह के दौरान 12-14 जनवरी को public की जाएंगी
Platform-wise attack conditions
- यह vulnerability Bluetooth host state machine को धोखा देकर user confirmation के बिना fake keyboard से pairing कराने के तरीके से काम करती है
- underlying unauthenticated pairing mechanism Bluetooth specification में मौजूद है, और implementation-specific bugs इसे attack surface के रूप में expose करते हैं
- unpatched devices पर जरूरी conditions operating system के हिसाब से अलग हैं
- Android: Bluetooth enabled हो तो vulnerable है
- Linux/BlueZ: Bluetooth discoverable/connectable state में होना चाहिए
- iOS और macOS: Bluetooth enabled हो और Magic Keyboard phone या computer से paired हो तो vulnerable है
- attacker target phone या computer से pair होने के बाद victim के privileges के साथ key input inject कर सकता है
- password या biometric authentication की जरूरत वाली actions सिर्फ key input injection से perform नहीं की जा सकतीं
MouseJack के बाद सामने आई पुरानी vulnerability
- 2016 में public हुई MouseJack research Bluetooth नहीं, बल्कि peripherals के custom wireless protocols को target करती थी
- यह research Apple Magic Keyboard को target कर Bluetooth और Apple environment की जांच करने के दौरान शुरू हुई
- macOS और iOS में unauthenticated Bluetooth keystroke injection मिला, और दोनों platforms पर Lockdown Mode में भी इसका exploit किया जा सकता था
- बाद में Linux और Android में भी similar vulnerabilities confirm हुईं, जिससे यह simple implementation bug से ज्यादा protocol flaw के करीब लगने लगा; Bluetooth HID specification जांचने पर पता चला कि यह दोनों ही है
- कुछ vulnerabilities MouseJack से भी पुरानी हैं, और Android 4.2.2 तक keystroke injection reproduce किया जा सका
Android impact और patch status
- testing में vulnerable पाए गए Android devices और versions ये हैं
- Pixel 7, Android 14
- Pixel 6, Android 13
- Pixel 4a (5G), Android 13
- Pixel 2, Android 11
- Pixel 2, Android 10
- Nexus 5, Android 6.0.1
- BLU DASH 3.5, Android 4.2.2
- 2023-12-05 security patch level Android 11-14 की vulnerability को mitigate करता है
- Android 4.2.2-10 के लिए कोई available fix नहीं है
- disclosure timeline इस प्रकार है
- 2023-08-05: vulnerability Google को report की गई
- 2023-12-06: public disclosure
- Google ने कहा कि Android 11-14 को प्रभावित करने वाले issue का fix affected OEMs को उपलब्ध कराया गया है, और currently supported सभी Pixel devices को December OTA update से fix मिलेगा
Linux/BlueZ impact और patch
- testing में vulnerable confirm हुए Ubuntu versions 18.04, 20.04, 22.04, 23.10 हैं
- Google के अनुसार ChromeOS vulnerable नहीं है, और direct test नहीं किया गया, लेकिन BlueZ configuration vulnerability को mitigate करता हुआ दिखता है
- Linux vulnerability 2020 में CVE-2020-0556 के रूप में fix की गई थी, लेकिन वह fix default रूप से disabled था
- ChromeOS इस fix को enable करने वाला एकमात्र known Linux-based OS है
- CVE-2023-45866 के लिए BlueZ patch 2020 वाले fix को default रूप से enable करता है
- संबंधित BlueZ patch:
- Ubuntu संबंधित जानकारी:
- Debian संबंधित जानकारी:
- Fedora संबंधित जानकारी:
- disclosure timeline इस प्रकार है
- 2023-08-10: vulnerability Canonical को report की गई
- 2023-09-25: vulnerability Bluetooth SIG को report की गई
- 2023-10-02: CERT/CC में case खोला गया
- 2023-12-06: public disclosure
macOS और iOS impact
- macOS पर testing में vulnerable confirm हुए devices ये हैं
- 2022 MacBook Pro, macOS 13.3.3, M2
- 2017 MacBook Air, macOS 12.6.7, Intel
- macOS का Lockdown Mode attack को रोक नहीं पाता
- macOS Sonoma 14.2 vulnerability को fix करता है
- macOS disclosure timeline इस प्रकार है
- 2023-08-01: vulnerability Apple को report की गई
- 2023-12-06: public disclosure
- iOS पर testing में vulnerable confirm हुआ device iPhone SE है, जो iOS 16.6 चला रहा था
- iOS का Lockdown Mode भी attack को रोक नहीं पाता
- iOS disclosure timeline इस प्रकार है
- 2023-08-04: vulnerability Apple को report की गई
- 2023-12-06: public disclosure
1 टिप्पणियां
Hacker News की राय
इसे जांचने के लिए मुझे थोड़ा खोजबीन करनी पड़ी, और सुरक्षित रहने के लिए Android पर Bluetooth को इस्तेमाल न होने पर बंद रखना बेहतर है। हालांकि इस्तेमाल के दौरान यह फिर भी असुरक्षित रहता है।
मेरे Pixel को 2023-12-05 security update मिल चुका है और इसमें यह समस्या ठीक हो गई है, लेकिन Pixel के अलावा बाकी devices के बारे में मुझे नहीं पता।
Linux पर
/etc/bluetooth/input.confखोलकरClassicBondedOnly=trueसेट कर सकते हैं। मेरे मामले में नई लाइन जोड़ने की जरूरत नहीं पड़ी, सिर्फ comment हटाना पड़ा। अगलेbluetoothdversion में defaulttrueहोने वाला है, लेकिन अभी भी इसे manually सेट किया जा सकता है, और उसके बाद Bluetooth service restart करनी होगी।macOS या iOS के बारे में नहीं जानता क्योंकि मेरे पास वे devices नहीं हैं।
Wi-Fi भी Control Center में पूरी तरह बंद नहीं किया जा सकता, जैसे छेदों वाला cheese हो।
trueहै।$ rpm -q --changelog bluez | grep CVE-2023-45866 -C1* Thu Dec 07 2023 Peter Robinson - 5.70-4- Add mitigation for CVE-2023-45866Android से आने के बाद कुछ समय तक कोशिश की, लेकिन आखिरकार छोड़ दिया।
फोन इस्तेमाल में न हो तो उसे proactively lock रखना चाहिए, और अगर इस्तेमाल के दौरान key input भेजा जाए तो वह स्क्रीन पर दिखेगा, इसलिए सिर्फ Bluetooth on होने से बात इतनी डरावनी नहीं लगती।
अगर GrapheneOS ने इसे ठीक कर दिया है, तो शायद आखिरकार switch करने की वजह मिल जाए, लेकिन मौजूदा फोन ठीक चल रहा है इसलिए नया फोन खरीदना justify करना मुश्किल है।
यह दिलचस्प है कि Windows का बिल्कुल जिक्र नहीं हुआ। ऊपर से यह अच्छी खबर लगती है, लेकिन risk level का आकलन करने के लिए यह जानना जरूरी है कि Windows वास्तव में क्यों प्रभावित नहीं है।
उदाहरण के लिए अगर Windows Bluetooth stack में BlueZ के
ClassicBondedOnly=falseजैसा कोई mechanism है, तो hardening करने वाले environment में यह देखना होगा कि वह valuetrueहै या नहीं।या फिर stack पूरी तरह अलग तरीके से काम करता हो, तो ध्यान देने वाली बातें भी बिलकुल अलग हो सकती हैं।
मुझे PoC और demo से भरे बहुत से videos की उम्मीद है, लेकिन Windows की market share भी बड़ी है और घबराने वाले system administrators भी बहुत होंगे, इसलिए इस पर जानकारी मिलना अच्छा होगा। “अभी Windows पर attack करके नहीं देखा” भी उपयोगी जानकारी है।
लेकिन अगर आप Flipper Zero से Bluetooth device बनाएं, तो Windows client connect करते ही उसे keyboard मान लेता है और मनचाहा PowerShell command चलवा सकता है। मैंने खुद बस YouTube खोलकर RickRoll करने तक ही इसे इस्तेमाल किया है, कोई अवैध चीज़ नहीं की।
अब मैंने Bluetooth सब जगह बंद कर दिया है, लेकिन Linux को खराब किए बिना bluez हटाने का तरीका नहीं पता।
ClassicBondedOnly=falseके बराबर है, क्या आपका मतलबClassicBondedOnly=trueथा?इंडस्ट्री ने फोन से physical audio connection हटाकर सबको wireless की तरफ धकेल दिया, और अब ऐसी खबर सामने आ रही है। बहुत बढ़िया, शाबाश।
[1] https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/pr...
यह vulnerability Bluetooth host state machine को धोखा देकर fake keyboard को user confirmation के बिना pair करा देती है। इसका आधार बनने वाला unauthenticated pairing mechanism Bluetooth specification में defined है, और implementation bugs इसे attackers के लिए exposed कर देते हैं।
लेकिन इसे चुपचाप pair होने लायक बनाना क्यों चाहा गया होगा? मैं उस problematic mechanism के original purpose को थोड़ा और विस्तार से समझना चाहूंगा।
वास्तव में प्रभावित devices में इसे क्यों रहने दिया गया, यह मुझे नहीं पता।
यह issue macOS 14.2 और iOS 17.2 में ठीक कर दिया गया है।
https://support.apple.com/en-us/HT214036
https://support.apple.com/en-us/HT214035
Arch Linux में यह bluez 5.70-2 से ठीक किया गया है [1]
[1]: https://gitlab.archlinux.org/archlinux/packaging/packages/bl...
यह बात असर छोड़ती है: “उस समय Bluetooth इतना intimidating था कि मैंने बस मान लिया कि यह सुरक्षित होगा।” लगता है कि जटिल तकनीकी स्टैक के ऊपर कहीं न कहीं ऐसे लोग होंगे जो इसे सच में समझते हैं, और यह रेत पर बना महल नहीं होगा जिसे बस एक डंडे से टिकाकर रखा गया है — यह मिथक शायद उसी दबदबे की भावना से पैदा होता है
फोन या कंप्यूटर के खिलाफ यह व्यावहारिक होगा या नहीं, इस पर संदेह है, लेकिन अगर आपकी ज़िम्मेदारी kiosk को इस तरह मैनेज करने की है कि कोई उसे छेड़ न सके, तो ज़िंदगी थोड़ी और दिलचस्प हो गई है
अगर एक भी backdoor सफलतापूर्वक लगा दी जाए, तो उसके बाद काम किया जा सकता है
अगर यह targeted attack हो, तो स्क्रीन lock न लगे इसके लिए हर 1 मिनट में Shift key input भेजना, और बाद में खुद मशीन के सामने जाकर कुछ करना ही काफ़ी हो सकता है
sudoयाsuकहीं छिपाकर$PATHमें जोड़ना भी संभव लगता हैUSB भी ऐसा ही है। “केवल charging” पोर्ट में keyboard जोड़ने पर वह काम करता है। मैंने इसे Android पर खुद आज़माया है, और यहाँ मुझे यह कहकर डांटा गया कि इसका वास्तविक दुरुपयोग संभव नहीं है
फिर भी मैं इसे vulnerability नहीं मानता। यह बस एक उपयोगी feature है। यहाँ समस्या यह है कि कोई व्यक्ति यह काम यूज़र की नज़र में आए बिना, संवेदनशील काम के दौरान भी कर सकता है
कल पोस्ट हुआ शानदार प्रोजेक्ट https://mitxela.com/projects/smsc भी इसी तरह फोन पर इस्तेमाल किया जा सकता था
Linux vulnerability 2020 में fix हो गई थी (CVE-2020-0556), लेकिन वह fix default में disabled ही रही। कहा जाता है कि सिर्फ ChromeOS ने उस fix को enable किया था, जबकि Ubuntu, Debian, Fedora, Gentoo, Arch, Alpine ने advisory जारी की थी
लेकिन अगर distro advisory में बस यह कहा जाए कि upgrade कर लेने से यह ठीक हो जाएगा[2], तो “fix default में off थी” का मतलब समझ नहीं आता। क्या इसका मतलब है कि upgrade के बाद भी manual config change चाहिए? NixOS का fix तो default को पलटता हुआ दिखता है
अगर मतलब यह है कि जिन users ने explicitly
ClassicBondedOnly=falseसेट किया है, उन्हें इसे बदलना होगा, तो इसे कहीं अधिक स्पष्ट तरीके से लिखा जा सकता था[1] https://github.com/NixOS/nixpkgs/blob/3dda6d5ed56af34534dd4c...
[2] https://ubuntu.com/security/notices/USN-4311-1