Представете си, че докосвате една връзка и root достъпът вече работи на вашия телефон с Android 17. Никога не изтегляте файл или не одобрявате прозорец с разрешения, защото самата страница върши работата, докато се зарежда.
Същият недостатък съществува в ядрото на Linux (Linux kernel) зад сървъри, облачни платформи и контейнери, така че телефонът е само началото. Изследователите са изградили атаката, качили са я онлайн и сега всеки може да гледа как тя придобива root права на устройството директно на екрана си.
Атаката се нарича IonStack, а стартиращата компания за сигурност Nebula Security я демонстрира в края на юни.
Трикът е, че те вземат две отделни грешки и ги изпълняват една след друга, като всяка грешка има своя собствена малка задача. Първата е в браузъра Firefox и всичко, което прави, е да осигури на атакуващия минимален достъп. Втората се намира много по-дълбоко, вътре в ядрото на Linux, върху което е изграден самият Android, и нейната задача е да вземе този малък отвор и да го разшири до root права. Root е акаунтът, който има разрешение да прави абсолютно всичко на телефона без никакви ограничения.
Всяка грешка сама по себе си не води атакуващия много далеч. Изпълнени заедно в правилния ред обаче, те ви превеждат от обикновена уеб страница, която сте кликнали, чак до този root акаунт.
Всичко започва от браузъра. Firefox има компонент, чиято единствена задача е да кара JavaScript да работи бързо. Той взема JavaScript на дадена страница и го превръща в суров машинен код на място, така че страниците да се усещат бързи. Този компонент се нарича IonMonkey – JIT компилаторът на браузъра.
Изследователите откриват място, където IonMonkey превръща този код в машинни инструкции по грешен начин. Това е първата уязвимост – CVE-2026-10702. Грешният резултат им позволява да достигнат до памет, която никога не е трябвало да докосват, а веднъж щом можете да направите това, можете да изпълните свой собствен код директно във Firefox.
Кодът, работещ в браузъра, не трябва да достига до самия телефон. Граница, наречена пясъчник (sandbox), държи уеб страницата отделена от всичко останало на устройството. Те обаче успяват да я преодолеят.
Тази първа стъпка почти никога не се проваля при тестовете им – близо 100 от 100 опита са успешни. Mozilla вече я е коригирала във Firefox 151.0.3, налична от втори юни.
Преминаването отвъд пясъчника прехвърля атакуващия на телефона, но само като обикновен потребител с ниско ниво на права. Точно тук се намесва втората уязвимост.
Тя е по-интересната и се нарича GhostLock (CVE-2026-43499).
Представете си две програми, които искат едно и също парче данни в един и същ момент. Те не могат да го имат едновременно, затова ядрото кара едната да чака своя ред. Този механизъм за изчакване се нарича заключване (lock). GhostLock се крие в специален вид заключване, създадено за спешни задачи, което програмите създават и премахват постоянно. Пълното му име е priority inheritance futex.
В този код се намира малка стъпка за почистване, наречена remove_waiter. Този, който я е написал, е приел за даденост, че нишката, извършваща почистването, винаги е същата нишка, която е чакала заключването. В почти всички случаи това е вярно. Но има един път, при който чакаща нишка се прехвърля от едно заключване на друго, където това изобщо не е вярно.
При този път ядрото почиства грешната нишка. То оставя след себе си указател (pointer), насочен към част от системната стекова памет (kernel stack memory), която вече е била освободена и разпределена за нещо друго. Указателят все още се доверява на това старо място, въпреки че това, което живее там сега, е различно.
Това погрешно доверие е самата уязвимост. То има име, което често се среща при работа с ядра – използване след освобождаване (use-after-free).
И точно оттам идва името на атаката: Ion от IonMonkey в браузъра и stack от уязвимостта use-after-free, намираща се в стека на ядрото.
От тази единствена грешка те изграждат пълно поемане на контрола, стъпка по стъпка.
Първо си връщат паметта, която ядрото е изхвърлило, и поставят фалшива версия на тази структура за заключване на същото място. Този фалшификат им дава възможност за едно точно записване в собствената памет на ядрото. Те насочват този запис към таблица, която ядрото поддържа за мрежови манипулатори (network handlers) – кодът, към който се преминава, когато пристигне определен трафик. След това изпращат единичен loopback UDP пакет (какъвто машината изпраща до собствения си адрес), което кара ядрото да премине към манипулатора, който току-що са пренаписали. Сега те управляват ядрото. Последна промяна в настройка, наречена core_pattern, стартира техния собствен код като root.
От началото до края процесът отнема около пет секунди. При тестовете им той работи в 97 от 100 случая.
Корекцията, която спира всичко това, е минимална. Една промяна указва на почистващата стъпка да работи върху нишката, която наистина е чакала, вместо върху тази, която случайно е изпълнявала почистването.
Тази част с ядрото е причината щетите да се разпространяват толкова далеч. Уязвимостта е проникнала в Linux през 2011 г. и е останала там незабелязана в продължение на повече от 15 години. Тя засяга версии на ядрото от 2.6.39 чак до 7.1, което обхваща петнадесет години обикновени Linux компилации, използвани от хората.