Өзөгүндө Linux Барак кэшинин мазмунун окуу режиминде гана турган, O_RDONLY желеги менен ачылган же окуу режиминде гана орнотулган файл системаларында жайгашкан файлдарды кошо алганда, каалаган файл үчүн барак кэшинин мазмунун кайра жазууга мүмкүндүк берген алсыздык (CVE-2022-0847) аныкталды. Иш жүзүндө, бул алсыздыкты каалаган процесстерге код киргизүү же ачылган файлдардагы бузулган маалыматтар үчүн колдонсо болот. Мисалы, sshd процесси үчүн authorized_keys файлынын мазмунун өзгөртүүгө болот. Сыноо үчүн прототиптин эксплойту жеткиликтүү.
Көйгөй 2016-жылы аныкталган Dirty COW сындуу аялуулугуна окшош Dirty Pipe деп аталды. Коркунучтун деңгээли боюнча Dirty Pipe Dirty COW менен бир деңгээлде экени, бирок аны иштетүү бир топ жеңил экени белгиленген. Алсыздык лог серверинен кысылган архивдерди жүктөө тутумунда тармак аркылуу жүктөлүп алынган файлдардын мезгил-мезгили менен бузулушу боюнча даттанууларды талдоо учурунда аныкталган (жүктөлгөн системада 37 айда 3 коррупция), аны даярдоодо splice() операциясы колдонулган. жана аты аталбаган түтүктөр.
Алсыздык ядродон баштап көрүнөт Linux 5.8, 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
