Standarder · otpauth-migration

Är Google Authenticator-export-QR säker att skanna?

Bara om du genererade den själv, på din egen gamla telefon, med din nya telefon riktad mot skärmen. Vem som helst som fotograferar QR-koden — av någon anledning — får permanent tillgång till varje 2FA-kod för varje konto i paketet.

Verifiera ett paket → Alla standarder →

Vad det är

Google Authenticator och flera kompatibla appar (Aegis, Raivo OTP, 2FAS) låter dig ”exportera” dina lagrade 2FA-konton så att du kan flytta dem till en ny enhet. Exporten tar formen av en QR-kod med en URI som börjar med otpauth-migration://. Inuti den URI:en finns ett enda protokollbuffertpaket (Googles MigrationPayload-schema) som innehåller alla konton på en gång — utfärdare, kontonamn, hemligt seed, algoritm, sifferantal, typ (HOTP / TOTP) och räknare.

Formatet var från början odokumenterat, men det har blivit reverse-engineerat och är nu det faktiska utbytesformatet för 2FA-säkerhetskopior. Autentiseringsappar från tredje part känner igen och importerar samma QR.

En QR-kod kan innehålla dussintals konton. QR-koden är visuellt oskiljbar från en vanlig TOTP-installations-QR — det finns ingen visuell markering som berättar för en tillfällig observer att den innehåller hela paketet.

Varför en enda paket-QR är unikt farlig

En vanlig otpauth://-installations-QR är farlig att skanna om du inte begärde det — men skade-rådien är ett konto. Migrerings-QR:ens skade-rådie är varje konto i din autentiseringsapp. Om en angripare fotograferar skärmen som visar QR-koden — över axeln på ett café, via en övervakningskamera du inte märkte, genom ett genomskinligt glasfönster — går de därifrån med förmågan att kringgå 2FA på varje konto det omfattar. Permanent. Tills du roterar varje hemlighet manuellt, vilket de flesta tjänster inte gör enkelt.

Det finns inget utgångsdatum på hemligheterna i paketet. Till skillnad från en sessionstoken (som löper ut), till skillnad från en passkey-QR (som är éngangs), gäller seeds i ett migreringspaket tills du ersätter dem tjänst för tjänst.

Det är därför vår skannares utslåg på varje otpauth-migration://-QR börjar på troligen_farlig och stannar där oavsett sammanhang. Formatet är okej; hotmodellen är formatets existens.

Vad som faktiskt finns inne (anatomi)

URI:en ser ut så här:

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

Base64-kroppen, när den avkodas, är en MigrationPayload-protokollbuffert med dessa fält på toppnivå:

Varje otp_parameters-post har:

Vad vår skanner visar, och vad den avsiktligt inte visar

✓ Visas

För varje post i paketet visar utslåget utfärdaren (ACME, GitHub, AWS), kontonamnet (alice@acme.com), algoritmen (SHA1), antalet siffror (6) och typen (TOTP). Utslågets avtäckning läser ”Beviljanden i detta paket: ACME / alice@acme.com; GitHub / bob@github; AWS / root; …” så att en användare som är mitt i en migrering kan granska listan innan import.

Schemaversion, paketindex, paketstorlek och paket-ID visas också — användbart när en export delas upp i flera QR-koder.

✗ Avkodas aldrig

De råa secret-bytesen avkodas aldrig i utslågsutdatan. Vår analysator läser dem bara för att verifiera att varje post är välformad (hemlighet finns + ej tom) och kasserar sedan värdet innan findings byggs.

Detta håvdas av testsviten — vi matar analysatorn med handgjorda protobuf-nyttolaster som innehåller kanärstreckar (SECRET_SEED_1, SECRET_SEED_2) och håvdar att dessa strängar aldrig visas i den serialiserade utslågsutdatan. En regression där misslyckas CI.

När (och hur) man använder en

Legitimt användningsfall: du uppgraderar från en telefon till en annan. Den GAMLA telefonen visar migrations-QR på skärmen i ca 30 sekunder. Den NYA telefonens autentiseringsapp siktar på skärmen och importerar. Ingen annan är i rummet. Du raderar exporten från den gamla telefonen efter att ha bekräftat att allt importerades.

Riskytorna är:

Om du misstanker att en migrations-QR har exponerats

Behandla det som en läckage av autentiseringsuppgifter på varje konto i paketet. Återgångsstegen, i ordning:

  1. Logga in på varje påverkad tjänst och rotera 2FA-hemligheten. De flesta tjänster låter dig göra detta under Konto → Säkerhet → Tvåfaktorsautentisering → Avaktivera sedan återinrullera.
  2. För tjänster som inte exponerar rotation (sällsynt men finns), ta bort och lägg till kontot igen.
  3. Granska den senaste inloggningsaktiviteten på varje påverkat konto.
  4. Radera den ursprungliga export-QR:en från varje enhet + molnsynkroniserat fotobibliotek som kan ha den.

En angripare med paketet kan producera giltiga 2FA-koder i år tills du roterar. Skjut inte upp det.

Relaterat

Verifiera ditt paket

Släpp in QR-bilden i vår skanner, klistra in otpauth-migration://-URI:en eller använd kameran. Utslåget visar varje konto i paketet utan att någonsin avkoda hemligheterna.

Öppna skannern →