1 điểm bởi GN⁺ 2025-03-15 | 1 bình luận | Chia sẻ qua WhatsApp

> "Chúng tôi không cần WebUSB!"

  • Có một cách để trang web truy cập thiết bị USB mà không cần WebUSB. Ngoài ra, thiết bị cũng có thể được thiết kế để vượt qua yêu cầu xin sự đồng ý của người dùng.

Demo nhanh

  • Tải u2f-hax.uf2 lên Raspberry Pi Pico, rồi tải index.html từ localhost hoặc một ngữ cảnh an toàn khác.
  • Các nút "On!" và "Off!" sẽ bật/tắt LED, và trạng thái của chân GP22 sẽ được cập nhật định kỳ trên trang.

Làm thế nào điều này khả thi?

  • Pico được lập trình để mô phỏng một khóa U2F (khóa bảo mật vật lý hai bước).
  • Thay vì chức năng bảo mật, dữ liệu tùy ý được giấu trong "key handle" và chữ ký của thông điệp U2F_AUTHENTICATE.
  • Nếu key handle bắt đầu bằng 0xfeedface, Pico sẽ ngay lập tức "xác nhận" sự hiện diện của người dùng và trả về dữ liệu.

Tại sao điều này khả thi?

  • Key handle của U2F được thiết kế như một khối dữ liệu opaque do khóa bảo mật "sở hữu".
  • Nó được thiết kế để một khóa giá rẻ có thể gắn với nhiều website.
  • Khóa lưu trữ nội bộ một khóa mã hóa "master" duy nhất, và khi đăng ký sẽ tạo rồi trả về một cặp khóa công khai/riêng tư mới.
  • Key handle được xử lý như dữ liệu opaque nên có thể giấu dữ liệu tùy ý.

Cách trả dữ liệu về

  • Giấu dữ liệu bằng chữ ký ECDSA.
  • Chữ ký gồm hai số (r, s), và mỗi số được tính trong một phạm vi nhất định.
  • Chrome kiểm tra xem các số trong chữ ký có nằm trong phạm vi hay không, còn Firefox thì không.
  • Để vượt qua bước kiểm tra tính hợp lệ mặc định của Chrome, byte đầu tiên của mỗi số được đặt thành 0x7f.

Đây có phải là lỗ hổng bảo mật không?

  • Không, và cũng không thể truy cập thiết bị USB tùy ý.
  • Chỉ hoạt động với những thiết bị cố ý vi phạm quy tắc.
  • Mô hình bảo mật của thiết bị USB trên hầu hết nền tảng vốn đã đáng nghi.
  • Không nên cắm các thiết bị lạ, không rõ nguồn gốc vào máy tính.

1 bình luận

 
GN⁺ 2025-03-15
Ý kiến trên Hacker News
  • Chủ đề này chủ yếu nói về WebUSB, không hẳn về OP. WebUSB là một kiểu hack rất thú vị

    • Một mặt thì muốn có WebUSB, nhưng lại không muốn người dùng phổ thông có WebUSB
    • Các cửa sổ bật lên xin đồng ý không hiệu quả, vì mọi người vô thức bấm đồng ý với mọi thứ
    • Tôi thích mô hình phân quyền của Internet Explorer. Muốn dùng tính năng nào thì phải đánh dấu trang đó là trang "đáng tin cậy"
    • Nếu phải đánh dấu một trang là "đáng tin cậy" mới được dùng các API nguy hiểm như WebUSB, WebBluetooth, v.v., thì sẽ ít người vô tình bật nhầm hơn
  • Firefox không hỗ trợ giao tiếp với thiết bị USB tùy ý. Tuy nhiên, nó có hỗ trợ giao tiếp USB với khóa bảo mật U2F

    • Dự án này lập trình vi điều khiển để giả làm một khóa bảo mật U2F. Mục tiêu là giao tiếp với vi điều khiển qua USB bằng Firefox
    • Dùng Javascript Credentials API và một chút khéo léo để gửi dữ liệu tới vi điều khiển và nhận phản hồi
  • Những người dùng WebUSB thì nói nó rất tuyệt, còn những người không dùng thì bối rối không hiểu tại sao lại cần

    • Cá nhân tôi thấy WebUSB rất tuyệt. Hầu hết các tiện ích WebUSB cũng có bản ứng dụng cài riêng, nhưng dùng bản web dễ hơn
    • Tôi từng nghĩ nó sẽ được ưa chuộng bởi những người đã chán phải cài một ứng dụng riêng cho mọi thứ
  • Tùy biến bàn phím dùng firmware QMK/Via qua WebUSB là một cơn ác mộng

    • Phải để trình duyệt có thể đọc hoàn toàn thiết bị /dev/hidraw trước khi tương tác với firmware
    • Về trải nghiệm sử dụng thì cực kỳ khó chịu, còn các công cụ tùy biến ngoại tuyến thì đều dựa trên Electron
    • Giải pháp hợp lý là cấu hình bố cục bàn phím mong muốn trên website bằng tệp mẫu json, tải xuống file json kết quả, rồi flash firmware vào bàn phím bằng công cụ flash ở mức sudo
  • USB Serial là một công cụ tuyệt vời, và giờ đã có cả một danh sách công cụ dùng trình duyệt để cấu hình thiết bị

    • Có ESPHome, Betaflight, ELRS, Flipper, v.v.
    • WebKit thiếu hỗ trợ vì Apple là bên phát triển nó. Còn Firefox thì thiếu hỗ trợ "kết nối" phần cứng và không thân thiện với lập trình viên
    • Họ không thêm hỗ trợ vì cho rằng sự đồng ý của người dùng là chưa đủ để truy cập thiết bị. Blink đã chứng minh rằng có thể làm điều đó một cách an toàn
  • Với những người thường xuyên flash thiết bị thì lợi ích là rất rõ ràng. Nhưng với người dùng phổ thông thì không quan trọng lắm

    • Có thể sẽ cần một công cụ hoặc trình duyệt riêng. Flash Browser có thể được phát hành kèm các công cụ bổ sung
  • Có lẽ sẽ tốt hơn nếu cổng USB không bị mã chạy trong trình duyệt sử dụng

  • Flash GrapehenOS lên điện thoại Pixel là một trong những trải nghiệm cài OS dễ chịu và nhanh nhất mà tôi từng có

  • Mã hóa khóa riêng bằng một khóa "master", rồi trả khóa riêng đã mã hóa làm key handle

    • Có vẻ như việc trao cơ hội vô hạn cuối cùng sẽ phản tác dụng
  • Có một cuộc tranh cãi mang tính chính trị liên quan đến WebUSB

    • Tôi tò mò không biết cuộc tranh cãi chính trị đó là gì