1 points par GN⁺ 2025-03-15 | 1 commentaires | Partager sur WhatsApp

> « Nous n’avons pas besoin de WebUSB ! »

  • Il existe un moyen pour une page web d’accéder à un périphérique USB sans WebUSB. De plus, le périphérique peut être conçu pour contourner l’exigence de consentement de l’utilisateur.

Démo rapide

  • Charger u2f-hax.uf2 sur un Raspberry Pi Pico, puis charger index.html depuis localhost ou un autre contexte sécurisé.
  • Les boutons « On! » et « Off! » basculent la LED, et l’état de la broche GP22 est mis à jour périodiquement sur la page.

Comment est-ce possible ?

  • Le Pico est programmé pour émuler un dongle U2F (clé de sécurité physique à deux facteurs).
  • Au lieu des fonctions de sécurité, des données arbitraires sont dissimulées dans le « key handle » du message U2F_AUTHENTICATE et dans la signature.
  • Si le key handle commence par 0xfeedface, le Pico « confirme » immédiatement la présence de l’utilisateur et renvoie les données.

Pourquoi est-ce possible ?

  • Les key handles U2F sont conçus comme des blocs de données opaques « possédés » par le dongle de sécurité.
  • Ils sont conçus pour permettre à des dongles peu coûteux d’être associés à de nombreux sites web.
  • Le dongle stocke en interne une clé de chiffrement « maître » unique et, lors de l’enregistrement, génère puis renvoie une nouvelle paire de clés publique/privée.
  • Comme les key handles sont traités comme opaques, ils peuvent dissimuler des données arbitraires.

Méthode de renvoi des données

  • Les données sont dissimulées dans une signature ECDSA.
  • Une signature est composée de deux nombres (r, s), chacun calculé dans une plage donnée.
  • Chrome vérifie que les nombres de la signature sont dans la plage, mais Firefox ne le vérifie pas.
  • Pour contourner la validation par défaut de Chrome, le premier octet de chaque nombre est défini sur 0x7f.

Est-ce une faille de sécurité ?

  • Non, cela ne permet pas d’accéder à n’importe quel périphérique USB.
  • Cela ne fonctionne qu’avec des périphériques qui enfreignent volontairement les règles.
  • Le modèle de sécurité des périphériques USB est discutable sur la plupart des plateformes.
  • Il ne faut pas connecter à son ordinateur des périphériques inconnus et arbitraires.

1 commentaires

 
GN⁺ 2025-03-15
Avis Hacker News
  • Ce fil porte surtout sur WebUSB, et non sur l’OP. WebUSB est un hack génial

    • D’un côté, je veux WebUSB, mais de l’autre, je ne veux pas que le grand public ait WebUSB
    • Les fenêtres de consentement ne servent à rien, les gens acceptent inconsciemment tout
    • J’aimais bien le modèle d’autorisations d’Internet Explorer. Il fallait marquer un site comme « fiable » pour pouvoir utiliser la fonctionnalité
    • S’il fallait marquer un site comme « fiable » pour utiliser des API dangereuses comme WebUSB, WebBluetooth, etc., il y aurait moins de personnes qui le feraient par erreur
  • Firefox ne prend pas en charge la communication avec des périphériques USB arbitraires. En revanche, il prend en charge la communication USB avec les clés de sécurité U2F

    • Ce projet programme un microcontrôleur pour qu’il se fasse passer pour une clé de sécurité U2F. L’objectif est de communiquer avec le microcontrôleur en USB via Firefox
    • En utilisant l’API Javascript Credentials et un peu d’astuce, il envoie des données au microcontrôleur et reçoit une réponse
  • Ceux qui utilisent WebUSB disent que c’est formidable, et ceux qui ne l’utilisent pas ne voient pas bien pourquoi c’est nécessaire

    • Personnellement, WebUSB a été formidable. La plupart des utilitaires WebUSB existent aussi sous forme d’apps à installer, mais la version web est plus simple à utiliser
    • Je pensais que ce serait populaire auprès des gens fatigués d’avoir une app pour tout le reste
  • Personnaliser un clavier avec le firmware QMK/Via via WebUSB est un cauchemar

    • Il faut laisser le navigateur lire entièrement le périphérique /dev/hidraw avant qu’il puisse interagir avec le firmware
    • Du point de vue de l’usage, c’est très désagréable, et tous les outils de personnalisation hors ligne sont basés sur Electron
    • La solution raisonnable serait de configurer sur le site web la disposition de clavier souhaitée à partir d’un fichier modèle json, de télécharger le json résultant, puis de flasher le firmware sur le clavier via un outil de flash au niveau sudo
  • USB Serial est un excellent outil, et il existe désormais toute une liste d’outils qui utilisent le navigateur pour configurer des appareils

    • Il y a ESPHome, Betaflight, ELRS, Flipper, etc.
    • WebKit souffre d’un manque de prise en charge, parce qu’Apple le développe. Mais Firefox manque de prise en charge de la « connexion » matérielle et n’est pas convivial pour les développeurs
    • Ils n’ajoutent pas cette prise en charge au motif que le consentement de l’utilisateur ne suffit pas pour autoriser l’accès à un appareil. Blink a pourtant prouvé qu’on pouvait le rendre sûr
  • Pour les personnes qui flashent souvent des appareils, l’avantage est évident. Mais pour les utilisateurs ordinaires, ce n’est pas important

    • Il peut être nécessaire d’avoir un outil ou un navigateur séparé. Flash Browser pourrait être fourni avec des outils supplémentaires
  • Il vaut peut-être mieux que les ports USB ne soient pas utilisés par du code exécuté dans le navigateur

  • Flasher GrapehenOS sur un téléphone Pixel a été l’une des expériences d’installation d’OS les plus agréables et les plus rapides

  • Chiffrer la clé privée avec une clé « maîtresse », puis renvoyer la clé privée chiffrée comme handle de clé

    • Donner des possibilités infinies semble au final voué à se retourner contre nous
  • Il existe une controverse politique autour de WebUSB

    • Je me demande en quoi consiste cette controverse politique