Тек оқуға арналған файлдарды зақымдауға мүмкіндік беретін Linux ядросындағы осалдық

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

Мәселе 2016 жылы анықталған Dirty COW сыни осалдығына ұқсас Dirty Pipe код атауына ие болды. Қауіптілік деңгейі бойынша Dirty Pipe Dirty COW сияқты деңгейде, бірақ оны пайдалану әлдеқайда оңай екені атап өтіледі. Осалдық дайындау кезінде splice() операциясы қолданылған журнал серверінен қысылған мұрағаттарды жүктеп алатын жүйеде желі арқылы жүктелген файлдардың мерзімді бұзылуы (жүктелген жүйеде 37 айда 3 бүліну) туралы шағымдарды талдау кезінде анықталды. және аты жоқ құбырлар.

Осалдық 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-файлдары үшін). ТҰРАҚТЫ ЖАДТАУ ҚҰРЫЛҒЫСЫ). Бет кэшіндегі ақпаратты ауыстырғаннан кейін, файлдан деректерді оқу кезінде процесс нақты деректерді емес, ауыстырылған деректерді алады.

PIPE_BUF_FLAG_CAN_MERGE жалауының онымен байланыстырылған барлық сақина құрылымдарында орнатылғанына көз жеткізу үшін операция атауы жоқ арнаны құруға және оны ерікті деректермен толтыруға келеді. Содан кейін деректер арнадан оқылады, бірақ жалау pipe_inode_info сақина құрылымдарындағы pipe_buffer құрылымының барлық даналарында орнатылған күйінде қалады. Содан кейін қажетті ығысудан бастап мақсатты файлдан атауы жоқ құбырға деректерді оқу үшін splice() шақыру жасалады. Осы атаусыз құбырға деректерді жазу кезінде PIPE_BUF_FLAG_CAN_MERGE жалаушасының орнатылуына байланысты, pipe_buffer құрылымының жаңа данасын жасаудың орнына бет кэшіндегі деректер қайта жазылады.

Ақпарат көзі: opennet.ru

пікір қалдыру