PinTheft — šestá zranitelnost třídy Copy Fail, která poskytuje práva root v Linuxu

Byly odhaleny informace o šesté zranitelnosti (1, 2-3, 4, 5), která umožňuje nepřihlášenému místnímu uživateli získat práva root přepisováním dat v stránkovém cache. Zranitelnost získala kódové jméno PinTheft. Prototyp exploit je k dispozici. CVE identifikátor ještě nebyl přidělen. Oprava je zatím dostupná pouze ve formě patch, který byl publikován 5. května a 11. května byl přijat do větve netdev, ale nebyl zahrnut do opravovaných vydání jádra.

Zranitelnost je přítomna v implementaci síťového protokolu RDS (Reliable Datagram Sockets), určeného pro vysokorychlostní výměnu zpráv mezi uzly v klastru, s minimálními zpožděními a garantovaným doručením. Útok je možný na systémech se zapnutou subsystémem io_uring (io_uring_disabled=0) a jádrem sestaveným s možnostmi CONFIG_RDS, CONFIG_RDS_TCP a CONFIG_IO_URING. Pro fungování exploit musí být v systému k dispozici spustitelný soubor s flagem SUID-root.

Pro automatické načtení jádrového modulu rds_tcp exploit požaduje odeslání dat přes RDS s použitím transportu SO_RDS_TRANSPORT=2. Bylo zjištěno, že mezi testovanými distribucemi Linuxu je jádrový modul rds ve výchozí konfiguraci k dispozici pouze v Arch Linuxu. Pro zablokování zranitelnosti alternativním způsobem lze zablokovat automatické načítání jádrových modulů rds a rds_tcp: rmmod rds_tcp rds printf 'install rds /bin/false\ninstall rds_tcp /bin/false\n' > /etc/modprobe.d/pintheft.conf

Zranitelnost byla způsobena chybou v implementaci mechanismu zerocopy ve funkci rds_message_zcopy_from_user(), která provádí přímou úpravu dat ve stránkovém cache, aby se vyloučila nadbytečná bufferizace. V případě selhání nebylo vyčištěno pole rm->data.op_nents, což vedlo k dvojímu uvolnění bufferu (double-free). Vznik nesprávné hodnoty v počítadle odkazů bylo možné využít k přepisování dat ve stránkovém cache, díky manipulaci s ukazatelem na pevný buffer io_uring.

V ostatních ohledech je mechanismus exploitace typický pro všechny zranitelnosti této třídy — útočník dosáhne uložení programu s flagem suid root do stránkového cache, po čemž vloží do ELF hlavičky kód pro spuštění /usr/bin/sh. Po této manipulaci spuštění programu vede k načtení do paměti nikoli originálního spustitelného souboru z úložiště, ale upravené kopie ze stránkového cache. Na rozdíl od předchozích exploitů, nová varianta je přizpůsobena pouze pro útok na utilitu „su“, ale může být také použita v systémech s takovými suid programy, jako jsou mount, passwd, chsh, newgrp, umount a pkexec.

Zdroj: opennet.ru

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster