Lỗ hổng tiêm phím Bluetooth trên Android, Linux, macOS và iOS
(github.com/skysafe)- CVE-2023-45866 là lỗ hổng bypass xác thực trong Bluetooth stack của nhiều hệ điều hành, cho phép kết nối bàn phím giả và tiêm phím mà không cần người dùng xác nhận
- Kẻ tấn công ở gần có thể thử thực hiện các hành động như cài ứng dụng, chạy lệnh tùy ý, chuyển tiếp tin nhắn chỉ với máy tính Linux và adapter Bluetooth thông thường, không cần thiết bị đặc biệt
- Điều kiện bị ảnh hưởng khác nhau tùy nền tảng: với Android, việc Bluetooth có bật hay không là yếu tố chính; với Linux/BlueZ là trạng thái discoverable/connectable; còn với iOS và macOS là việc Magic Keyboard đã được ghép đôi hay chưa
- Android 11-14 được giảm thiểu bằng mức bản vá bảo mật 2023-12-05, nhưng Android 4.2.2-10 không có bản sửa; BlueZ từng có bản sửa từ năm 2020 nhưng mặc định bị vô hiệu hóa
- Những tác vụ yêu cầu mật khẩu hoặc xác thực sinh trắc không thể được xử lý chỉ bằng tiêm phím, nhưng thiết bị chưa vá có thể bị phơi nhiễm trước tấn công Bluetooth cự ly gần
Tiêm phím Bluetooth không cần xác thực
- CVE-2023-45866 là lỗ hổng cho phép tiêm phím Bluetooth không cần xác thực trên Android, Linux, macOS và iOS
- Trong nhiều Bluetooth stack, kẻ tấn công có thể bypass xác thực để kết nối với một host ở trạng thái discoverable mà không cần người dùng xác nhận và tiêm phím
- Kẻ tấn công ở gần có thể thiết lập kết nối Bluetooth chưa xác thực với thiết bị dễ bị tấn công và thực hiện các hành động sau bằng phím nhập
- Cài ứng dụng
- Chạy lệnh tùy ý
- Chuyển tiếp tin nhắn
- Cuộc tấn công không cần phần cứng đặc biệt, có thể thực hiện bằng máy tính Linux và adapter Bluetooth thông thường
- Chi tiết khai thác đầy đủ và script PoC dự kiến được công bố vào ngày 12-14 tháng 1, trong tuần diễn ra ShmooCon
Điều kiện tấn công theo từng nền tảng
- Lỗ hổng hoạt động bằng cách đánh lừa state machine của Bluetooth host để ghép đôi với bàn phím giả mà không cần người dùng xác nhận
- Cơ chế ghép đôi không xác thực làm nền tảng vốn có trong đặc tả Bluetooth, và các lỗi theo từng triển khai đã khiến nó lộ ra thành bề mặt tấn công
- Các điều kiện cần có trên thiết bị chưa vá khác nhau tùy hệ điều hành
- Android: dễ bị tấn công nếu Bluetooth đang bật
- Linux/BlueZ: Bluetooth phải ở trạng thái discoverable/connectable
- iOS và macOS: dễ bị tấn công nếu Bluetooth đang bật và Magic Keyboard đã được ghép đôi với điện thoại hoặc máy tính
- Sau khi kẻ tấn công ghép đôi với điện thoại hoặc máy tính mục tiêu, chúng có thể tiêm phím với quyền của nạn nhân
- Những hành động yêu cầu mật khẩu hoặc xác thực sinh trắc không thể được thực hiện chỉ bằng tiêm phím
Lỗ hổng cũ được phát hiện sau MouseJack
- Nghiên cứu MouseJack được công bố năm 2016 nhắm vào các giao thức không dây tùy biến của thiết bị ngoại vi, không phải Bluetooth
- Nghiên cứu lần này bắt đầu trong quá trình xem xét Bluetooth và môi trường Apple, với đối tượng là Apple Magic Keyboard
- Trên macOS và iOS, tiêm phím Bluetooth không cần xác thực đã được phát hiện, và cả hai nền tảng đều có thể bị khai thác ngay cả trong Lockdown Mode
- Sau đó, các lỗ hổng tương tự cũng được xác nhận trên Linux và Android, khiến vấn đề trông giống lỗi ở giao thức hơn là lỗi triển khai đơn thuần; việc kiểm tra đặc tả Bluetooth HID cho thấy nó thuộc cả hai loại
- Một số lỗ hổng còn cũ hơn MouseJack, và việc tiêm phím có thể được tái hiện tới tận Android 4.2.2
Ảnh hưởng với Android và trạng thái bản vá
- Các thiết bị và phiên bản Android được xác nhận là dễ bị tấn công trong thử nghiệm gồm:
- 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
- Mức bản vá bảo mật 2023-12-05 giảm thiểu lỗ hổng trên Android 11-14
- Không có bản sửa khả dụng cho Android 4.2.2-10
- Lịch trình công bố như sau
- 2023-08-05: Báo cáo lỗ hổng cho Google
- 2023-12-06: Công bố
- Google cho biết bản sửa cho vấn đề ảnh hưởng đến Android 11-14 được cung cấp cho các OEM bị ảnh hưởng, và tất cả thiết bị Pixel hiện còn được hỗ trợ sẽ nhận bản sửa qua bản cập nhật OTA tháng 12
Ảnh hưởng với Linux/BlueZ và bản vá
- Các phiên bản Ubuntu được xác nhận là dễ bị tấn công trong thử nghiệm là 18.04, 20.04, 22.04, 23.10
- Theo Google, ChromeOS không bị ảnh hưởng; dù chưa thử nghiệm trực tiếp, cấu hình BlueZ dường như đã giảm thiểu lỗ hổng
- Lỗ hổng Linux đã được sửa vào năm 2020 với mã CVE-2020-0556, nhưng bản sửa đó mặc định bị vô hiệu hóa
- ChromeOS được biết đến là hệ điều hành dựa trên Linux duy nhất đã bật bản sửa này
- Bản vá BlueZ cho CVE-2023-45866 bật mặc định bản sửa năm 2020
- Bản vá BlueZ liên quan:
- Thông tin liên quan đến Ubuntu:
- Thông tin liên quan đến Debian:
- Thông tin liên quan đến Fedora:
- Lịch trình công bố như sau
- 2023-08-10: Báo cáo lỗ hổng cho Canonical
- 2023-09-25: Báo cáo lỗ hổng cho Bluetooth SIG
- 2023-10-02: Mở case với CERT/CC
- 2023-12-06: Công bố
Ảnh hưởng với macOS và iOS
- Các thiết bị macOS đã được thử nghiệm và xác nhận là dễ bị tấn công gồm:
- 2022 MacBook Pro, macOS 13.3.3, M2
- 2017 MacBook Air, macOS 12.6.7, Intel
- Lockdown Mode của macOS không chặn được cuộc tấn công
- macOS Sonoma 14.2 đã sửa lỗ hổng
- Lịch trình công bố của macOS như sau
- 2023-08-01: Báo cáo lỗ hổng cho Apple
- 2023-12-06: Công bố
- Thiết bị iOS đã được thử nghiệm và xác nhận là dễ bị tấn công là iPhone SE chạy iOS 16.6
- Lockdown Mode của iOS cũng không chặn được cuộc tấn công
- Lịch trình công bố của iOS như sau
- 2023-08-04: Báo cáo lỗ hổng cho Apple
- 2023-12-06: Công bố
1 bình luận
Các ý kiến trên Hacker News
Tôi đã phải tìm hiểu một chút để kiểm tra việc này; để an toàn thì trên Android, tốt nhất là tắt Bluetooth khi không dùng. Tuy nhiên, trong lúc đang dùng thì vẫn dễ bị tấn công
Pixel của tôi đã nhận bản cập nhật bảo mật 2023-12-05 và vấn đề này đã được sửa, nhưng với thiết bị không phải Pixel thì tôi không rõ
Trên Linux, hãy mở
/etc/bluetooth/input.confvà đặtClassicBondedOnly=true. Trường hợp của tôi không cần thêm mới, chỉ cần bỏ chú thích là được. Trong phiên bảnbluetoothdtiếp theo, giá trị mặc định sẽ làtrue, nhưng hiện giờ bạn có thể tự đặt và sau đó cần khởi động lại dịch vụ BluetoothmacOS hoặc iOS thì tôi không biết vì không có thiết bị tương ứng
Wi-Fi cũng ở tình trạng như pho mát đầy lỗ, không thể tắt hoàn toàn từ Trung tâm điều khiển
true$ rpm -q --changelog bluez | grep CVE-2023-45866 -C1* Thu Dec 07 2023 Peter Robinson - 5.70-4- Add mitigation for CVE-2023-45866Sau khi chuyển từ Android sang, tôi đã cố một thời gian nhưng cuối cùng cũng bỏ cuộc
Khi không dùng điện thoại thì cứ chủ động khóa lại, còn nếu đang dùng mà có phím được gửi tới thì sẽ thấy trên màn hình, nên việc để Bluetooth bật cũng không có vẻ kinh khủng đến vậy
Nếu GrapheneOS đã sửa thì cuối cùng đây sẽ là lý do để chuyển sang, nhưng điện thoại hiện tại vẫn hoạt động tốt nên khó biện minh cho việc mua máy mới
Tôi thắc mắc vì Windows hoàn toàn không được nhắc tới. Nhìn bề ngoài thì nghe như tin tốt, nhưng cần biết vì sao Windows thực sự không bị ảnh hưởng để đánh giá mức độ rủi ro
Ví dụ, nếu biết trong Bluetooth stack của Windows có cấu trúc tương ứng với
ClassicBondedOnly=falsecủa BlueZ hay không, thì trong môi trường cần gia cố có thể theo dõi xem giá trị đó có phải làtruehay khôngHoặc có thể stack hoạt động hoàn toàn khác, nên những điều cần cân nhắc cũng hoàn toàn khác
Tôi mong chờ video có nhiều PoC và demo, nhưng Windows có thị phần lớn và cũng có nhiều quản trị viên hệ thống sẽ bối rối, nên nếu có thông tin thì tốt. “Chưa thử tấn công Windows” cũng là thông tin hữu ích
Nhưng nếu dùng Flipper Zero để tạo một thiết bị Bluetooth, ngay khi máy khách Windows kết nối, nó có thể được nhận diện là bàn phím và chạy lệnh PowerShell tùy ý. Cá nhân tôi chỉ từng dùng để mở YouTube và RickRoll, chưa thử gì bất hợp pháp
Giờ tôi đã tắt hết Bluetooth, nhưng không biết cách gỡ bluez mà không làm hỏng Linux
ClassicBondedOnly=falsecủa BlueZ; có phải ý bạn làClassicBondedOnly=truekhông?Thật tuyệt khi tin như thế này xuất hiện vào lúc ngành công nghiệp đã loại bỏ kết nối âm thanh vật lý trên điện thoại và thúc ép dùng không dây. Làm tốt lắm
[1] https://git.kernel.org/pub/scm/bluetooth/bluez.git/commit/pr...
Lỗ hổng này hoạt động bằng cách đánh lừa máy trạng thái của Bluetooth host để ghép đôi với bàn phím giả mà không cần người dùng xác nhận. Cơ chế nền tảng là ghép đôi không xác thực được định nghĩa trong đặc tả Bluetooth, còn lỗi theo từng triển khai đã phơi nó ra cho kẻ tấn công
Nhưng tại sao lại muốn cho phép ghép đôi âm thầm như vậy? Tôi muốn biết chi tiết hơn về mục đích dự kiến của cơ chế gặp vấn đề này
Còn vì sao trên các thiết bị thực tế bị ảnh hưởng họ lại để như vậy thì tôi không biết
Vấn đề này đã được sửa trong macOS 14.2 và iOS 17.2
https://support.apple.com/en-us/HT214036
https://support.apple.com/en-us/HT214035
Trên Arch Linux, lỗi này đã được sửa từ bluez 5.70-2 [1]
[1]: https://gitlab.archlinux.org/archlinux/packaging/packages/bl...
Đoạn “lúc đó Bluetooth trông đáng sợ nên cứ mặc định là nó an toàn” thật sự gây đồng cảm. Có vẻ huyền thoại rằng ở đâu đó phía trên một stack công nghệ phức tạp sẽ có những người thật sự hiểu rõ, và họ sẽ không chống đỡ một lâu đài xây trên cát bằng vài cây gậy, đã sinh ra từ chính cảm giác choáng ngợp đó
Tôi nghi ngờ liệu việc này có thực tế khi nhắm vào điện thoại hay máy tính hay không, nhưng nếu ở vị trí phải quản lý kiosk sao cho không ai táy máy được, thì đời có vẻ đã thú vị hơn một chút
Chỉ cần cài thành công một backdoor là từ đó có thể tiếp tục thao tác
Nếu là tấn công có chủ đích, chỉ cần gửi phím Shift mỗi phút để màn hình không bị khóa, rồi sau đó trực tiếp đến trước máy làm gì đó cũng có thể là đủ
sudohoặcsubị cài bẫy ở đâu đó rồi thêm vào$PATHUSB cũng tương tự. Cắm bàn phím vào cổng “chỉ sạc” thì nó hoạt động. Tôi đã tự thử trên Android, và ở đây từng bị mắng rằng chuyện này về thực chất không thể bị khai thác
Dù vậy tôi không xem đây là lỗ hổng. Nó chỉ là một tính năng hữu ích. Vấn đề ở đây là ai đó có thể làm việc này mà người dùng không nhận ra, kể cả trong lúc đang thực hiện thao tác nhạy cảm
Dự án tuyệt vời được đăng hôm qua https://mitxela.com/projects/smsc cũng có thể được dùng trên điện thoại theo cách này
Lỗ hổng trên Linux đã được sửa vào năm 2020 (CVE-2020-0556), nhưng bản sửa đó vẫn bị vô hiệu hóa theo mặc định. Được biết chỉ ChromeOS bật bản sửa này, dù Ubuntu, Debian, Fedora, Gentoo, Arch và Alpine đều đã ra thông báo
Nhưng nếu thông báo của bản phân phối nói rằng chỉ cần nâng cấp là sẽ được sửa[2], thì tôi không hiểu “bản sửa bị tắt theo mặc định” nghĩa là gì. Có phải sau khi nâng cấp vẫn cần thay đổi cấu hình thủ công không? Bản sửa của NixOS có vẻ là đảo ngược giá trị mặc định
Nếu ý là những người dùng đã đặt rõ
ClassicBondedOnly=falsecần phải đổi lại, thì đáng ra có thể viết rõ hơn nhiều[1] https://github.com/NixOS/nixpkgs/blob/3dda6d5ed56af34534dd4c...
[2] https://ubuntu.com/security/notices/USN-4311-1