БостояниС Π³ΠΎΠ½ΠΊΠΈ Π² сборщикС мусора ядра Linux, способноС привСсти ΠΊ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΉ

Π―Π½Π½ Π₯ΠΎΡ€Π½ (Jann Horn) ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Google Project Zero, Π² своё врСмя Π²Ρ‹ΡΠ²ΠΈΠ²ΡˆΠΈΠΉ уязвимости Spectre ΠΈ Meltdown, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ эксплуатации уязвимости (CVE-2021-4083) Π² сборщикС мусора ядра Linux. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° состояниСм Π³ΠΎΠ½ΠΊΠΈ ΠΏΡ€ΠΈ чисткС Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов unix-сокСтов ΠΈ ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ позволяСт Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ выполнСния своСго ΠΊΠΎΠ΄Π° Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° интСрСсна Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ, Π² Ρ‚Π΅Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ проявляСтся состояниС Π³ΠΎΠ½ΠΊΠΈ, ΠΎΡ†Π΅Π½ΠΈΠ²Π°Π»ΠΎΡΡŒ ΠΊΠ°ΠΊ слишком Π½Π΅Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ для создания Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… эксплоитов, Π½ΠΎ Π°Π²Ρ‚ΠΎΡ€ исслСдования ΠΏΠΎΠΊΠ°Π·Π°Π», Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ скСптичСски рассматриваСмыС уязвимости ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ источником Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹Ρ… Π°Ρ‚Π°ΠΊ, Ссли Ρƒ создатСля эксплоита Π΅ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Π΅ Π½Π°Π²Ρ‹ΠΊΠΈ ΠΈ врСмя. Π―Π½Π½ Π₯ΠΎΡ€Π½ ΠΏΠΎΠΊΠ°Π·Π°Π», ΠΊΠ°ΠΊ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ Ρ„ΠΈΠ»ΠΈΠ³Ρ€Π°Π½Π½Ρ‹Ρ… манипуляций ΠΌΠΎΠΆΠ½ΠΎ свСсти состояниС Π³ΠΎΠ½ΠΊΠΈ, Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ close() ΠΈ fget(), ΠΊ ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎ эксплуатируСмой уязвимости класса use-after-free ΠΈ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ обращСния ΠΊ ΡƒΠΆΠ΅ освобоТдённой структурС Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ ядра.

БостояниС Π³ΠΎΠ½ΠΊΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚ Π² процСссС закрытия Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠ³ΠΎ дСскриптора ΠΏΡ€ΠΈ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ close() ΠΈ fget(). Π’Ρ‹Π·ΠΎΠ² close() ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π΄ΠΎ выполнСния fget(), Ρ‡Ρ‚ΠΎ Π²Π²Π΅Π΄Ρ‘Ρ‚ сборщик мусора Π² Π·Π°ΠΌΠ΅ΡˆΠ°Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΠΎ Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π² соотвСтствии со счётчиком refcount Ρƒ структуры file Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π½Π΅ΡˆΠ½ΠΈΡ… ссылок, Π½ΠΎ ΠΎΠ½Π° останСтся ΠΏΡ€ΠΈΠΊΡ€Π΅ΠΏΠ»Π΅Π½Π° ΠΊ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΌΡƒ дСскриптору, Ρ‚.Π΅. сборщик мусора посчитаСт, Ρ‡Ρ‚ΠΎ ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΉ доступ ΠΊ структурС, Π½ΠΎ фактичСски нСбольшой ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΠΊ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ ΠΎΡΡ‚Π°ΡŽΡ‰Π°ΡΡΡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Ρ… дСскрипторов запись Π΅Ρ‰Ρ‘ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΠΌΡƒΡŽ структуру.

Для увСличСния вСроятности попадания Π² состояниС Π³ΠΎΠ½ΠΊΠΈ использовано нСсколько Ρ‚Ρ€ΡŽΠΊΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΈ довСсти Π²Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ успСха эксплуатации Π΄ΠΎ 30% ΠΏΡ€ΠΈ внСсСнии спСцифичных для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ систСмы ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΉ. НапримСр, для увСличСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ обращСния ΠΊ структурС с Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹ΠΌΠΈ дСскрипторами Π½Π° нСсколько сотСн наносСкунд Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ вытСснСниС Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· процСссорного кэша Ρ‡Π΅Ρ€Π΅Π· замусориваниС кэша Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒΡŽ Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΌ ядрС CPU, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚Π΄Π°Ρ‡ΠΈ структуры ΠΈΠ· памяти, Π° Π½Π΅ ΠΈΠ· быстрого кэша CPU.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°ΠΆΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ стало использованиС для увСличСния Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ состояния Π³ΠΎΠ½ΠΊΠΈ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹ΠΌ Ρ‚Π°ΠΉΠΌΠ΅Ρ€ΠΎΠΌ. ΠŸΠΎΠ΄Π±ΠΈΡ€Π°Π»ΡΡ Ρ‚Π°ΠΊΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ прСрывания срабатывал Π²ΠΎ врСмя возникновСния состояния Π³ΠΎΠ½ΠΊΠΈ ΠΈ Π½Π° ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ врСмя ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π» Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°. Для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ затягивания возвращСния управлСния ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ epoll Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Π»ΠΎΡΡŒ ΠΎΠΊΠΎΠ»ΠΎ 50 тысяч записСй Π² waitqueue, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰ΠΈΡ… ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π° Π² ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ΅ ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°Π½ΠΈΠΉ.

Π’Π΅Ρ…Π½ΠΈΠΊΠ° эксплуатации уязвимости раскрыта послС 90-Π΄Π½Π΅Π²Π½ΠΎΠ³ΠΎ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄Π° Π½Π΅Ρ€Π°Π·Π³Π»Π°ΡˆΠ΅Π½ΠΈΡ. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° проявляСтся начиная с ядра 2.6.32 ΠΈ устранСна Π² Π½Π°Ρ‡Π°Π»Π΅ дСкабря. Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ вошло Π² состав ядра 5.16, Π° Ρ‚Π°ΠΊΠΆΠ΅ пСрСнСсСно Π² LTS-Π²Π΅Ρ‚ΠΊΠΈ ядра ΠΈ ΠΏΠ°ΠΊΠ΅Ρ‚Ρ‹ с ядром, поставляСмыС Π² дистрибутивах. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, Ρ‡Ρ‚ΠΎ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π±Ρ‹Π»Π° выявлСна Π² Ρ…ΠΎΠ΄Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΠΎΡ…ΠΎΠΆΠ΅ΠΉ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ CVE-2021-0920, ΠΏΡ€ΠΎΡΠ²Π»ΡΡŽΡ‰Π΅ΠΉΡΡ Π² сборщикС мусора ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„Π»Π°Π³Π° MSG_PEEK.

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

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ