Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ядрС Linux, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΈΡΠΊΠ°Π·ΠΈΡ‚ΡŒ Ρ„Π°ΠΉΠ»Ρ‹, доступныС Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния

Π’ ядрС Linux выявлСна ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ (CVE-2022-0847), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ содСрТимоС страничного кэша для Π»ΡŽΠ±Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ², Π² Ρ‚ΠΎΠΌ числС находящихся Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния, ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… с Ρ„Π»Π°Π³ΠΎΠΌ O_RDONLY ΠΈΠ»ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ‰Ρ‘Π½Π½Ρ‹Ρ… Π² Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… систСмах, ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния. Π‘ практичСской стороны, ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ для подстановки ΠΊΠΎΠ΄Π° Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ процСссы ΠΈΠ»ΠΈ искаТСния Π΄Π°Π½Π½Ρ‹Ρ… Π² ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… Ρ„Π°ΠΉΠ»Π°Ρ…. НапримСр, ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ содСрТимоС Ρ„Π°ΠΉΠ»Π° authorized_keys для процСсса sshd. Для тСстирования доступСн ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ эксплоита.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ΅ присвоСно ΠΊΠΎΠ΄ΠΎΠ²ΠΎΠ΅ имя Dirty Pipe, ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с выявлСнной Π² 2016 Π³ΠΎΠ΄Ρƒ критичСской ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ Dirty COW. ΠžΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎ ΡƒΡ€ΠΎΠ²Π½ΡŽ опасности Dirty Pipe находится Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΡƒΡ€ΠΎΠ²Π½Π΅ с Dirty COW, Π½ΠΎ Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‰Π΅ Π² эксплутации. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° выявлСна Π² Ρ…ΠΎΠ΄Π΅ Ρ€Π°Π·Π±ΠΎΡ€Π° ΠΆΠ°Π»ΠΎΠ± ΠΎ пСриодичСском ΠΏΠΎΠ²Ρ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΈ Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌΡ‹Ρ… ΠΏΠΎ сСти Ρ„Π°ΠΉΠ»ΠΎΠ² Π² систСмС, Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰Π΅ΠΉ сТатыС Π°Ρ€Ρ…ΠΈΠ²Ρ‹ с log-сСрвСра (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.

Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° отсутствиСм ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ значСния «buf->flags» Π² ΠΊΠΎΠ΄Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ copy_page_to_iter_pipe() ΠΈ push_pipe(), ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΡ€ΠΈ Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠΈ структуры Π½Π΅ очищаСтся ΠΈ ΠΏΡ€ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Ρ… манипуляциях с Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΊΠ°Π½Π°Π»Π°ΠΌΠΈ Π² «buf->flags» ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π΄Π°Π½Π½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ появлСния Π²ΠΎ Ρ„Π»Π°Π³Π΅ значСния PIPE_BUF_FLAG_CAN_MERGE, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΡŒ Π΄Π°Π½Π½Ρ‹Ρ… Π² страничном кэшС Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€ΠΎΡΡ‚ΡƒΡŽ запись Π½ΠΎΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ… Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡ‚ΠΎΠ²Π»Π΅Π½Π½Ρ‹ΠΉ Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» (pipe).

Для Π°Ρ‚Π°ΠΊΠΈ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ доступСн Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅, ΠΏΡ€ΠΈ этом Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ записи Π² pipe Π½Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡŽΡ‚ΡΡ ΠΏΡ€Π°Π²Π° доступа Π·Π°ΠΌΠ΅Π½Π° Π² страничном кэшС ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²Π΅Π΄Π΅Π½Π° Π² Ρ‚ΠΎΠΌ числС ΠΈ для Ρ„Π°ΠΉΠ»ΠΎΠ², находящихся Π² Ρ€Π°Π·Π΄Π΅Π»Π°Ρ…, ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для чтСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для Ρ„Π°ΠΉΠ»ΠΎΠ² c CD-ROM). ПослС Π·Π°ΠΌΠ΅Π½Ρ‹ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² страничном кэшС процСсс ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ„Π°ΠΉΠ»Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ Π½Π΅ фактичСскиС, Π° ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρ‘Π½Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅.

Эксплуатация сводится ΠΊ созданию Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π° ΠΈ наполнСнию Π΅Π³ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выставлСния Ρ„Π»Π°Π³Π° PIPE_BUF_FLAG_CAN_MERGE Π²ΠΎ всСх связанных с Π½ΠΈΠΌ ΠΊΠΎΠ»ΡŒΡ†Π΅Π²Ρ‹Ρ… структурах. Π”Π°Π»Π΅Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ΡΡ ΠΈΠ· ΠΊΠ°Π½Π°Π»Π°, Π½ΠΎ Ρ„Π»Π°Π³ остаётся выставлСнных Π²ΠΎ всСх экзСмплярах структуры pipe_buffer Π² ΠΊΠΎΠ»ΡŒΡ†Π΅Π²Ρ‹Ρ… структурах pipe_inode_info. Π—Π°Ρ‚Π΅ΠΌ выполняСтся Π²Ρ‹Π·ΠΎΠ² splice() для чтСния Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ Ρ„Π°ΠΉΠ»Π° Π² Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π», начиная с Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΠΎΠ³ΠΎ смСщСния. ΠŸΡ€ΠΈ записи Π΄Π°Π½Π½Ρ‹Ρ… Π² этот Π½Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠ°Π½Π°Π» ΠΈΠ·-Π·Π° выставлСнного Ρ„Π»Π°Π³Π° PIPE_BUF_FLAG_CAN_MERGE Π΄Π°Π½Π½Ρ‹Π΅ Π² страничном кэшС Π±ΡƒΠ΄ΡƒΡ‚ пСрСзаписаны, вмСсто создания Π½ΠΎΠ²ΠΎΠ³ΠΎ экзСмпляра структуры pipe_buffer.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: opennet.ru