Android, Linux, macOS ve iOS'ta Bluetooth tuş vuruşu enjeksiyonu açığı
(github.com/skysafe)- CVE-2023-45866, birden fazla işletim sisteminin Bluetooth yığınında kullanıcı onayı olmadan sahte bir klavyenin bağlanıp tuş vuruşu enjekte edebilmesini sağlayan bir kimlik doğrulama atlatma açığıdır
- Yakındaki bir saldırgan, özel ekipman olmadan yalnızca Linux bilgisayar ve sıradan bir Bluetooth adaptörü ile uygulama yükleme, rastgele komut çalıştırma ve mesaj gönderme gibi işlemleri deneyebilir
- Açığın tetiklenme koşulları platforma göre değişir; Android'de Bluetooth'un açık olması kritik unsurken, Linux/BlueZ'de discoverable/connectable durumu, iOS ve macOS'ta ise Magic Keyboard eşleştirilmiş olup olmaması etkili olur
- Android 11-14 için 2023-12-05 güvenlik yaması seviyesi ile risk azaltılıyor, ancak Android 4.2.2-10 için düzeltme yok; BlueZ tarafında ise 2020'deki düzeltme varsayılan olarak devre dışı bırakılmıştı
- Parola veya biyometrik doğrulama gerektiren işlemler yalnızca tuş vuruşu enjeksiyonuyla yapılamasa da, yama almamış cihazlar kısa menzilli Bluetooth saldırılarına açık olabilir
Kimlik doğrulamasız Bluetooth tuş vuruşu enjeksiyonu
- CVE-2023-45866, Android, Linux, macOS ve iOS'ta kimlik doğrulamasız Bluetooth keystroke injection'a izin veren bir açığı ifade eder
- Birden fazla Bluetooth yığınında, saldırganın kullanıcı onayı olmadan discoverable host'a bağlanıp tuş vuruşu enjekte etmesine olanak tanıyan bir kimlik doğrulama atlatma mümkündür
- Yakındaki bir saldırgan, savunmasız cihaza kimliği doğrulanmamış bir Bluetooth bağlantısı kurup aşağıdaki işlemleri tuş vuruşlarıyla gerçekleştirebilir
- uygulama yükleme
- rastgele komut çalıştırma
- mesaj gönderme
- Saldırı için özel donanım gerekmez; bir Linux bilgisayar ve sıradan bir Bluetooth adaptörü ile gerçekleştirilebilir
- Tüm exploit ayrıntıları ve PoC betikleri, 12-14 Ocak'taki ShmooCon haftasında yayımlanacaktır
Platformlara göre saldırı koşulları
- Açık, Bluetooth host durum makinesini kandırarak kullanıcı onayı olmadan sahte bir klavye ile eşleştirme yaptıracak şekilde çalışır
- Temeldeki kimlik doğrulamasız eşleştirme mekanizması Bluetooth spesifikasyonunda yer alır; uygulamaya özgü hatalar ise bunu saldırı yüzeyine dönüştürür
- Yama almamış cihazlarda gereken koşullar işletim sistemine göre değişir
- Android: Bluetooth açıksa savunmasızdır
- Linux/BlueZ: Bluetooth discoverable/connectable durumda olmalıdır
- iOS ve macOS: Bluetooth açık olmalı ve Magic Keyboard telefon ya da bilgisayarla eşleştirilmiş olmalıdır
- Saldırgan hedef telefon veya bilgisayarla eşleştikten sonra, kurbanın yetkileriyle tuş vuruşu enjekte edebilir
- Parola veya biyometrik doğrulama gerektiren işlemler yalnızca tuş vuruşu enjeksiyonuyla gerçekleştirilemez
MouseJack sonrasında ortaya çıkan eski açıklar
- 2016'da yayımlanan MouseJack araştırması, Bluetooth'u değil çevre birimlerinin özel kablosuz protokollerini hedef alıyordu
- Bu araştırma ise Apple Magic Keyboard hedef alınarak Bluetooth ve Apple ekosisteminin incelenmesi sırasında başladı
- macOS ve iOS'ta kimlik doğrulamasız Bluetooth keystroke injection bulundu ve her iki platformda da Lockdown Mode altında istismar edilebildi
- Ardından Linux ve Android'de de benzer açıklar doğrulandı; bunun basit bir uygulama hatasından çok protokol kusuruna yakın olduğu görüldü ve Bluetooth HID spesifikasyonu incelendiğinde her ikisinin de payı olduğu anlaşıldı
- Bazı açıklar MouseJack'ten daha eskiydi ve Android 4.2.2'ye kadar keystroke injection yeniden üretilebildi
Android etkisi ve yama durumu
- Testlerde savunmasız olduğu doğrulanan Android cihaz ve sürümleri şunlardır
- 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 güvenlik yaması seviyesi, Android 11-14'teki açığı hafifletir
- Android 4.2.2-10 için kullanılabilir bir düzeltme yoktur
- Açıklanma takvimi şöyledir
- 2023-08-05: Açık Google'a bildirildi
- 2023-12-06: Kamuya açıklandı
- Google, Android 11-14'ü etkileyen sorunun düzeltmesinin etkilenen OEM'lere sağlandığını ve halen desteklenen tüm Pixel cihazlarının Aralık OTA güncellemesiyle düzeltme aldığını belirtti
Linux/BlueZ etkisi ve yamalar
- Testlerde savunmasız olduğu doğrulanan Ubuntu sürümleri 18.04, 20.04, 22.04, 23.10'dur
- Google'a göre ChromeOS savunmasız değildir; doğrudan test edilmemiş olsa da BlueZ yapılandırmasının açığı hafiflettiği görülmektedir
- Linux açığı 2020'de CVE-2020-0556 olarak düzeltilmişti, ancak ilgili düzeltme varsayılan olarak devre dışıydı
- ChromeOS, bu düzeltmeyi etkinleştirdiği bilinen tek Linux tabanlı işletim sistemi olarak belirtiliyor
- CVE-2023-45866 için BlueZ yaması, 2020 düzeltmesini varsayılan olarak etkinleştirir
- İlgili BlueZ yamaları:
- Ubuntu ile ilgili bilgiler:
- Debian ile ilgili bilgiler:
- Fedora ile ilgili bilgiler:
- Açıklanma takvimi şöyledir
- 2023-08-10: Açık Canonical'a bildirildi
- 2023-09-25: Açık Bluetooth SIG'e bildirildi
- 2023-10-02: CERT/CC nezdinde vaka açıldı
- 2023-12-06: Kamuya açıklandı
macOS ve iOS etkisi
- macOS'ta test edilip savunmasız olduğu doğrulanan cihazlar şunlardır
- 2022 MacBook Pro, macOS 13.3.3, M2
- 2017 MacBook Air, macOS 12.6.7, Intel
- macOS'taki Lockdown Mode, saldırıyı engelleyemez
- macOS Sonoma 14.2 açığı düzeltir
- macOS için açıklanma takvimi şöyledir
- 2023-08-01: Açık Apple'a bildirildi
- 2023-12-06: Kamuya açıklandı
- iOS'ta test edilip savunmasız olduğu doğrulanan cihaz, iOS 16.6 çalıştıran iPhone SE'dir
- iOS'taki Lockdown Mode da saldırıyı engelleyemez
- iOS için açıklanma takvimi şöyledir
- 2023-08-04: Açık Apple'a bildirildi
- 2023-12-06: Kamuya açıklandı
1 yorum
Hacker News yorumları
Bunu doğrulamak için biraz araştırmam gerekti; güvende kalmak için Android’de kullanmadığınız zamanlarda Bluetooth’u kapalı tutmak iyi olur. Yine de kullandığınız sırada savunmasız kalıyorsunuz.
Benim Pixel’im 2023-12-05 güvenlik güncellemesini aldı ve bu sorun düzeltildi, ancak Pixel olmayan cihazlar konusunda emin değilim.
Linux’ta
/etc/bluetooth/input.confdosyasını açıpClassicBondedOnly=trueolarak ayarlayabilirsiniz. Benim durumumda yeni bir şey eklemeye gerek kalmadan yalnızca yorumu kaldırmak yeterli oldu. Bir sonrakibluetoothdsürümünde varsayılan değertrueolacak, ancak şimdiden kendiniz ayarlayabilirsiniz; ardından Bluetooth servisini yeniden başlatmanız gerekir.macOS veya iOS için bilmiyorum, çünkü o cihazlara sahip değilim.
Wi-Fi da Denetim Merkezi’nden tamamen kapatılamayan, delikli peynir gibi bir durumda.
truegibi görünüyor.$ rpm -q --changelog bluez | grep CVE-2023-45866 -C1* Thu Dec 07 2023 Peter Robinson - 5.70-4- Add mitigation for CVE-2023-45866Android’den geçtikten sonra bir süre uğraştım ama sonunda vazgeçtim.
Telefonu kullanmadığınızda etkin biçimde kilitlerseniz, kullanırken de tuş girişleri gönderilirse ekranda görünecektir; bu yüzden Bluetooth’u açık bırakmak o kadar korkunç görünmüyor.
GrapheneOS’ta düzeltildiyse sonunda geçmek için bir sebep olurdu; ama mevcut telefonum gayet iyi çalıştığı için yeni telefon almayı gerekçelendirmek zor.
Windows’tan hiç bahsedilmemiş olması merak uyandırıyor. Dışarıdan iyi haber gibi geliyor, ama riski değerlendirebilmek için Windows’un neden gerçekten etkilenmediğini bilmek gerekir.
Örneğin Windows Bluetooth yığınında BlueZ’deki
ClassicBondedOnly=falsekarşılığı bir yapı olup olmadığını bilsek, sertleştirmek istediğimiz ortamlarda bu değerintrueolup olmadığını takip etmemiz gerektiği sonucuna varabiliriz.Ya da yığın tamamen farklı çalışıyor olabilir ve dikkate alınması gereken şeyler de tamamen farklı olabilir.
Çok sayıda PoC ve demo içeren videoyu bekliyorum; ama Windows’un pazar payı yüksek ve telaşlanacak çok sayıda sistem yöneticisi olacağından, bilgi olması iyi olurdu. “Windows’ta henüz denemedik” bile faydalı bir bilgi.
Ancak Flipper Zero ile bir Bluetooth cihazı oluşturursanız, Windows istemcisi bağlandığı anda onu klavye olarak algılatıp istediğiniz PowerShell komutlarını çalıştırmasını sağlayabilirsiniz. Ben şahsen yalnızca YouTube açıp RickRoll yapmak için kullandım; yasa dışı bir şey denemedim.
Artık tüm Bluetooth’u kapalı tutuyorum, ama Linux’u bozmadan bluez’yi nasıl kaldıracağımı bilmiyorum.
ClassicBondedOnly=falsekarşılığı olduğunu söylemişsin; acabaClassicBondedOnly=truedemek istemiş olabilir misin?Sektör telefonlardaki fiziksel ses bağlantılarını kaldırıp herkesi kablosuza ittiği şu dönemde böyle haberler görmek gerçekten harika. Aferin.
[1] https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/pr...
Bu zafiyet, Bluetooth ana makine durum makinesini kandırarak kullanıcı onayı olmadan sahte bir klavyeyle eşleşmesini sağlama şeklinde çalışıyor. Altta yatan kimlik doğrulamasız eşleşme mekanizması Bluetooth şartnamesinde tanımlı ve uygulamaya özgü hatalar bunu saldırganlara açık hâle getiriyor.
Peki neden sessizce eşleşmeye izin vermek istemişler? Sorunlu mekanizmanın amaçlanan kullanımını daha ayrıntılı öğrenmek isterdim.
Gerçekte etkilenen cihazlarda neden böyle bıraktıklarını bilmiyorum.
Bu sorun macOS 14.2 ve iOS 17.2’de düzeltildi.
https://support.apple.com/en-us/HT214036
https://support.apple.com/en-us/HT214035
Arch Linux’ta bluez 5.70-2 sürümünden itibaren düzeltildi [1]
[1]: https://gitlab.archlinux.org/archlinux/packaging/packages/bl...
“O sırada Bluetooth gözümü korkuttuğu için güvenli olduğunu varsaymıştım” kısmı etkileyici. Karmaşık bir teknoloji yığınının üst katmanlarında bir yerlerde işi gerçekten bilen insanlar olduğu ve kum üstüne inşa edilmiş bir kaleyi sopalarla ayakta tutmadıkları yönündeki mit sanki bu göz korkutuculuktan doğuyor.
Telefonlara veya bilgisayarlara karşı pratik olup olmayacağından şüpheliyim; ama kiosklara kimsenin dokunamamasını sağlamakla görevliyseniz hayat biraz daha ilginç hâle gelmiş demektir.
Tek bir arka kapıyı başarıyla yerleştirebilirse ondan sonra çalışmaya devam edebilir.
Hedefli bir saldırıysa, ekranın kilitlenmemesi için dakikada bir Shift tuşu girdisi göndermek ve daha sonra bizzat makinenin başına gidip bir şey yapmak bile yeterli olabilir.
sudoya dasukomutunu bir yere saklayıp$PATH’e eklemek de mümkün görünüyor.USB de benzer. “Yalnızca şarj” portuna klavye bağlarsanız çalışır. Android’de bizzat denedim ve burada bunun pratikte kötüye kullanılabilir olmadığı konusunda azar işittim.
Yine de bunu bir güvenlik açığı olarak görmüyorum. Sadece kullanışlı bir özellik. Buradaki sorun, birinin bunu kullanıcı fark etmeden, hassas işlemler sırasında bile yapabiliyor olması.
Dün yayımlanan harika proje https://mitxela.com/projects/smsc de bu yöntemle telefonda kullanılabiliyordu.
Linux açığı 2020’de düzeltilmişti (CVE-2020-0556), ancak bu düzeltme varsayılan olarak devre dışı kalmıştı. Yalnızca ChromeOS’un bu düzeltmeyi etkinleştirdiği biliniyor; Ubuntu, Debian, Fedora, Gentoo, Arch ve Alpine duyuru yapmış olmasına rağmen durum böyleydi.
Ancak dağıtım duyurusu yalnızca yükseltme yapınca düzeleceğini söylüyorsa[2], “düzeltme varsayılan olarak kapalıydı” ifadesinin ne anlama geldiğini anlamıyorum. Yükseltmeden sonra da elle yapılandırma değişikliği gerektiği anlamına mı geliyor? NixOS düzeltmesi varsayılanı tersine çeviriyor gibi görünüyor.
Kastedilen, açıkça
ClassicBondedOnly=falseayarlamış kullanıcıların bunu değiştirmesi gerektiğiyse, bu çok daha net yazılabilirdi.[1] https://github.com/NixOS/nixpkgs/blob/3dda6d5ed56af34534dd4c...
[2] https://ubuntu.com/security/notices/USN-4311-1