BadBarcode
Recentemente, durante uma manutenção de automação comercial com qual eu estava trabalhando, me deparei com uma vulnerabilidade alarmante que poderia ser explorada utilizando um leitor de código de barras. Vou explicar o porquê.
Para entendermos o cenário, é essencial compreender o funcionamento básico de um leitor de código de barras. Segundo a Wikipedia, esses dispositivos utilizam um raio laser como fonte de luz e geralmente contêm um espelho ou prisma rotativo para escanear o feixe de laser e receber os dados do código de barras. O processo envolve a análise da luz refletida a partir do código de barras por um fotodiodo, que mede a intensidade da luz refletida. Tanto os leitores de caneta quanto os scanners a laser interpretam a luz emitida pelo leitor por meio de variações nos padrões de reflexão, usando esses padrões para receber dados.
É essencial notar que o leitor de barras envia as informações para o computador simulando um teclado.
Os códigos de barras, conhecidos por sua representação de dados por meio da reflexão ou absorção de luz, consistem em sequências de zeros e uns, semelhantes a um QR code, mas de forma mais simples. Importante destacar que os códigos de barras seguem padrões globais para garantir sua utilidade em todo o mundo. Alguns dos padrões mais conhecidos incluem EAN-13, EAN-9, CODE-39, CODE-128 e PostNet. Entretanto, nosso foco será no CODE-128. Diferentemente de outros padrões, o CODE-128 aceita não apenas caracteres hexadecimais clássicos, mas também símbolos como barras e colchetes, oferecendo diversas possibilidades de exploração.
Para ilustrar essa vulnerabilidade, apresento um exemplo prático em um vídeo. Nele, você poderá observar como um atacante utiliza um QR code para armazenar informações, mas o conceito se aplica igualmente a códigos de barras.
Para testar essa vulnerabilidade na sua casa, você pode utilizar um aplicativo que emula um leitor de código de barras, como este, e capturar os atalhos do seu teclado com um keylogger, como este.
Se você deseja criar um código de barras de teste, pode fazê-lo aqui. O código de barras no link já contém a informação "\x03", que representa o comando ctrl+c. Vale mencionar que você pode encontrar várias combinações rapidamente com o keylogger, já que não encontrei documentação específica sobre essa interpretação de teclas na internet.
(Uma observação importante: esta "falha" já havia sido descoberta anteriormente por chineses da "Tencent Security Xuanwu Lab" site deles). Apesar disso, considero minha "descoberta" uma redescoberta interessante 😁 Link do relatório deles.
Top comments (1)
Parabéns pela descoberta, porém, deixa algumas questões em aberto, como a extensão da vulnerabilidade, como os desenvolvedores de leitores de código de barras podem abordar esse problema e como os usuários podem se proteger contra possíveis ataques.