Na platformě Android byla odhalena zranitelnost (CVE-2022-20465), která umožňuje deaktivovat uzamčení obrazovky prostřednictvím přesměrování SIM karty a zadání PUK kódu. Možnost deaktivace uzamčení byla demonstrována na zařízeních Google Pixel, ale jelikož oprava ovlivňuje základní kódovou základnu Androidu, je pravděpodobné, že se problém týká i firmware od jiných výrobců. Problém byl odstraněn v listopadovém souboru oprav bezpečnostních problémů pro Android. Výzkumník, který na problém upozornil, obdržel od společnosti Google odměnu ve výši 70 000 dolarů.
Problém je způsoben nesprávným zpracováním odemčení po zadání PUK kódu (Personal Unblocking Key), který se používá pro obnovení funkce SIM karty, zablokované po opakovaném nesprávném zadání PIN kódu. Pro deaktivaci uzamčení obrazovky stačí vložit do telefonu svou SIM kartu, u které je nastavena ochrana na základě PIN kódu. Po změně SIM karty, chráněné PIN kódem, se na obrazovce nejprve zobrazuje výzva k zadání PIN kódu. Pokud se třikrát nesprávně zadá PIN kód, dojde k zablokování SIM karty, po čemž bude možné zadat PUK kód pro odemčení. Ukázalo se, že správné zadání PUK kódu nejen odemyká SIM kartu, ale také přechází do hlavního rozhraní obcházením správce obrazovky, bez potvrzení přístupu pomocí hlavního hesla nebo grafického klíče.

Zranitelnost je způsobena chybou v logice kontroly PUK kódů v obslužném programu KeyguardSimPukViewController, který se podílí na zobrazení dodatečné autentizační obrazovky. V Androidu se používá několik typů autentizačních obrazovek (pro PIN, PUK, heslo, grafický klíč, biometrickou autentizaci) a tyto obrazovky jsou vyvolávány postupně, když je potřeba provést více kontrol, například když je potřeba PIN a grafický klíč.
Při správném zadání PIN kódu se aktivuje druhá fáze ověření, která vyžaduje zadání hlavního odblokovacího kódu, ale při zadání PUK kódu je tato fáze přeskočena a přístup je poskytnut bez žádosti o hlavní heslo nebo grafický klíč. Přeskočení následující fáze odblokování probíhá, protože při volání KeyguardSecurityContainerController#dismiss() nedochází k porovnání očekávané a provedené metody ověření, tj. zpracovatel považuje, že nedošlo ke změně metody ověření, a ukončení ověření PUK kódu svědčí o úspěšném potvrzení oprávnění.
Zranitelnost byla objevena náhodou – uživateli se vybila baterie telefonu a po nabití a zapnutí několikrát chybně zadal PIN kód, po čemž odblokoval pomocí PUK kódu a byl překvapen, že systém nepožadoval hlavní heslo používané k dešifrování dat, po čemž se zasekl s hláškou "Pixel is starting…". Uživatel byl důvtipný, rozhodl se přijít na to, co se děje, a začal různými způsoby experimentovat se zadáváním PIN a PUK kódů, až náhodou zapomněl restartovat zařízení po výměně SIM karty a místo zaseknutí získal přístup do prostředí.
Zvláštní zájem vzbuzuje reakce Googlu na zprávu o zranitelnosti. Informace o problému byly zaslány v červnu, ale do září se výzkumníkovi nepodařilo dosáhnout smysluplné odpovědi. Uvažoval, že takové chování je způsobeno tím, že není prvním, kdo o této chybě informuje. Podezření, že něco není v pořádku, vzbudila v září, kdy problém zůstal neopravený po instalaci aktualizace firmwaru, vydané po 90 dnech, kdy již vypršel uvedený termín utajení.
Jelikož všechny pokusy zjistit stav zaslané zprávy o problému vedly pouze k automatizovaným a šablonovitým odpovědím, pokusil se výzkumník osobně kontaktovat pracovníky Googlu, aby zjistil situaci ohledně přípravy opravy, a dokonce předvedl zranitelnost v londýnské kanceláři Googlu. Teprve poté se práce na odstranění zranitelnosti posunula z mrtvého bodu. Během šetření se ukázalo, že o problému už někdo dříve informoval, ale Google se rozhodl udělat výjimku a vyplatit odměnu za opětovné nahlášení problému, protože jen díky vytrvalosti autora si někdo na problém vzpomněl.
Zdroj: opennet.ru
