Standards · otpauth-migration

Ist der Google Authenticator Export QR sicher zu scannen?

Nur wenn Sie ihn selbst erstellt haben, auf Ihrem alten Telefon, mit Ihrem neuen Telefon direkt auf den Bildschirm gerichtet. Jeder, der diesen QR fotografiert – aus welchem Grund auch immer – erhält dauerhaften Zugriff auf jeden 2FA-Code für jedes Konto im Paket.

Paket prüfen → Alle Standards →

Was es ist

Google Authenticator und mehrere kompatible Apps (Aegis, Raivo OTP, 2FAS) ermöglichen den „Export" gespeicherter 2FA-Konten, um sie auf ein neues Gerät zu übertragen. Der Export erfolgt als QR mit einem URI, der mit otpauth-migration:// beginnt. Dieser URI enthält ein einzelnes Protocol-Buffer-Paket (Googles MigrationPayload-Schema) mit allen Konten gleichzeitig: Aussteller, Kontoname, Secret-Seed, Algorithmus, Stellenanzahl, Typ (HOTP / TOTP) und Zähler.

Das Format war ursprünglich undokumentiert, wurde jedoch durch Reverse Engineering erschlossen und ist inzwischen das De-facto-Austauschformat für 2FA-Backups. Drittanbieter-Authenticator-Apps erkennen und importieren denselben QR.

Ein QR kann Dutzende von Konten enthalten. Visuell ist er von einem normalen TOTP-Einrichtungs-QR nicht zu unterscheiden – es gibt kein sichtbares Merkmal, das einem flüchtigen Betrachter anzeigt, dass er das gesamte Paket trägt.

Warum ein einzelner Paket-QR besonders gefährlich ist

Ein normaler otpauth://-Setup-QR ist gefährlich zu scannen, wenn Sie ihn nicht angefordert haben – aber der Schaden beschränkt sich auf ein einziges Konto. Der Migrations-QR hat als potenzielle Schadenswirkung jedes Konto in Ihrem Authentifikator. Fotografiert jemand den Bildschirm, auf dem dieser QR angezeigt wird – über Ihre Schulter in einem Café, über eine Überwachungskamera, die Sie nicht bemerkt haben, durch ein durchsichtiges Glasfenster –, kann er dauerhaft die Zwei-Faktor-Authentifizierung für jedes abgedeckte Konto umgehen. Dauerhaft, bis Sie jedes Geheimnis manuell rotieren, was die meisten Dienste nicht einfach machen.

Die Secrets im Paket laufen nicht ab. Anders als ein Session-Token (der abläuft) oder ein Passkey-QR (der einmalig ist) sind die Seeds in einem Migrationspaket gültig, bis Sie sie Dienst für Dienst ersetzen.

Deshalb beginnt das Urteil unseres Scanners für jeden otpauth-migration://-QR bei likely_dangerous und bleibt dort, unabhängig vom Kontext. Das Format ist in Ordnung; das Bedrohungsmodell ergibt sich aus der bloßen Existenz des Formats.

Was wirklich drin steckt (Aufbau)

Der URI sieht so aus:

otpauth-migration://offline?data=<urlsafe-base64-encoded-protobuf>

Der Base64-Inhalt ist nach der Dekodierung ein MigrationPayload-Protocol-Buffer mit diesen Feldern auf oberster Ebene:

Jeder otp_parameters-Eintrag enthält:

Was unser Scanner anzeigt – und was er bewusst weglässt

✓ Angezeigt

Für jeden Eintrag im Paket zeigt das Urteil den Aussteller (ACME, GitHub, AWS), den Kontonamen (alice@acme.com), den Algorithmus (SHA1), die Stellenanzahl (6) und den Typ (TOTP). Die Urteilsanzeige lautet etwa „Enthaltene Konten: ACME / alice@acme.com; GitHub / bob@github; AWS / root; ..." – damit kann ein Nutzer, der sich mitten in einer Migration befindet, die Liste vor dem Import prüfen.

Schema-Version, Batch-Index, Batch-Größe und Batch-ID werden ebenfalls angezeigt – nützlich, wenn ein Export auf mehrere QRs aufgeteilt ist.

✗ Nie dekodiert

Die rohen secret-Bytes werden nie in die Urteilsausgabe dekodiert. Unser Analyzer liest sie nur, um zu prüfen, ob jeder Eintrag wohlgeformt ist (Secret vorhanden und nicht leer), und verwirft den Wert anschließend, bevor die Befunde erstellt werden.

Dies wird durch die Testsuite sichergestellt: Wir übergeben dem Analyzer handgefertigte Protobuf-Nutzlasten mit Canary-Strings (SECRET_SEED_1, SECRET_SEED_2) und prüfen, dass diese Strings nie in der serialisierten Urteilsausgabe erscheinen. Eine Regression dort schlägt im CI fehl.

Wann (und wie) man einen verwendet

Legitimer Anwendungsfall: Sie wechseln von einem Telefon auf ein anderes. Das ALTE Telefon zeigt den Migrations-QR für ca. 30 Sekunden auf dem Bildschirm. Die Authenticator-App des NEUEN Telefons wird auf den Bildschirm gerichtet und importiert die Daten. Niemand sonst ist im Raum. Sie löschen den Export vom alten Telefon, nachdem Sie alles importiert haben.

Die Gefahrenquellen sind:

Wenn Sie vermuten, dass ein Migrations-QR kompromittiert wurde

Behandeln Sie es als Datenleck für jedes Konto im Paket. Die Wiederherstellungsschritte in der richtigen Reihenfolge:

  1. Melden Sie sich bei jedem betroffenen Dienst an und erneuern Sie das 2FA-Secret. Bei den meisten Diensten ist dies unter Konto → Sicherheit → Zwei-Faktor-Authentifizierung → Deaktivieren, dann neu registrieren möglich.
  2. Bei Diensten ohne Rotationsmöglichkeit (selten, aber vorhanden): Konto entfernen und neu hinzufügen.
  3. Überprüfen Sie die letzten Anmeldeaktivitäten bei jedem betroffenen Konto.
  4. Löschen Sie den ursprünglichen Export-QR von jedem Gerät und jeder cloud-synchronisierten Fotobibliothek, die ihn möglicherweise enthält.

Ein Angreifer mit dem Paket kann jahrelang gültige 2FA-Codes erzeugen, bis Sie rotieren. Nicht aufschieben.

Verwandtes

Ihr Paket prüfen

Laden Sie das QR-Bild in unseren Scanner, fügen Sie den otpauth-migration://-URI ein oder nutzen Sie die Kamera. Das Urteil zeigt jedes Konto im Paket, ohne die Secrets jemals zu dekodieren.

Scanner öffnen →