Sårbarhet i XFS som gjør at rå blokkenhetsdata kan leses

En sårbarhet (CVE-2021-4155) er identifisert i XFS-filsystemkoden som lar en lokal uprivilegert bruker lese ubrukte blokkdata direkte fra en blokkeringsenhet. Alle hovedversjoner av Linux-kjernen eldre enn 5.16 som inneholder XFS-driveren er berørt av dette problemet. Rettingen ble inkludert i versjon 5.16, så vel som i kjerneoppdateringer 5.15.14, 5.10.91, 5.4.171, 4.19.225, etc. Statusen til oppdateringer som genereres for å fikse problemet i distribusjoner kan spores på disse sidene: Debian, RHEL, SUSE, Fedora, Ubuntu, Arch.

Sårbarheten er forårsaket av feil oppførsel til to XFS-spesifikke ioctl(XFS_IOC_ALLOCSP) og ioctl(XFS_IOC_FREESP), som er en funksjonell analog til det kjerneomfattende fallocate()-systemkallet. Når du øker en filstørrelse som ikke er blokkjustert, tilbakestiller ikke ioctls XFS_IOC_ALLOCSP/XFS_IOC_FREESP halebytene til null før neste blokkgrense. Således, på XFS med en standard blokkstørrelse på 4096 byte, kan en angriper lese opptil 4095 byte med tidligere skrevne data fra hver blokk. Disse områdene kan inneholde data fra slettede filer, defragmenterte filer og filer med dedupliserte blokker.

Du kan teste systemet for problemet ved å bruke en enkel utnyttelsesprototype. Hvis det, etter å ha utført den foreslåtte kommandosekvensen, er mulig å lese Shakespeares tekst, er FS-driveren sårbar. Innledningsvis montering av en XFS-partisjon for demonstrasjon krever root-privilegier.

Siden ioctl(XFS_IOC_ALLOCSP) og ioctl(XFS_IOC_FREESP) er praktisk talt de samme i funksjonalitet som standard fallocate(), og deres eneste forskjell er datalekkasje, ligner deres tilstedeværelse på en bakdør. Til tross for den generelle policyen om ikke å endre eksisterende grensesnitt i kjernen, etter forslag fra Linus, ble det besluttet å fullstendig fjerne disse ioctls i neste versjon.

Kilde: opennet.ru

Legg til en kommentar