Π ΡΠ΄ΡΠ΅ 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