Π Π°ΡΠΊΡΡΡΠ° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠ΅ΡΡΠΎΠΉ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ (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\ninstall rds_tcp /bin/false\nβ > /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Β», Π½ΠΎ ΠΈ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡΡΡ ΠΏΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ ΡΠ°ΠΊΠΈΡ
suid-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΊΠ°ΠΊ mount, passwd, chsh, newgrp, umount ΠΈ pkexec.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru
