Ang pagkahuyang sa Linux kernel nga mahimong makadaut sa mga read-only nga mga file

Nailhan ang usa ka kahuyang sa Linux kernel (CVE-2022-0847) nga nagtugot sa mga sulud sa cache sa panid nga ma-overwritten alang sa bisan unsang mga file, lakip ang naa sa read-only mode, giablihan gamit ang O_RDONLY nga bandila, o nahimutang sa mga file system gi-mount sa read-only mode. Sa praktikal nga termino, ang pagkahuyang mahimong magamit sa pag-inject sa code ngadto sa arbitraryong mga proseso o dunot nga datos sa giablihan nga mga file. Pananglitan, mahimo nimong usbon ang mga sulod sa authorized_keys file alang sa proseso sa sshd. Ang usa ka prototype sa pagpahimulos magamit alang sa pagsulay.

Ang problema gi-codenamed nga Dirty Pipe, susama sa kritikal nga pagkahuyang nga Dirty COW nga giila kaniadtong 2016. Namatikdan nga sa lebel sa peligro, ang Dirty Pipe parehas nga lebel sa Dirty COW, apan labi ka dali nga magamit. Ang pagkahuyang giila sa panahon sa pag-analisar sa mga reklamo mahitungod sa periodic nga korapsyon sa mga file nga na-download sa network sa usa ka sistema nga nag-download sa mga compressed archive gikan sa usa ka log server (37 nga mga korapsyon sa 3 ka bulan sa usa ka loaded system), ang pag-andam nga gigamit ang splice() nga operasyon ug wala nganli nga mga tubo.

Ang pagkahuyang makita sugod sa Linux kernel 5.8, gipagawas kaniadtong Agosto 2020, i.e. anaa sa Debian 11, apan dili makaapekto sa base kernel sa Ubuntu 20.04 LTS. Ang RHEL 8.x ug openSUSE/SUSE 15 kernels sa sinugdan gibase sa daan nga mga sanga, apan posible nga ang kausaban nga hinungdan sa problema gi-backport ngadto kanila (wala pa'y eksaktong datos). Mahimo nimong masubay ang publikasyon sa mga update sa package sa mga distribusyon niini nga mga panid: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Ang usa ka pag-ayo alang sa kahuyang gisugyot sa pagpagawas sa 5.16.11, 5.15.25 ug 5.10.102. Ang pag-ayo gilakip usab sa kernel nga gigamit sa platform sa Android.

Ang pagkahuyang tungod sa kakulang sa pagsugod sa "buf->flags" nga kantidad sa code sa mga function copy_page_to_iter_pipe() ug push_pipe(), bisan pa sa kamatuoran nga ang panumduman wala ma-clear sa diha nga naggahin sa usa ka istruktura ug sa panahon sa pipila ka mga manipulasyon sa. wala hinganli nga mga tubo, usa ka bili gikan sa laing operasyon. Gamit ang kini nga bahin, ang usa ka dili pribilihiyo nga lokal nga tiggamit mahimo’g makab-ot ang hitsura sa PIPE_BUF_FLAG_CAN_MERGE nga kantidad sa bandila, nga nagtugot kanimo sa pag-organisar sa pag-overwrit sa data sa cache sa panid pinaagi lamang sa pagsulat sa bag-ong datos sa usa ka espesyal nga giandam nga wala hinganli nga tubo.

Alang sa usa ka pag-atake, ang target nga file kinahanglan nga mabasa, ug tungod kay ang mga katungod sa pag-access wala gisusi kung nagsulat sa pipe, ang pag-ilis sa cache sa panid mahimo usab nga himuon alang sa mga file nga nahimutang sa mga partisyon nga gi-mount read-only (pananglitan, alang sa mga file c CD- ROM). Human sa pag-ilis sa impormasyon sa panid cache, sa diha nga ang pagbasa sa data gikan sa usa ka file, ang proseso makadawat dili sa aktuwal nga data, apan ang gipulihan data.

Ang operasyon naggikan sa paghimo sa usa ka wala hinganli nga channel ug pagpuno niini sa arbitraryong datos aron masiguro nga ang PIPE_BUF_FLAG_CAN_MERGE nga bandila gibutang sa tanan nga mga istruktura sa singsing nga may kalabutan niini. Sunod, ang datos gibasa gikan sa channel, apan ang bandila nagpabilin nga gibutang sa tanan nga mga higayon sa pipe_buffer structure sa pipe_inode_info ring structures. Ang usa ka tawag sa splice() gihimo dayon aron mabasa ang datos gikan sa target nga file ngadto sa usa ka wala nganli nga tubo, sugod sa gusto nga offset. Sa pagsulat sa datos niining wala hinganli nga tubo, tungod sa PIPE_BUF_FLAG_CAN_MERGE nga bandera nga gitakda, ang datos sa cache sa panid ma-overwritten imbes nga maghimo ug bag-ong instance sa pipe_buffer structure.

Source: opennet.ru

Idugang sa usa ka comment