Linux ядросунда окуу үчүн гана файлдарды бурмалоочу аялуу

Linux ядросунда (CVE-2022-0847) барактын кэшинин мазмунун бардык файлдар үчүн, анын ичинде окуу үчүн гана режимде, O_RDONLY желекчеси менен ачылган же файл тутумдарында жайгашкан файлдардын үстүнөн жазууга мүмкүндүк берген аялуу аныкталган. окуу үчүн гана режиминде орнотулган. Практикалык жактан алганда, алсыздык ыктыярдуу процесстерге кодду киргизүү же ачылган файлдардагы маалыматтарды бузуу үчүн колдонулушу мүмкүн. Мисалы, sshd процесси үчүн authorized_keys файлынын мазмунун өзгөртө аласыз. Эксплуатациянын прототиби сыноо үчүн жеткиликтүү.

Көйгөй 2016-жылы аныкталган Dirty COW сындуу аялуулугуна окшош Dirty Pipe деп аталды. Коркунучтун деңгээли боюнча Dirty Pipe Dirty COW менен бир деңгээлде экени, бирок аны иштетүү бир топ жеңил экени белгиленген. Алсыздык лог серверинен кысылган архивдерди жүктөө тутумунда тармак аркылуу жүктөлүп алынган файлдардын мезгил-мезгили менен бузулушу боюнча даттанууларды талдоо учурунда аныкталган (жүктөлгөн системада 37 айда 3 коррупция), аны даярдоодо splice() операциясы колдонулган. жана аты аталбаган түтүктөр.

Алсыздык 5.8-жылдын августунда чыгарылган Linux өзөгү 2020 менен башталат, б.а. Debian 11де бар, бирок Ubuntu 20.04 LTSдеги базалык ядрого таасир этпейт. RHEL 8.x жана openSUSE/SUSE 15 өзөктөрү адегенде эски бутактарга негизделген, бирок көйгөйдү пайда кылган өзгөртүү аларга кайтарылган болушу мүмкүн (азырынча так маалымат жок). Сиз бул баракчалардагы бөлүштүрүүлөрдө пакет жаңыртууларынын жарыяланышына көз салсаңыз болот: Debian, SUSE, Ubuntu, RHEL, Fedora, Gentoo, Arch Linux. Алсыздыкты оңдоо 5.16.11, 5.15.25 жана 5.10.102 релиздерде сунушталган. Түзөтүү Android платформасында колдонулган ядродо да камтылган.

Алсыздык copy_page_to_iter_pipe() жана push_pipe() функцияларынын кодундагы “buf->flags” маанисинин инициализациясынын жоктугунан келип чыгат, бирок структураны бөлүштүрүүдө жана айрым манипуляциялар учурунда эстутум тазаланбай калганына карабастан. аты аталбаган түтүктөр, башка операциядан алынган баалуулук. Бул функцияны колдонуу менен, артыкчылыксыз жергиликтүү колдонуучу желектеги PIPE_BUF_FLAG_CAN_MERGE маанисинин пайда болушуна жетише алат, бул атайын даярдалган аты жок түтүккө жаңы маалыматтарды жөн гана жазуу менен баракчанын кэшинде маалыматтардын үстүнөн жазууну уюштурууга мүмкүндүк берет.

Чабуул үчүн максаттуу файл окула турган болушу керек жана түтүккө жазууда кирүү укуктары текшерилбегендиктен, барак кэшинде алмаштыруу окуу үчүн гана орнотулган бөлүмдөрдө жайгашкан файлдар үчүн да жүргүзүлүшү мүмкүн (мисалы, c CD-файлдары үчүн). ROM). Барактын кэшиндеги маалыматты алмаштыргандан кийин, файлдан маалыматтарды окууда процесс иш жүзүндөгү маалыматтарды эмес, алмаштырылган маалыматтарды алат.

PIPE_BUF_FLAG_CAN_MERGE желеги аны менен байланышкан бардык шакекче түзүмдөрүндө орнотулушун камсыз кылуу үчүн операция аты аталбаган каналды түзүү жана аны каалаган маалыматтар менен толтуруу менен байланыштуу. Андан кийин, маалыматтар каналдан окулат, бирок желек pipe_inode_info шакек түзүмдөрүндөгү pipe_buffer структурасынын бардык инстанцияларында коюлган бойдон калат. Андан кийин splice()га чакыруу максаттуу файлдан аты жок түтүккө керектүү офсеттен баштап маалыматтарды окуу үчүн жасалат. Бул аты аталбаган түтүккө маалыматтарды жазып жатканда, PIPE_BUF_FLAG_CAN_MERGE желекчеси коюлгандыктан, pipe_buffer структурасынын жаңы үлгүсүн түзүүнүн ордуна беттин кэшиндеги маалыматтар кайра жазылат.

Source: opennet.ru

Комментарий кошуу