Ang kahinaan sa XFS na nagpapahintulot sa raw block na data ng device na mabasa

Natukoy ang isang kahinaan (CVE-2021-4155) sa XFS file system code na nagbibigay-daan sa isang lokal na walang pribilehiyong user na direktang magbasa ng hindi nagamit na data ng block mula sa isang block device. Ang lahat ng pangunahing bersyon ng Linux kernel na mas luma sa 5.16 na naglalaman ng XFS driver ay apektado ng isyung ito. Ang pag-aayos ay kasama sa bersyon 5.16, pati na rin sa mga pag-update ng kernel 5.15.14, 5.10.91, 5.4.171, 4.19.225, atbp. Ang katayuan ng mga pag-update na nabuo upang ayusin ang problema sa mga pamamahagi ay maaaring masubaybayan sa mga pahinang ito: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch.

Ang kahinaan ay sanhi ng hindi tamang pag-uugali ng dalawang XFS-specific ioctl(XFS_IOC_ALLOCSP) at ioctl(XFS_IOC_FREESP), na isang functional analogue ng kernel-wide fallocate() system call. Kapag dinadagdagan ang laki ng file na hindi naka-block, ang ioctls XFS_IOC_ALLOCSP/XFS_IOC_FREESP ay hindi nire-reset ang tail byte sa zero hanggang sa susunod na hangganan ng block. Kaya, sa XFS na may karaniwang laki ng block na 4096 bytes, ang isang attacker ay makakabasa ng hanggang 4095 bytes ng nakaraang nakasulat na data mula sa bawat block. Ang mga lugar na ito ay maaaring maglaman ng data mula sa mga tinanggal na file, defragmented na file, at mga file na may mga na-deduplicate na block.

Maaari mong subukan ang iyong system para sa problema gamit ang isang simpleng pagsasamantalang prototype. Kung, pagkatapos isagawa ang iminungkahing pagkakasunud-sunod ng mga utos, posible na basahin ang teksto ni Shakespeare, kung gayon ang driver ng FS ay mahina. Sa una, ang pag-mount ng XFS partition para sa demonstrasyon ay nangangailangan ng mga pribilehiyo sa ugat.

Dahil ang ioctl(XFS_IOC_ALLOCSP) at ioctl(XFS_IOC_FREESP) ay halos pareho sa functionality gaya ng karaniwang fallocate(), at ang pagkakaiba lang nila ay data leakage, ang kanilang presensya ay katulad ng backdoor. Sa kabila ng pangkalahatang patakaran ng hindi pagbabago ng mga umiiral na interface sa kernel, sa mungkahi ni Linus, napagpasyahan na ganap na alisin ang mga ioctl sa susunod na bersyon.

Pinagmulan: opennet.ru

Magdagdag ng komento