A Linux kernelben fény derült az első Rust eredetű CVE sebezhetőségre

Fény derült az egyik első olyan sebezhetőségre, amelyet kifejezetten a Linux kernel Rustban írt kódjához kötnek: ez a CVE-2025-68260 számon nyilvántartott sérülékenység, amely az Android Binder driver Rust implementációját érinti. A hibát Greg Kroah-Hartman jelentette be a linux-cve-announce levelezőlistán, a Linux CVE-csapata pedig hivatalosan is hozzárendelte a CVE-azonosítót. A probléma nem a Rust nyelv „biztonságos” részében, hanem egy unsafe blokkban jelentkezik, és versenyhelyzetet okoz a Binder belső death_list listakezelésében. A hiba következményei nem távoli kódfuttatásban vagy jogosultságkiterjesztésben, hanem memóriakorrupció és kernelpánik formájában jelennek meg, vagyis tipikus szolgáltatásmegtagadási (DoS) kategóriájú sebezhetőségről van szó.

A Linux kernelben fény derült az első Rust eredetű CVE sebezhetőségre

Mi siklik félre a rust_binder death_list kezelésénél?

A hiba a Rust Binder node-kezelésénél, pontosabban a death_list nevű listában tárolt elemek kezelésénél bukik ki. A kódban van egy unsafe hívás, amely egy NodeDeath elemet töröl a listából azon a feltételezésen alapulva, hogy az adott elem vagy ebben a listában van, vagy éppen semmilyen listához nem tartozik. A probléma az, hogy több szál párhuzamos futása mellett ez a feltételezés könnyen hamissá válhat. Az egyik szál a Node::release kódrészben kiveszi az elemeket az eredeti listából, és egy saját, lokális listába pakolja őket, miközben egy másik szál ugyanarra az elemre próbál remove-ot hívni az eredeti listán.

Ilyenkor a prev/next pointereket két szál is piszkálja egyszerre, ami a lista belső szerkezetének korrupciójához vezet. A CVE-leírás szerint ez a gyakorlatban memóriacímzési hibákhoz, kernelpánikhoz és összeomláshoz vezet, amit Androidos kernelekből származó backtrace-ekkel is alátámasztanak. A javítás lényege, hogy a Node::release ezentúl nem egy külön, stacken tárolt másolatot jár be a lock elengedése után, hanem közvetlenül az eredeti listáról veszi le az elemeket, miközben a zárolás végig érvényben marad. Így megszűnik az a helyzet, hogy a lista pointereit két szál módosítsa egyszerre.

Mely kernelverziókat érinti, és hol javították?

A sérülékenység a Rust-alapú Binder driver bevezetésével került a kernelbe, vagyis a Linux 6.18-as sorozattól kezdve érhető tetten. A linux-cve-announce összefoglaló szerint a hibás viselkedést bevezető commit a 6.18-as ágon jelent meg, és a 6.18.1-es stabil kiadásban javították; a mainline vonalon a 6.19-rc1 tartalmazza a javítást. A CVE-adatbázisok alapján a problémát jelenleg kernelpánikot és rendszerösszeomlást okozó DoS-ként kategorizálják, és nem látszik olyan életszerű kihasználási mód, amely távoli kódfuttatást vagy emelt szintű jogosultság megszerzését tenné reálisan lehetővé, de a memóriakorrupció természete miatt a hibát így is komolyan veszik.

A Linux CVE-csapata azt javasolja, hogy a javítás érdekében a legfrissebb stabil kernelverzióra frissítsünk, ahelyett hogy egyes változtatásokat külön-külön válogatva próbálnánk visszahúzni a saját kernelfára. Az egyedi patchek kézi beemelését a közösség nem ajánlja és nem is támogatja.

Gyakorlati oldalról a hiba elsősorban azokat a rendszereket érinti, ahol az Android Binder Rust engedélyezve van, tehát tipikusan Androidos vagy Binder-t használó kernelkonfigurációknál érdemes külön odafigyelni a frissítésre.