1 pontos por GN⁺ 2025-03-15 | 1 comentários | Compartilhar no WhatsApp

> "Nós não precisamos de WebUSB!"

  • Existe uma forma de uma página web acessar dispositivos USB sem WebUSB. Além disso, o dispositivo pode ser projetado para contornar os requisitos de consentimento do usuário.

Demonstração rápida

  • Carregue u2f-hax.uf2 em um Raspberry Pi Pico e abra index.html em localhost ou em outro contexto seguro.
  • Os botões "On!" e "Off!" alternam o LED, e o estado do pino GP22 é atualizado periodicamente na página.

Como isso é possível?

  • O Pico é programado para emular um dongle U2F (chave física de segurança de dois fatores).
  • Em vez de recursos de segurança, dados arbitrários ficam escondidos no "key handle" e na assinatura da mensagem U2F_AUTHENTICATE.
  • Se o key handle começar com 0xfeedface, o Pico imediatamente "confirma" a presença do usuário e retorna os dados.

Por que isso é possível?

  • Os key handles do U2F foram projetados como blocos opacos de dados que pertencem ao dongle de segurança.
  • Eles foram projetados para permitir que dongles de baixo custo sejam associados a muitos sites.
  • O dongle armazena internamente uma chave criptográfica "mestra" exclusiva e, durante o registro, gera e retorna um novo par de chaves pública/privada.
  • Como os key handles são tratados de forma opaca, é possível esconder dados arbitrários neles.

Como os dados são retornados

  • Os dados são escondidos em uma assinatura ECDSA.
  • A assinatura é composta por dois números (r, s), e cada um deles é calculado dentro de um intervalo específico.
  • O Chrome verifica se os números da assinatura estão dentro do intervalo, mas o Firefox não faz essa verificação.
  • Para contornar a validação padrão do Chrome, o primeiro byte de cada número é definido como 0x7f.

Isso é uma vulnerabilidade de segurança?

  • Não, e não permite acessar dispositivos USB arbitrários.
  • Só funciona com dispositivos que violam deliberadamente as regras.
  • O modelo de segurança de dispositivos USB é questionável na maioria das plataformas.
  • Você não deve conectar dispositivos desconhecidos e arbitrários ao seu computador.

1 comentários

 
GN⁺ 2025-03-15
Comentários no Hacker News
  • Este tópico é principalmente sobre WebUSB, não sobre o OP. WebUSB é um hack genial

    • Por um lado, eu quero WebUSB, mas não quero que usuários comuns tenham WebUSB
    • Pop-ups de consentimento não funcionam, e as pessoas concordam com tudo no automático
    • Gosto do modelo de permissões do Internet Explorer. Era preciso marcar certos sites como "confiáveis" para usar o recurso
    • Se fosse preciso marcar um site como "confiável" para usar APIs perigosas como WebUSB, WebBluetooth etc., menos gente faria isso por engano
  • O Firefox não oferece suporte à comunicação com dispositivos USB arbitrários. Porém, oferece suporte à comunicação USB com chaves de segurança U2F

    • Este projeto programa um microcontrolador para se passar por uma chave de segurança U2F. O objetivo é se comunicar com o microcontrolador via USB pelo Firefox
    • Usando a API de Credentials do JavaScript e um pouco de engenhosidade, ele envia dados ao microcontrolador e recebe respostas
  • Quem usa WebUSB diz que ele é excelente, e quem não usa fica confuso sobre por que ele seria necessário

    • Pessoalmente, WebUSB foi excelente. A maioria dos utilitários com WebUSB também existe como app instalável próprio, mas usar a versão web é mais fácil
    • Eu esperava que isso fosse popular entre pessoas cansadas de ter um app para cada coisa
  • Personalizar teclados com firmware QMK/Via via WebUSB é um pesadelo

    • É preciso garantir que o navegador consiga ler completamente o dispositivo /dev/hidraw antes de o firmware interagir com ele
    • Em termos de uso, isso é bem desagradável, e todas as ferramentas offline de personalização são baseadas em Electron
    • A solução razoável seria configurar no site o layout de teclado desejado como um arquivo de modelo json, baixar o json resultante e então gravar o firmware no teclado com uma ferramenta de flashing em nível sudo
  • USB Serial é uma ferramenta excelente, e agora existe uma lista de ferramentas que usam o navegador para configurar dispositivos

    • Há ESPHome, Betaflight, ELRS, Flipper e outros
    • O WebKit tem suporte fraco porque é desenvolvido pela Apple. Já o Firefox carece de suporte de "conexão" com hardware e não é amigável para desenvolvedores
    • Eles não adicionam suporte porque consideram que o consentimento do usuário não basta para acessar um dispositivo. O Blink provou que isso pode ser feito com segurança
  • Para quem grava firmware em dispositivos com frequência, a vantagem é clara. Mas, para usuários comuns, isso não é importante

    • Pode ser necessário um navegador ou ferramenta separada. O Flash Browser poderia vir com ferramentas extras
  • Talvez seja melhor que portas USB não sejam usadas por código baseado em navegador

  • Fazer flash do GrapehenOS em um telefone Pixel foi uma das experiências mais agradáveis e rápidas de instalação de sistema operacional que já tive

  • Criptografe a chave privada com uma chave "mestra" e retorne a chave privada criptografada como identificador de chave

    • Dar oportunidades infinitas provavelmente acabaria saindo pela culatra
  • Há uma discussão política relacionada ao WebUSB

    • Fico curioso sobre qual seria essa discussão política