Bregusrwydd yn y cnewyllyn Linux a all ymyrryd â ffeiliau darllen yn unig

Mae bregusrwydd wedi'i nodi yn y cnewyllyn Linux (CVE-2022-0847) sy'n caniatáu i gynnwys storfa'r dudalen gael ei drosysgrifo ar gyfer unrhyw ffeiliau, gan gynnwys y rhai yn y modd darllen yn unig, sy'n cael eu hagor gyda'r faner O_RDONLY, neu eu lleoli ar systemau ffeiliau wedi'i osod yn y modd darllen yn unig. Yn ymarferol, gellid defnyddio'r bregusrwydd i chwistrellu cod i brosesau mympwyol neu lygru data mewn ffeiliau sydd wedi'u hagor. Er enghraifft, gallwch newid cynnwys y ffeil author_keys ar gyfer y broses sshd. Mae prototeip ecsbloetio ar gael i'w brofi.

Mae'r broblem wedi'i chyfodi â'r enw Dirty Pipe, yn debyg i'r bregusrwydd critigol COW Dirty a nodwyd yn 2016. Nodir, o ran lefel y perygl, bod Dirty Pipe ar yr un lefel â COW Dirty, ond mae'n llawer haws ei weithredu. Nodwyd y bregusrwydd yn ystod y dadansoddiad o gwynion am lygredd cyfnodol o ffeiliau a lawrlwythwyd dros y rhwydwaith mewn system sy'n lawrlwytho archifau cywasgedig o weinydd log (37 o lygredd mewn 3 mis ar system wedi'i llwytho), y defnyddiwyd y gweithrediad sbleis() wrth ei baratoi a phibellau dienw.

Mae'r bregusrwydd yn ymddangos gan ddechrau gyda'r cnewyllyn Linux 5.8, a ryddhawyd ym mis Awst 2020, h.y. yn bresennol yn Debian 11, ond nid yw'n effeithio ar y cnewyllyn sylfaen yn Ubuntu 20.04 LTS. Mae'r cnewyllyn RHEL 8.x ac openSUSE/SUSE 15 wedi'u seilio i ddechrau ar hen ganghennau, ond mae'n bosibl bod y newid sy'n achosi'r broblem wedi'i gefn iddynt (nid oes data union eto). Gallwch olrhain cyhoeddi diweddariadau pecyn mewn dosbarthiadau ar y tudalennau hyn: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Darparwyd ateb i'r bregusrwydd mewn datganiadau 5.16.11, 5.15.25 a 5.10.102. Mae'r atgyweiriad hefyd wedi'i gynnwys yn y cnewyllyn a ddefnyddir yn y platfform Android.

Mae'r bregusrwydd yn cael ei achosi gan ddiffyg cychwyniad y gwerth “buf-> flags” yng nghod y swyddogaethau copy_page_to_iter_pipe() a push_pipe(), er gwaethaf y ffaith nad yw'r cof yn cael ei glirio wrth ddyrannu strwythur ac yn ystod rhai triniaethau gyda pibellau dienw, gwerth o weithrediad arall. Gan ddefnyddio'r nodwedd hon, gall defnyddiwr lleol difreintiedig gyflawni ymddangosiad y gwerth PIPE_BUF_FLAG_CAN_MERGE yn y faner, sy'n eich galluogi i drefnu trosysgrifo data yn storfa'r dudalen trwy ysgrifennu data newydd i bibell ddienw a baratowyd yn arbennig.

Ar gyfer ymosodiad, rhaid i'r ffeil darged fod yn ddarllenadwy, a chan nad yw hawliau mynediad yn cael eu gwirio wrth ysgrifennu at bibell, gellir amnewid yn y storfa dudalen hefyd ar gyfer ffeiliau sydd wedi'u lleoli mewn rhaniadau wedi'u gosod yn ddarllenadwy yn unig (er enghraifft, ar gyfer ffeiliau c CD- ROM). Ar ôl disodli'r wybodaeth yn storfa'r dudalen, wrth ddarllen data o ffeil, bydd y broses yn derbyn nid y data gwirioneddol, ond y data sydd wedi'i ddisodli.

Mae gweithrediad yn ymwneud â chreu sianel ddienw a'i llenwi â data mympwyol er mwyn sicrhau bod baner PIPE_BUF_FLAG_CAN_MERGE wedi'i gosod ym mhob strwythur cylch sy'n gysylltiedig ag ef. Nesaf, darllenir y data o'r sianel, ond mae'r faner yn parhau i fod wedi'i gosod ym mhob achos o'r strwythur pipe_buffer yn y strwythurau cylch pipe_inode_info. Yna gwneir galwad i sbleisio () i ddarllen data o'r ffeil darged i bibell ddienw, gan ddechrau ar y gwrthbwyso a ddymunir. Wrth ysgrifennu data i'r bibell ddienw hon, oherwydd bod y faner PIPE_BUF_FLAG_CAN_MERGE wedi'i gosod, bydd y data yn storfa'r dudalen yn cael ei drosysgrifo yn lle creu enghraifft newydd o'r strwythur pipe_buffer.

Ffynhonnell: opennet.ru

Ychwanegu sylw