Раскрыта тэхніка эксплуатацыі ўразлівасці ў tty-падсістэме ядра Linux

Даследнікі з каманды Google Project Zero апублікавалі метад эксплуатацыі ўразлівасці (CVE-2020-29661) у рэалізацыі ioctl-апрацоўшчыка TIOCSPGRP з tty-падсістэмы ядра Linux, а таксама дэталёва разгледзелі механізмы абароны, якія маглі б блакаваць падобныя ўразлівасці.

Якая выклікае праблему памылка была ўхіленая ў ядры Linux яшчэ 3 снежня мінулага гады. Праблема выяўляецца ў ядрах да версіі 5.9.13, але большасць дыстрыбутываў ухілілі праблему ў абнаўленнях пакетаў з ядром, прапанаваных яшчэ летась (Debian, RHEL, SUSE, Ubuntu, Fedora, Arch). Падобная ўразлівасць (CVE-2020-29660) адначасова была знойдзена ў рэалізацыі ioctl-выкліку TIOCGSID, але яна таксама ўжо паўсюдна ўхіленая.

Праблема выклікана памылкай пры ўсталёўцы блакіровак, якая прыводзіць да стану гонкі ў кодзе drivers/tty/tty_jobctrl.c, якое атрымалася выкарыстаць для стварэння ўмоў звароту да памяці пасля яе вызвалення (use-after-free), якія эксплуатуюцца з прасторы карыстача праз маніпуляцыі з ioct- выклікам TIOCSPGRP. Працоўны эксплоіт прадэманстраваны для падвышэння прывілеяў у Debian 10 з ядром 4.19.0-13-amd64.

Пры гэтым у апублікаваным артыкуле акцэнт ставіцца не гэтулькі на тэхніцы стварэння працоўнага эксплоіта, гэтулькі на тым, якія прылады ў ядры існуюць для абароны ад падобных уразлівасцяў. Выснова робіцца не суцяшальны, метады тыпу сегментавання памяці ў кучы і кантролю за зваротам да памяці пасля яе вызвалення не прымяняюцца на практыцы, бо прыводзяць да зніжэння прадукцыйнасці, а абарона на аснове CFI (Control Flow Integrity), блакавальная эксплоіты на позніх стадыях нападу, патрабуе дапрацоўкі.

Пры разглядзе таго, што магло б змяніць сітуацыю ў доўгатэрміновай перспектыве, вылучаецца ўжыванне прасунутых статычных аналізатараў або выкарыстанне моў, якія забяспечваюць бяспечную працу з памяццю, такіх як Rust і дыялекты мовы Сі з пашыранымі анатацыямі (напрыклад, Checked C), на этапе зборкі правяраючых стан блакіровак, аб'ектаў і паказальнікаў. З метадаў абароны таксама згадваецца актывацыя рэжыму panic_on_oops, перавод структур ядра ў рэжым толькі для чытання і абмежаванне доступу да сістэмных выклікаў пры дапамозе такіх механізмаў, як seccomp.

Крыніца: opennet.ru

Дадаць каментар