Di kernel Linux de xerabûnek ku dihêle pelên tenê-xwendewar werin xerakirin

Di kernel Linux (CVE-2022-0847) de qelsiyek hate nas kirin ku dihêle ku naveroka cache ya rûpelê ji bo her pelan were nivîsandin, tevî yên di moda tenê-xwendinê de, bi ala O_RDONLY vebûne, an li ser pergalên pelan hene. di moda tenê-xwendinê de hatî çêkirin. Di warê pratîkî de, lawazbûn dikare were bikar anîn da ku kodê di pêvajoyên kêfî de derxîne an daneyên xirab ên di pelên vekirî de. Mînakî, hûn dikarin naveroka pelê authorized_keys ji bo pêvajoya sshd biguhezînin. Prototîpek îstîsmarê ji bo ceribandinê heye.

Pirsgirêka bi kodnavê Dirty Pipe, dişibihe qelsiya krîtîk Dirty COW ku di sala 2016-an de hatî nas kirin. Tê destnîşan kirin ku di warê asta xetereyê de, Dirty Pipe di heman astê de ye wekî Dirty COW, lê xebitandin pir hêsantir e. Zelalbûn di dema analîzkirina giliyên li ser gendeliya demkî ya pelên ku li ser torê hatine daxistin di pergalek dakêşana arşîvên pêçandî ji serverek têketinê de hate nas kirin (37 xirabî di 3 mehan de li ser pergalek barkirî), ku di amadekirina wan de operasyona splice() bikar anî. û lûleyên bênav.

Zelalbûn bi kernel Linux 5.8-ê, ku di Tebaxa 2020-an de hatî berdan, dest pê dike, ango. di Debian 11 de heye, lê bandorê li kernel bingehîn li Ubuntu 20.04 LTS nake. Kernelên RHEL 8.x û openSUSE/SUSE 15 di destpêkê de li ser şaxên kevn in, lê mimkun e ku guheztina ku dibe sedema pirsgirêkê di nav wan de paşve hatibe şandin (hîna daneya rastîn tune). Hûn dikarin li ser van rûpelan weşana nûvekirina pakêtê di belavkirinan de bişopînin: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Di berdanên 5.16.11, 5.15.25 û 5.10.102 de sererastkirinek ji bo qelsbûnê hate pêşniyar kirin. Serrastkirin di nav kernelê de ku di platforma Android-ê de tê bikar anîn jî tê de heye.

Zelalbûn ji ber nebûna destpêkirina nirxa "buf-> ala" di koda fonksiyonên copy_page_to_iter_pipe() û push_pipe() de çêdibe, tevî vê yekê ku dema veqetandina avahiyek û di dema hin manîpulasyonên bi wan de bîranîn nayê paqij kirin. lûleyên bênav, nirxek ji operasyonek din. Bi karanîna vê taybetmendiyê, bikarhênerek herêmî ya bêdestûr dikare bigihîje xuyangiya PIPE_BUF_FLAG_CAN_MERGE nirxa di alê de, ku dihêle hûn bi tenê nivîsandina daneya nû li boriyek nenavkirî ya ku bi taybetî hatî amade kirin, birêkûpêkkirina daneyan di cacheya rûpelê de organîze bikin.

Ji bo êrîşek, pelê armanc divê were xwendin, û ji ber ku mafên gihîştinê dema nivîsandina borûyê nayên kontrol kirin, veguheztina di cache rûpelê de jî dikare ji bo pelên ku di dabeşên ku tenê-xwendewarî de hatine danîn (mînak, ji bo pelên c CD- ROM). Piştî veguheztina agahdariya di kaşa rûpelê de, dema ku daneya ji pelek dixwîne, pêvajo dê ne daneyên rastîn, lê daneyên guhezbar werbigire.

Operasyon bi afirandina kanalek bênav û dagirtina wê bi daneyên keyfî ve tê da ku pê ewle bibe ku ala PIPE_BUF_FLAG_CAN_MERGE di hemî strukturên zengilê yên ku pê re têkildar in de hatî danîn. Dûv re, dane ji kanalê tê xwendin, lê ala di hemî nimûneyên avahiya pipe_buffer de di strukturên zengila pipe_inode_info de sazkirî dimîne. Dûv re bangek ji splice() re tê kirin da ku daneya ji pelê mebest di boriyek nenavkirî de were xwendin, ji guheztina xwestinê dest pê dike. Dema ku daneyan li ser vê boriya bênav dinivîsin, ji ber ku ala PIPE_BUF_FLAG_CAN_MERGE hatî danîn, dê daneya di cacheya rûpelê de were nivîsandin li şûna ku mînakek nû ya avahiya pipe_buffer were afirandin.

Source: opennet.ru

Add a comment