1 Punkte von GN⁺ 2025-03-15 | 1 Kommentare | Auf WhatsApp teilen

> "Wir brauchen WebUSB nicht!"

  • Es gibt eine Möglichkeit, wie Webseiten auch ohne WebUSB auf USB-Geräte zugreifen können. Außerdem können Geräte so entworfen werden, dass sie die Anforderung einer Nutzereinwilligung umgehen.

Schnelle Demo

  • u2f-hax.uf2 auf einen Raspberry Pi Pico laden und index.html auf localhost oder in einem anderen sicheren Kontext laden.
  • Die Buttons "On!" und "Off!" schalten die LED um, und der Status von Pin GP22 wird regelmäßig auf der Seite aktualisiert.

Wie ist das möglich?

  • Der Pico ist so programmiert, dass er einen U2F-Dongle (physischen Zwei-Faktor-Sicherheitsschlüssel) emuliert.
  • Statt einer Sicherheitsfunktion werden beliebige Daten im "Key Handle" und in der Signatur einer U2F_AUTHENTICATE-Nachricht versteckt.
  • Wenn das Key Handle mit 0xfeedface beginnt, "bestätigt" der Pico sofort die Benutzerpräsenz und gibt die Daten zurück.

Warum ist das möglich?

  • U2F-Key-Handles sind als undurchsichtige Datenblöcke konzipiert, die dem Sicherheits-Dongle "gehören".
  • Sie sind dafür ausgelegt, dass ein kostengünstiger Dongle mit vielen Websites verknüpft werden kann.
  • Der Dongle speichert intern einen einzigartigen "Master"-Kryptoschlüssel und erzeugt bei der Registrierung ein neues Public-/Private-Key-Paar, das zurückgegeben wird.
  • Da Key Handles undurchsichtig behandelt werden, können darin beliebige Daten verborgen werden.

Wie werden die Daten zurückgegeben?

  • Daten werden in einer ECDSA-Signatur versteckt.
  • Die Signatur besteht aus zwei Zahlen (r, s), wobei jede Zahl innerhalb eines bestimmten Bereichs berechnet wird.
  • Chrome prüft, ob die Zahlen der Signatur innerhalb des Bereichs liegen, Firefox prüft das nicht.
  • Um die standardmäßige Gültigkeitsprüfung von Chrome zu umgehen, wird das erste Byte jeder Zahl auf 0x7f gesetzt.

Ist das eine Sicherheitslücke?

  • Nein, man erhält damit keinen Zugriff auf beliebige USB-Geräte.
  • Es funktioniert nur mit Geräten, die absichtlich gegen die Regeln verstoßen.
  • Das Sicherheitsmodell von USB-Geräten ist auf den meisten Plattformen fragwürdig.
  • Man sollte keine beliebigen unbekannten Geräte an den Computer anschließen.

1 Kommentare

 
GN⁺ 2025-03-15
Hacker-News-Kommentare
  • In diesem Thread geht es hauptsächlich um WebUSB, nicht um den OP. WebUSB ist ein cooler Hack

    • Einerseits will ich WebUSB, andererseits will ich nicht, dass gewöhnliche Nutzer WebUSB haben
    • Zustimmungs-Pop-ups funktionieren nicht; die Leute stimmen gedankenlos allem zu
    • Mir gefällt das Berechtigungsmodell des Internet Explorer. Man musste bestimmte Websites als „vertrauenswürdig“ markieren, damit die Funktion genutzt werden konnte
    • Wenn man Websites als „vertrauenswürdig“ markieren müsste, um gefährliche APIs wie WebUSB oder WebBluetooth zu verwenden, würden es vermutlich weniger Leute versehentlich tun
  • Firefox unterstützt keine Kommunikation mit beliebigen USB-Geräten. USB-Kommunikation mit U2F-Sicherheitsschlüsseln wird jedoch unterstützt

    • Dieses Projekt programmiert einen Mikrocontroller so, dass er sich als U2F-Sicherheitsschlüssel ausgibt. Ziel ist es, über Firefox per USB mit dem Mikrocontroller zu kommunizieren
    • Mit der JavaScript Credentials API und etwas Einfallsreichtum werden Daten an den Mikrocontroller gesendet und Antworten empfangen
  • Leute, die WebUSB verwenden, sagen, es sei großartig, und Leute, die es nicht verwenden, sind verwirrt, warum es nötig sein soll

    • Für mich persönlich war WebUSB großartig. Die meisten WebUSB-Utilities gibt es auch als eigenständig installierbare Apps, aber die Web-Version ist einfacher zu benutzen
    • Ich hätte erwartet, dass es bei Leuten beliebt ist, die es leid sind, für alles Mögliche eine eigene App zu haben
  • Das Anpassen von Tastaturen mit QMK/Via-Firmware über WebUSB ist ein Albtraum

    • Bevor der Browser mit der Firmware interagiert, muss man sicherstellen, dass das /dev/hidraw-Gerät vollständig gelesen werden kann
    • Aus Nutzersicht ist das äußerst unangenehm, und alle Offline-Anpassungstools basieren auf Electron
    • Eine vernünftige Lösung wäre, das gewünschte Tastaturlayout auf einer Website als Template-JSON-Datei zu konfigurieren, das resultierende JSON herunterzuladen und dann die Firmware mit einem Flash-Tool auf sudo-Niveau auf die Tastatur zu flashen
  • USB Serial ist ein großartiges Werkzeug, und inzwischen gibt es eine Liste von Tools, mit denen man Geräte über den Browser einrichten kann

    • Dazu gehören ESPHome, Betaflight, ELRS und Flipper
    • WebKit hat wegen Apples Entwicklung nur begrenzte Unterstützung. Firefox hingegen fehlt Unterstützung für Hardware-„Verbindungen“ und es ist nicht besonders entwicklerfreundlich
    • Unterstützung wird nicht hinzugefügt, weil die Zustimmung der Nutzer als nicht ausreichend für den Gerätezugriff angesehen wird. Blink hat bewiesen, dass man es sicher umsetzen kann
  • Für Leute, die Geräte häufig flashen, sind die Vorteile offensichtlich. Für normale Nutzer ist es jedoch nicht wichtig

    • Möglicherweise braucht man ein separates Tool oder einen separaten Browser. Ein Flash Browser könnte zusammen mit zusätzlichen Tools ausgeliefert werden
  • Vielleicht ist es besser, wenn USB-Ports nicht von browserbasiertem Code verwendet werden

  • Das Flashen von GrapehenOS auf ein Pixel-Handy war eine der angenehmsten und schnellsten OS-Installationen, die ich je erlebt habe

  • Der private Schlüssel wird mit einem „Master“-Schlüssel verschlüsselt, und der verschlüsselte private Schlüssel wird als Key Handle zurückgegeben

    • Unbegrenzte Möglichkeiten zu geben, scheint am Ende nach hinten loszugehen
  • Es gibt politische Kontroversen rund um WebUSB

    • Ich frage mich, worin diese politischen Kontroversen bestehen