Static QR

Por qué nunca deberías fiarte de un generador de códigos QR en línea

Un código QR no se puede leer a simple vista. Todo el ataque se sostiene sobre ese único hecho.

Cómo empezó este sitio

Este proyecto nació de una prueba sencilla. Busca un generador de códigos QR, coge los primeros resultados, pega una dirección de Bitcoin y compara lo que te devuelven. Varios devolvieron un código que no contenía la dirección introducida. Contenía la de otra persona.

Cómo funciona la sustitución

Pegas tu dirección de pago en un sitio web. El sitio te devuelve una imagen. Una imagen de un código QR no se puede leer, así que la aceptas, la pones en una factura, un cartel, una página de donaciones o una tarjeta de visita, y descartas el texto original. Todo el que lo escanee le pagará al atacante en tu lugar. En ningún momento parece que algo vaya mal y, cuando alguien se da cuenta, el dinero ya no está y el código impreso ya circula.

Por qué sigue funcionando

  • No puedes distinguir dos códigos QR mirándolos. Tampoco puede hacerlo nadie a quien se lo envíes.
  • El generador se usa exactamente una vez, cuando el texto original todavía está en pantalla, y nunca más.
  • El código suele acabar impreso, en una captura o incrustado en algún sitio donde el texto original ya no existe, así que no queda nada con lo que compararlo.
  • Quienes sí comprueban tienden a mirar solo los primeros y últimos caracteres. Los atacantes generan direcciones que coinciden en esas posiciones.

La otra dirección: códigos que no has creado tú

Este sitio trata sobre todo de los códigos que creas tú. La mayor parte del fraude con códigos QR va en sentido contrario. Alguien pega un adhesivo sobre el código de un parquímetro o de un terminal de pago, o envía una factura en PDF con un código en lugar de un enlace. El código lleva a un sitio que parece el correcto y te pide iniciar sesión o pagar. En el sector lo llaman quishing, y funciona por la misma razón que la sustitución: no puedes ver adónde lleva un código QR hasta que ya has ido.

  • Adhesivos pegados sobre el código real en parquímetros, cargadores y terminales de pago.
  • Códigos dentro de correos y de archivos PDF adjuntos, que superan los filtros que habrían detenido un enlace normal.
  • Menús falsos, avisos de entrega de paquetes y recordatorios de facturas de suministros.
  • Carteles y folletos en la vía pública, donde nadie distingue un adhesivo añadido de la impresión original.

Descodifica un código y lee su destino antes de visitarlo: Comprobar un código

Cómo protegerte

  • Escanea tú mismo cada código QR antes de compartirlo, con el dispositivo desde el que pagarías de verdad.
  • Compara la cadena entera, carácter por carácter, no solo los extremos.
  • Prefiere un generador que funcione con la red desconectada. Si necesita un servidor, el servidor puede cambiar tus datos.
  • Comprueba la suma de verificación de la dirección. Las direcciones de Bitcoin llevan una y una dirección corrupta no la pasará.
  • Vuelve a generar el código tú mismo en lugar de reutilizar uno que te hayan enviado.
  • Antes de escanear un código en la vía pública, comprueba si han pegado un adhesivo sobre el original. La manipulación física es la versión más habitual de esto.
  • Lee el dominio completo de cualquier enlace al que lleve un código, y nunca inicies sesión ni pagues desde una página a la que has llegado escaneando algo.

Qué hace distinto este sitio

  • El código QR se construye en tu navegador. Nada de lo que escribes se transmite, porque el sitio no tiene servidor al que transmitirlo.
  • Después de dibujar el código, la página descodifica la imagen que acaba de producir y te muestra lo que lee. Si no coincide con lo que escribiste, te lo dice.
  • La política de seguridad de contenido no permite ningún origen externo, así que la página no puede cargar ni contactar con nada, ni siquiera por accidente.
  • Todo son archivos estáticos y código abierto. Puedes leer cada línea, guardar la página y usarla sin conexión para siempre.

Tampoco te fíes de este sitio

Todo lo anterior es un motivo para desconfiar de los generadores de códigos QR, y esto es un generador de códigos QR. La comprobación de relectura de la página del generador es una comodidad, no una prueba: es el mismo código que dibujó la imagen. La única comprobación que cuenta de verdad es la que haces tú, en tu propio dispositivo, contra tu propia dirección. Haz esa.

Preguntas frecuentes

¿Puede un generador de códigos QR cambiar mi dirección de Bitcoin?

Sí. Si el código se genera en el servidor de otra persona, ese servidor decide qué entra en la imagen. Puede devolver un código con la dirección que quiera y la imagen parecerá completamente normal.

¿Cómo compruebo que un código QR contiene la dirección correcta?

Escanéalo con el dispositivo desde el que pagarías y compara el texto descodificado con tu dirección completa. No compares solo los primeros y últimos caracteres, porque un atacante puede hacerlos coincidir.

¿Es seguro usar un generador de códigos QR en línea para una dirección de monedero?

Solo si el generador funciona por completo en tu navegador y verificas el resultado escaneándolo. Cualquier cosa que envíe tu dirección a un servidor te está pidiendo que confíes tu dinero a ese servidor.

¿Este sitio envía mis datos a alguna parte?

No. La página es estática y la codificación se ejecuta en tu navegador. Puedes desconectarte de internet, recargar y seguirá funcionando.

¿Qué es el quishing?

Phishing que usa un código QR en lugar de un enlace. El código oculta el destino, así que esquiva tanto los filtros de correo como la costumbre de pasar el ratón por encima de un enlace antes de hacer clic. Los adhesivos pegados sobre códigos reales en la vía pública son la forma más común.

¿Cómo puedo saber adónde lleva un código QR antes de escanearlo?

Descodifica la imagen en lugar de abrirla. El comprobador de este sitio te muestra el destino sin visitarlo, y funciona con una foto o una captura de pantalla de cualquier código.