Уразлівасць у XFS, якая дазваляе чытаць волкія дадзеныя блокавай прылады

У кодзе файлавай сістэмы XFS выяўленая ўразлівасць (CVE-2021-4155), якая дазваляе лакальнаму непрывілеяванаму карыстачу чытаць дадзеныя невыкарыстоўваных блокаў напроста з блокавай прылады. Усе значныя версіі ядра Linux старэйшыя за 5.16, утрымоўвальныя драйвер XFS, схільныя гэтай праблеме. Выпраўленне ўвайшло ў версію 5.16, а таксама ў абнаўленні ядраў 5.15.14, 5.10.91, 5.4.171, 4.19.225 і г.д. Стан фармавання абнаўленняў з ухіленнем праблемы ў дыстрыбутывах можна адсачыць на дадзеных старонках: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch.

Уразлівасць выклікана некарэктнымі паводзінамі двух спецыфічных для XFS ioctl(XFS_IOC_ALLOCSP) і ioctl(XFS_IOC_FREESP), якія з'яўляюцца функцыянальным аналогам агульнаядзернага сістэмнага выкліку fallocate(). Пры павелічэнні памеру файла, не выраўнаванага на памер блока, ioctl XFS_IOC_ALLOCSP/XFS_IOC_FREESP не абнуляюць хваставыя байты да наступнай мяжы блока. Такім чынам, на XFS са стандартным памерам блока 4096 байт з кожнага блока атакавалы можа прачытаць да 4095 байт папярэдніх запісаных дадзеных. У названых абласцях могуць змяшчацца дадзеныя выдаленых файлаў, дэфрагментаваных файлаў, а таксама файлаў з дэдуплікаванымі блокамі.

Праверыць сваю сістэму на наяўнасць праблемы можна з дапамогай простага прататыпа эксплоіту. Калі пасля выканання прапанаванай паслядоўнасці каманд атрымаецца прачытаць тэкст Шэкспіра, то драйвер ФС уразлівы. Першапачатковае мантаванне часткі XFS для дэманстрацыі патрабуе мае рацыю суперкарыстача.

Паколькі ioctl(XFS_IOC_ALLOCSP) і ioctl(XFS_IOC_FREESP) па функцыянальнасці практычна не адрозніваюцца ад стандартнага fallocate(), і адзіным іх адрозненнем з'яўляецца ўцечка дадзеных, іх наяўнасць падобна на бэкдор. Нягледзячы на ​​агульную палітыку - не змяняць існуючыя інтэрфейсы ў ядры, - па прапанове Лінуса, прынята рашэнне цалкам выдаліць гэтыя ioctl'ы ў наступнай версіі.

Крыніца: opennet.ru

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