Π Π°Π·ΠΊΡΠΈΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠ΅ΡΡΠ°ΡΠ° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡ (1, 2-3, 4, 5), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ° Π½Π° Π½Π΅ΠΏΡΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡΠΎΠ²Π°Π½ Π»ΠΎΠΊΠ°Π»Π΅Π½ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π» Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ root ΠΏΡΠ°Π²Π°, ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ Π΄Π°Π½Π½ΠΈ Π² ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈΡ ΠΊΠ΅Ρ. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° Π΅ ΠΏΠΎΠ»ΡΡΠΈΠ»Π° ΠΊΠΎΠ΄ΠΎΠ²ΠΎ ΠΈΠΌΠ΅ PinTheft. ΠΡΠΎΡΠΎΡΠΈΠΏ Π½Π° Π΅ΠΊΡΠΏΠ»ΠΎΠΈΡ Π΅ Π½Π°Π»ΠΈΡΠ΅Π½. CVE ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΡΡ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½. Π Π΅ΡΠ΅Π½ΠΈΠ΅ Π΅ Π½Π°Π»ΠΈΡΠ½ΠΎ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° ΠΏΠ°Ρ, ΠΏΡΠ±Π»ΠΈΠΊΡΠ²Π°Π½ Π½Π° 5 ΠΌΠ°ΠΉ ΠΈ ΠΎΠ΄ΠΎΠ±ΡΠ΅Π½ Π½Π° 11 ΠΌΠ°ΠΉ Π² ΠΊΠ»ΠΎΠ½Π° netdev, Π½ΠΎ Π½Π΅ Π΅ Π²ΠΊΠ»ΡΡΠ΅Π½ Π² ΠΊΠΎΡΠ΅ΠΊΡΠΈΠ²Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ.
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° Π΅ Π½Π°Π»ΠΈΡΠ΅ Π² ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΡΠ΅ΠΆΠΎΠ²ΠΈΡ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» RDS (Reliable Datagram Sockets), ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½ Π·Π° Π²ΠΈΡΠΎΠΊΠΎ-ΡΠΊΠΎΡΠΎΡΡΠ΅Π½ ΠΎΠ±ΠΌΠ΅Π½ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π²ΡΠ·Π»ΠΈ Π² ΠΊΠ»ΡΡΡΠ΅ΡΠ°, Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½Π° Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡ ΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°Π½Π° Π΄ΠΎΡΡΠ°Π²ΠΊΠ°. ΠΡΠ°ΠΊΠ°ΡΠ° Π΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½Π° Π½Π° ΡΠΈΡΡΠ΅ΠΌΠΈ Ρ Π²ΠΊΠ»ΡΡΠ΅Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ° io_uring (io_uring_disabled=0) ΠΈ ΡΠ΄ΡΠΎ, ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ΠΎ Ρ ΠΎΠΏΡΠΈΠΈ CONFIG_RDS, CONFIG_RDS_TCP ΠΈ CONFIG_IO_URING. ΠΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ Π΅ΠΊΡΠΏΠ»ΠΎΠΈΡΡΡ, Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΠΈΠΌΠ° Π½Π°Π»ΠΈΡΠ΅Π½ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» Ρ ΡΠ»Π°Π³ SUID-root.
ΠΠ° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»Π° ΡΠ΄ΡΠΎ rds_tcp Π΅ΠΊΡΠΏΠ»ΠΎΠΈΡΡΡ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ ΡΡΠ΅Π· RDS Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ° SO_RDS_TRANSPORT=2. ΠΡΠ±Π΅Π»ΡΠ·Π²Π° ΡΠ΅, ΡΠ΅ ΡΡΠ΅Π΄ ΡΠ΅ΡΡΠ²Π°Π½ΠΈΡΠ΅ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΈ Π½Π° Linux Π² ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΌΠΎΠ΄ΡΠ»ΡΡ ΡΠ΄ΡΠΎ rds Π΅ Π½Π°Π»ΠΈΡΠ΅Π½ ΡΠ°ΠΌΠΎ Π² Arch Linux. ΠΠ° Π΄Π° ΡΠ΅ Π±Π»ΠΎΠΊΠΈΡΠ° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ°, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΡΠ·ΠΏΡΠ΅ΠΏΡΡΡΡΠ²Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎΡΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡΠ»ΠΈΡΠ΅ ΡΠ΄ΡΠΎ rds ΠΈ rds_tcp: rmmod rds_tcp rds printf βinstall rds /bin/false install rds_tcp /bin/false β > /etc/modprobe.d/pintheft.conf
Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° Π΅ ΠΏΡΠΈΡΠΈΠ½Π΅Π½Π° ΠΎΡ Π³ΡΠ΅ΡΠΊΠ° Π² ΡΠ΅Π°Π»ΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° zerocopy Π² ΡΡΠ½ΠΊΡΠΈΡΡΠ° rds_message_zcopy_from_user(), ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠ½Π° ΠΏΡΠΎΠΌΡΠ½Π° Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ Π² ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈΡ ΠΊΠ΅Ρ, Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π±Π΅Π³Π½Π΅ Π½Π΅Π½ΡΠΆΠ½ΠΎ Π±ΡΡΠ΅ΡΠΈΡΠ°Π½Π΅. ΠΡΠΈ ΠΏΠΎΠ²ΡΠ΅Π΄Π° Π½Π΅ Π΅ ΠΈΠ·Π²ΡΡΡΠ΅Π½Π° ΠΎΡΠΈΡΡΠΊΠ° Π½Π° ΠΏΠΎΠ»Π΅ΡΠΎ rm->data.op_nents, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ Π΅ ΠΈΠ·Π²ΡΡΡΠ΅Π½ΠΎ Π΄Π²ΠΎΠΉΠ½ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π²Π°Π½Π΅ Π½Π° Π±ΡΡΠ΅ΡΠ° (double-free). ΠΠΎΡΠ²Π°ΡΠ° Π½Π° Π½Π΅ΠΊΠΎΡΠ΅ΠΊΡΠ½Π° ΡΡΠΎΠΉΠ½ΠΎΡΡ Π² Π±ΡΠΎΡΡΠ° Π½Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠΈΠΈ Π΅ ΠΌΠΎΠ³Π»Π° Π΄Π° Π±ΡΠ΄Π΅ Π΅ΠΊΡΠΏΠ»ΠΎΠ°ΡΠΈΡΠ°Π½Π° Π·Π° ΠΏΡΠ΅Π·Π°ΠΏΠΈΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ Π² ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈΡ ΠΊΠ΅Ρ, Π±Π»Π°Π³ΠΎΠ΄Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΡΡΠ° Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠΈΠΊΡΠΈΡΠ°Π½ΠΈΡ Π±ΡΡΠ΅Ρ io_uring.
Π ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌΡΡ Π½Π° Π΅ΠΊΡΠΏΠ»ΠΎΠ°ΡΠ°ΡΠΈΡ Π΅ ΡΠΈΠΏΠΈΡΠ΅Π½ Π·Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ ΠΎΡ ΡΠΎΠ·ΠΈ ΠΊΠ»Π°Ρ β Π°ΡΠ°ΠΊΡΠ²Π°ΡΠΈΡΡ ΡΡΠΏΡΠ²Π° Π΄Π° Π·Π°Π΄ΡΡΠΆΠΈ ΡΠ°ΠΉΠ» Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Ρ ΡΠ»Π°Π³ suid root Π² ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈΡ ΠΊΠ΅Ρ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π²ΡΠ²Π΅ΠΆΠ΄Π° ΠΊΠΎΠ΄ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π² ELF Π·Π°Π³Π»Π°Π²ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ» /usr/bin/sh. Π‘Π»Π΅Π΄ ΡΠ°Π·ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»Π°ΡΠΈΡ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ°ΡΠ° Π²ΠΎΠ΄ΠΈ Π΄ΠΎ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π΅ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡ ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΡΠ°ΠΉΠ» ΠΎΡ Π½ΠΎΡΠΈΡΠ΅Π»Ρ, Π° Π½Π° ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½Π°ΡΠ° ΠΊΠΎΠΏΠΈΡ ΠΎΡ ΡΡΡΠ°Π½ΠΈΡΠ½ΠΈΡ ΠΊΠ΅Ρ. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡΠ΅ Π΅ΠΊΡΠΏΠ»ΠΎΠΈΡΠΈ, Π½ΠΎΠ²ΠΈΡΡ Π²Π°ΡΠΈΠ°Π½Ρ Π΅ Π°Π΄Π°ΠΏΡΠΈΡΠ°Π½ ΡΠ°ΠΌΠΎ Π·Π° Π°ΡΠ°ΠΊΠ° Π½Π° ΡΡΠΈΠ»ΠΈΡΠ° βsuβ, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΈ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ Π² ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° Π½Π° ΡΠ°ΠΊΠΈΠ²Π° ΡΡΠΈΠ΄ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ ΠΊΠ°ΡΠΎ mount, passwd, chsh, newgrp, umount ΠΈ pkexec.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
