1 puntos por GN⁺ 2025-03-15 | 1 comentarios | Compartir por WhatsApp

> "¡No necesitamos WebUSB!"

  • Hay una forma en que una página web puede acceder a un dispositivo USB sin WebUSB. Además, el dispositivo puede diseñarse para evadir los requisitos de consentimiento del usuario.

Demo rápida

  • Carga u2f-hax.uf2 en una Raspberry Pi Pico y luego carga index.html desde localhost u otro contexto seguro.
  • Los botones "On!" y "Off!" alternan el LED, y el estado del pin GP22 se actualiza periódicamente en la página.

¿Cómo es posible?

  • La Pico está programada para emular un dongle U2F (llave física de seguridad de dos factores).
  • En lugar de funciones de seguridad, se ocultan datos arbitrarios en el "key handle" y en la firma del mensaje U2F_AUTHENTICATE.
  • Si el key handle empieza con 0xfeedface, la Pico "verifica" de inmediato la presencia del usuario y devuelve los datos.

¿Por qué es posible?

  • Los key handles de U2F están diseñados como bloques opacos de datos que pertenecen al dongle de seguridad.
  • Están diseñados para que un dongle de bajo costo pueda asociarse con muchos sitios web.
  • El dongle guarda internamente una clave criptográfica "maestra" única y, durante el registro, genera y devuelve un nuevo par de claves pública/privada.
  • Como el key handle se trata de forma opaca, puede ocultar datos arbitrarios.

Cómo devolver datos

  • Se ocultan datos dentro de una firma ECDSA.
  • La firma está compuesta por dos números (r, s), y cada uno se calcula dentro de un rango específico.
  • Chrome verifica que los números de la firma estén dentro del rango, pero Firefox no lo verifica.
  • Para evadir la validación predeterminada de Chrome, se establece el primer byte de cada número en 0x7f.

¿Es una vulnerabilidad de seguridad?

  • No, y no permite acceder a dispositivos USB arbitrarios.
  • Solo funciona con dispositivos diseñados intencionalmente para violar las reglas.
  • El modelo de seguridad de los dispositivos USB es cuestionable en la mayoría de las plataformas.
  • No deberías conectar dispositivos desconocidos y arbitrarios a tu computadora.

1 comentarios

 
GN⁺ 2025-03-15
Opiniones en Hacker News
  • Este hilo trata principalmente sobre WebUSB, no sobre el OP. WebUSB es un hack muy ingenioso

    • Por un lado, quiero WebUSB, pero no quiero que la gente común tenga WebUSB
    • Los pop-ups de consentimiento no funcionan; la gente acepta todo automáticamente
    • Me gusta el modelo de permisos de Internet Explorer. Hay que marcar ciertos sitios como "confiables" para poder usar la función
    • Si hubiera que marcar un sitio como "confiable" para usar APIs riesgosas como WebUSB, WebBluetooth, etc., menos gente lo haría por accidente
  • Firefox no soporta la comunicación con dispositivos USB arbitrarios. Sin embargo, sí soporta la comunicación USB con llaves de seguridad U2F

    • Este proyecto programa un microcontrolador para hacerse pasar por una llave de seguridad U2F. El objetivo es comunicarse con el microcontrolador por USB a través de Firefox
    • Usan la API de Credentials de Javascript y un poco de ingenio para enviar datos al microcontrolador y recibir respuestas
  • Quienes usan WebUSB dicen que es excelente, y quienes no lo usan no entienden por qué sería necesario

    • Personalmente, WebUSB me pareció excelente. La mayoría de las utilidades basadas en WebUSB también existen como apps instalables, pero usar la versión web es más fácil
    • Pensé que sería popular entre la gente que ya está cansada de tener una app para todo lo demás
  • Personalizar teclados con firmware QMK/Via usando WebUSB es una pesadilla

    • Hay que asegurarse de que el navegador pueda leer completamente el dispositivo /dev/hidraw antes de que el firmware interactúe con él
    • Desde el punto de vista de uso es muy desagradable, y todas las herramientas de personalización offline están basadas en Electron
    • Una solución razonable sería configurar en el sitio web el layout de teclado deseado con un archivo JSON de plantilla, descargar el JSON resultante y luego flashear el firmware al teclado con una herramienta de flasheo a nivel sudo
  • USB Serial es una gran herramienta, y ahora hay una lista de herramientas para configurar dispositivos usando el navegador

    • Están ESPHome, Betaflight, ELRS, Flipper y otros
    • WebKit tiene poco soporte porque lo desarrolla Apple. Pero Firefox también carece de soporte para la "conectividad" de hardware y no es amigable con los desarrolladores
    • No agregan soporte porque consideran que el consentimiento del usuario no es suficiente para permitir acceso al dispositivo. Blink ha demostrado que se puede hacer de forma segura
  • Para quienes flashean dispositivos con frecuencia, la ventaja es clara. Pero para el usuario común no es importante

    • Podría requerirse una herramienta o navegador aparte. Flash Browser podría venir con herramientas adicionales
  • Quizá sea mejor que los puertos USB no se usen desde código basado en navegador

  • Flashear GrapehenOS en un teléfono Pixel fue una de las experiencias de instalación de sistema operativo más agradables y rápidas que he tenido

  • Se cifra la clave privada con una clave "maestra", y la clave privada cifrada se devuelve como key handle

    • Dar oportunidades infinitas probablemente termine saliendo mal
  • Hay una discusión política relacionada con WebUSB

    • Me pregunto cuál es esa discusión política