PinTheft β€” ΡˆΠ΅ΡΡ‚Π° уязвимост ΠΎΡ‚ клас Copy Fail, прСдоставяща ΠΏΡ€Π°Π²Π° root Π² Linux

Π Π°Π·ΠΊΡ€ΠΈΡ‚Π° информация Π·Π° ΡˆΠ΅ΡΡ‚Π°Ρ‚Π° уязвимост (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

ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ πŸ”₯ ΠšΡƒΠΏΠ΅Ρ‚Π΅ Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½ хостинг Π·Π° сайтовС с Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ DDoS, VPS VDS ΡΡŠΡ€Π²ΡŠΡ€ΠΈ | ProHoster