В платформата Android е открита уязвимост (CVE-2022-20465), която позволява деактивиране на блокировката на екрана чрез смяна на SIM-картата и въвеждане на PUK-код. Възможността за деактивиране на блокировката бе демонстрирана на устройства Google Pixel, но тъй като корекцията засяга основната кодова база на Android, вероятно проблемът касае и фърмуерите на други производители. Проблемът е отстранен в ноемврийския набор от корекции за сигурността на Android. Изследователят, който е обърнал внимание на проблема, е получил възнаграждение от компанията Google в размер на 70 хиляди долара.
Проблемът е предизвикан от неправилна обработка на отключването след въвеждане на PUK-кода (Personal Unblocking Key), който се използва за възстановяване на работата на SIM-картата, блокирана след многократно неправилно въвеждане на PIN-код. За деактивиране на блокировката на екрана е достатъчно да се постави SIM-карта в телефона, за която е настроена защита, базирана на PIN-код. След смяна на SIM-карта, защитена с PIN-код, на екрана първоначално се извежда заявка за PIN-код. Ако три пъти бъдат неправилно въведени PIN-кодовете, SIM-картата ще бъде блокирана, след което ще бъде предоставена възможност за въвеждане на PUK-код. Оказа се, че правилното въвеждане на PUK-кода не само отключва SIM-картата, но води и до преминаване в основния интерфейс, заобикаляйки екрана на заключването, без потвърждение на достъпа с основната парола или графичен ключ.

Уязвимостта е предизвикана от грешка в логиката на проверка на PUK-кодовете в обработчика KeyguardSimPukViewController, отговарящ за показването на допълнителния екран за аутентификация. В Android се използват няколко типа екрани за аутентификация (за PIN, PUK, парола, графичен ключ, биометрична аутентификация) и тези екрани се извикват последователно, когато е необходима извършването на няколко проверки, например, когато се изисква PIN и графичен ключ.
При правилен вход на PIN-кода се активира втората фаза на проверка, която изисква въвеждане на основния код за отключване, но при въвеждане на PUK-код подобна фаза е пропусната и достъпът се предоставя без искане на основната парола или графичен ключ. Пропускането на следващия етап на отключване се извършва, тъй като при извикване на KeyguardSecurityContainerController#dismiss() не се извършва сравнение между очаквания и извършения метод за проверка, т.е. обработвачът счита, че смяната на метода на проверка не е настъпила и завършването на проверката на PUK-кода свидетелства за успешна проверка на правомощията.
Уязвимостта беше открита случайно — на потребителя му се е изтощила батерията на телефона и след зареждане и включване, той няколко пъти сбърка при въвеждането на PIN-кода, след което отключи PUK-кода и се изненада, че системата не поиска основната парола, използвана за декодиране на данни, след което замръзна с съобщение „Pixel is starting…“. Потребителят се оказа любопитен, реши да разбере какво става и започна да експериментира с различни начини на въвеждане на PIN- и PUK-кодовете, докато случайно не забрави да рестартира устройството след смяна на SIM-картата и не получи вместо замръзване достъп до обкръжението.
Специален интерес представлява реакцията на Google на съобщението за уязвимостта. Информацията за проблема беше изпратена през юни, но до септември изследователят така и не успя да получи разумен отговор. Той сметна, че подобно поведение се дължи на факта, че не е първият, който съобщава за тази грешка. Съмненията, че нещо не е наред, възникнаха през септември, когато проблемът остана неизправен след инсталирането на актуализация на фърмуера, пусната след 90 дни, когато вече изтече обявеният период на неразгласяване.
Тъй като всички опити да се установи състоянието на изпратеното съобщение за проблема завършваха само с автоматизирани и шаблонни отговори, изследователят се опита да се свърже лично с работниците на Google, за да изясни ситуацията с подготовката на поправката и дори демонстрира уязвимостта в лондонския офис на Google. Само след това работата по отстраняване на уязвимостта се премести от мъртвата точка. В хода на разследването се оказа, че за проблема вече е съобщавано, но Google реши да направи изключение и да изплати награда за повторното съобщение за проблема, тъй като само благодарение на упоритостта на автора, проблемът беше забелязан.
Източник: opennet.ru
