V kóde súborového systému XFS bola zistená zraniteľnosť (CVE-2021-4155), ktorá umožňuje lokálnemu neoprávnenému užívateľovi priamo čítať údaje nevyužitých blokov z blokového zariadenia. Všetky významné verzie jadra Linuxu staršie ako 5.16, obsahujúce ovládač XFS, sú touto problémom postihnuté. Oprava bola zahrnutá vo verzii 5.16, ako aj v aktualizáciách jadier 5.15.14, 5.10.91, 5.4.171, 4.19.225 atď. Stav vytvárania aktualizácií s odstránením problému v distribúciách je možné sledovať na týchto stránkach: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch.
Zraniteľnosť je spôsobená nesprávnym správaním dvoch špecifických pre XFS ioctl(XFS_IOC_ALLOCSP) a ioctl(XFS_IOC_FREESP), ktoré sú funkčným ekvivalentom všeobecného systémového volania fallocate(). Pri zvyšovaní veľkosti súboru, ktorý nie je zarovnaný na veľkosť bloku, ioctl XFS_IOC_ALLOCSP/XFS_IOC_FREESP nevymažú koncové bajty do nasledujúcej hranice bloku. Týmto spôsobom môže útočník na XFS so štandardnou veľkosťou bloku 4096 bajtov prečítať až 4095 bajtov predchádzajúcich zapísaných údajov z každého bloku. V uvedených oblastiach môžu byť uložené údaje odstránených súborov, defragmentovaných súborov, ako aj súborov s deduplikovanými blokmi.
Overiť svoju sústavu na prítomnosť problému je možné pomocou jednoduchého prototypu exploitácie. Ak po vykonaní navrhnutej sekvencie príkazov bude možné prečítať text Shakespeara, ovládač FS je zraniteľný. Počiatočná montáž oddielu XFS na demonštráciu vyžaduje práva superužívateľa.
Keďže ioctl(XFS_IOC_ALLOCSP) a ioctl(XFS_IOC_FREESP) sa funkčne prakticky nelíšia od štandardného fallocate(), a ich jediným rozdielom je únik údajov, ich existencia sa javí ako backdoor. Napriek všeobecnej politike – nemeniť existujúce rozhrania v jadre – na návrh Linusa bolo prijaté rozhodnutie úplne odstrániť tieto ioctl-y v nasledujúcej verzii.
Zdroj: opennet.ru
