Bola odhalená šiestá zraniteľnosť (1, 2-3, 4, 5), ktorá umožňuje nepriviligovanému lokálnemu používateľovi získať práva root prepísaním údajov v stránkovom cache. Zraniteľnosť dostala kódové meno PinTheft. Je k dispozícii prototyp exploitov. CVE identifikátor ešte nebol priradený. Oprava je zatiaľ dostupná iba vo forme opravných súborov, ktorá bola zverejnená 5. mája a 11. mája bola prijatá do vetvy netdev, ale nebola zahrnutá do opravných vydaní jadra.
Zraniteľnosť sa nachádza v implementácii sieťového protokolu RDS (Reliable Datagram Sockets), ktorý je určený na vysokorýchlostnú výmenu správ medzi uzlami v klastri s minimálnym oneskorením a zaručenou dodávkou. Útok je možný na systémoch so zapnutou subsystémom io_uring (io_uring_disabled=0) a jadrom zloženým s voľbami CONFIG_RDS, CONFIG_RDS_TCP a CONFIG_IO_URING. Na fungovanie exploitov musí byť v systéme dostupný na čítanie vykonateľný súbor s vlajkou SUID-root.
Na automatickú aktiváciu modulu jadra rds_tcp exploit požaduje odoslanie dát cez RDS s použitím transportu SO_RDS_TRANSPORT=2. Je pozoruhodné, že medzi testovanými distribúciami Linux v predvolenej konfigurácii je modul jadra rds poskytovaný iba v Arch Linux. Na obídenie zraniteľnosti je možné zakázať automatické načítanie modulov jadra rds a rds_tcp: rmmod rds_tcp rds printf 'install rds /bin/false\ninstall rds_tcp /bin/false\n' > /etc/modprobe.d/pintheft.conf
Zraniteľnosť je spôsobená chybou v implementácii mechanizmu zerocopy vo funkcii rds_message_zcopy_from_user(), ktorá realizuje priame zmeny údajov v stránkovom cache s cieľom eliminovať nadbytočné vyrovnávacie pamäte. V prípade zlyhania nebolo vyčistené pole rm->data.op_nents, čo spôsobilo dvojité uvoľnenie vyrovnávacej pamäte (double-free). Vznik nesprávneho hodnoty v počítadle referencií sa podarilo zneužiť na prepisovanie údajov v stránkovom cache, vďaka manipulácii s ukazovateľom na pevný vyrovnávaciu pamäť io_uring.
V ostatnom prípade je mechanizmus využitia typický pre všetky zraniteľnosti tejto triedy - útočník dosiahne uložení súboru programu s praporcom suid root do stránkového cache, po ktorom nahradí ELF hlavičku kódom na spustenie /usr/bin/sh. Po tejto manipulácii spustenie programu vedie k načítaniu do pamäte nie pôvodného spustiteľného súboru z úložiska, ale upravenej kópie zo stránkového cache. Na rozdiel od predchádzajúcich exploitov, nová varianta je prispôsobená len na útok na utilitu "su", ale môže byť tiež použitá pri prítomnosti v systéme takých suid-programov, ako mount, passwd, chsh, newgrp, umount a pkexec.
Zdroj: opennet.ru
