¿Es seguro escanear el QR de exportación de Google Authenticator?
Solo si lo generaste tú mismo, en tu propio teléfono antiguo, con tu propio teléfono nuevo apuntando a la pantalla. Cualquier otra persona que fotografíe ese QR, por cualquier motivo, obtiene acceso permanente a cada código 2FA de cada cuenta incluida en el paquete.
Google Authenticator y varias aplicaciones compatibles (Aegis, Raivo OTP, 2FAS) te permiten «exportar» tus cuentas 2FA almacenadas para poder trasladarlas a un nuevo dispositivo. La exportación toma la forma de un QR con un URI que comienza por otpauth-migration://. Dentro de ese URI hay un único paquete protocol-buffer (el esquema MigrationPayload de Google) que contiene todas las cuentas a la vez: emisor, nombre de cuenta, semilla secreta, algoritmo, número de dígitos, tipo (HOTP / TOTP) y contador.
El formato fue originalmente indocumentado, pero ha sido objeto de ingeniería inversa y hoy es el formato de intercambio de facto para copias de seguridad de 2FA. Las aplicaciones autenticadoras de terceros reconocen e importan el mismo QR.
Un solo QR puede contener decenas de cuentas. Visualmente es indistinguible de un QR de configuración TOTP normal; no hay ningún indicador visual que le indique a un observador casual que contiene el paquete completo.
Por qué un QR de paquete único es singularmente peligroso
Un QR de configuración otpauth:// normal es peligroso de escanear si no lo solicitaste, pero el radio de impacto es una sola cuenta. El radio de impacto del QR de migración es cada cuenta de tu autenticador. Si un atacante fotografía la pantalla que muestra este QR, por encima de tu hombro en una cafetería, a través de una cámara de seguridad que no notaste, por una ventana de cristal transparente, se va con la capacidad de eludir el 2FA en cada cuenta que cubría. De forma permanente. Hasta que rotes cada secreto manualmente, algo que la mayoría de los servicios no facilitan.
Los secretos del paquete no tienen fecha de caducidad. A diferencia de un token de sesión (que expira), a diferencia de un QR de passkey (que es de un solo uso), las semillas de un paquete de migración son válidas hasta que las reemplaces servicio por servicio.
Por eso el veredicto de nuestro escáner para cualquier QR otpauth-migration:// comienza en likely_dangerous y se mantiene así independientemente del contexto. El formato es correcto; el modelo de amenaza es la propia existencia del formato.
El cuerpo en base64, una vez decodificado, es un protocol-buffer MigrationPayload con estos campos de nivel superior:
otp_parameters, repetido. Una entrada por cuenta.
version, versión del esquema.
batch_size, número total de fragmentos cuando una exportación se divide en varios QRs.
batch_index, posición de este fragmento.
batch_id, identificador único que vincula los fragmentos entre sí.
Cada entrada de otp_parameters contiene:
secret, los bytes de semilla en crudo. Este es el material de clave real.
name, la etiqueta de la cuenta (p. ej. alice@acme.com).
issuer, el nombre del servicio (p. ej. ACME, GitHub).
algoritmo, SHA1 / SHA256 / SHA512 / MD5.
digits, 6 u 8 dígitos por código.
type, TOTP (basado en tiempo) u HOTP (basado en contador).
contador, valor actual del contador para entradas HOTP.
Lo que muestra nuestro escáner y lo que deliberadamente no muestra
✓ Mostrado
Para cada entrada del paquete, el veredicto muestra el emisor (ACME, GitHub, AWS), el nombre de cuenta (alice@acme.com), el algoritmo (SHA1), el número de dígitos (6) y el tipo (TOTP). La divulgación del veredicto indica «Accesos en este paquete: ACME / alice@acme.com; GitHub / bob@github; AWS / root; …» para que un usuario que SÍ está en proceso de migración pueda revisar la lista antes de importar.
La versión del esquema, el índice del lote, el tamaño del lote y el ID del lote también se muestran; resultan útiles cuando una exportación está dividida en varios QR.
✗ Nunca decodificado
Los bytes del secret en bruto nunca se decodifican en la salida del veredicto. Nuestro analizador los lee únicamente para verificar que cada entrada está bien formada (secreto presente y no vacío), luego descarta el valor antes de construir los hallazgos.
Esto está garantizado por la suite de pruebas: introducimos en el analizador payloads protobuf diseñados a mano que contienen cadenas canarias (SECRET_SEED_1, SECRET_SEED_2) y verificamos que esas cadenas nunca aparezcan en la salida serializada del veredicto. Una regresión en ese punto falla el CI.
Cuándo (y cómo) usar uno
Caso de uso legítimo: estás pasando de un teléfono a otro. El teléfono ANTIGUO muestra el QR de migración en pantalla durante unos 30 segundos. La aplicación autenticadora del teléfono NUEVO apunta a la pantalla e importa. No hay nadie más en la habitación. Eliminas la exportación del teléfono antiguo tras confirmar que todo se importó correctamente.
Los riesgos concretos son:
Capturas de pantalla del QR. Una captura guardada en fotos sincronizadas con la nube coloca el QR en cada dispositivo vinculado a esa cuenta.
Compartir el QR por chat. Aunque sea brevemente, cualquier persona con acceso al chat (ahora o más adelante) puede extraer el paquete.
Publicar el QR en un hilo de foro de ayuda. Ocurre más de lo que se cree; la gente pide ayuda y publica por error una foto de su exportación del autenticador.
Carteles o señalización pública confundidos con QRs de configuración. El formato es visualmente indistinguible de un QR de configuración de una sola cuenta.
Si sospechas que un QR de migración fue expuesto
Trátalo como una filtración de credenciales en cada cuenta del paquete. Los pasos de recuperación, en orden:
Inicia sesión en cada servicio afectado y rota el secreto de 2FA. La mayoría de los servicios te lo permite en Cuenta → Seguridad → Autenticación de dos factores → Desactivar y volver a inscribirse.
En los servicios que no permiten la rotación (poco frecuente pero existe), elimina y vuelve a añadir la cuenta.
Revisa la actividad reciente de inicio de sesión en cada cuenta afectada.
Elimina el QR de exportación original de todos los dispositivos y bibliotecas de fotos sincronizadas en la nube donde pueda estar.
Un atacante con el paquete puede generar códigos 2FA válidos durante años hasta que rotes. No lo postergues.
Arrastra la imagen QR a nuestro escáner, pega el URI otpauth-migration:// o usa la cámara. El veredicto muestra todas las cuentas del paquete sin decodificar los secretos en ningún momento.