Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ядрС Linux, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ свои ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ Ρ‡Π΅Ρ€Π΅Π· BPF

ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ свСдСния ΠΎΠ± уязвимости (CVE-2020-8835) Π² ядрС Linux, которая Π±Ρ‹Π»Π° использована Π² сорСвновании Pwn2Own 2020 ΠΏΡ€ΠΈ дСмонстрации Π²Π·Π»ΠΎΠΌΠ° Ubuntu. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²Π° root. Π Π°Π±ΠΎΡ‡ΠΈΠΉ эксплоит сущСствуСт, Π½ΠΎ ΠΏΠΎΠΊΠ° Π½Π΅ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. Π£ΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ присутствуСт Π² подсистСмС eBPF, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ для трассировки, Π°Π½Π°Π»ΠΈΠ·Π° Ρ€Π°Π±ΠΎΡ‚Ρ‹ подсистСм ΠΈ управлСния Ρ‚Ρ€Π°Ρ„ΠΈΠΊΠΎΠΌ, выполняСмыС Π²Π½ΡƒΡ‚Ρ€ΠΈ ядра Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС с JIT.

ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Π²Ρ‹Π·Π²Π°Π½Π° ошибкой Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ __reg_bound_offset32(), примСняСмой для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ 32-разрядных ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π² Π±Π°ΠΉΡ‚ΠΊΠΎΠ΄Π΅ BPF. Из-Π·Π° Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ расчёта Π³Ρ€Π°Π½ΠΈΡ† рСгистра, ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΎΡ„ΠΎΡ€ΠΌΠ»Π΅Π½Π½Ρ‹Ρ… BPF-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π»ΠΈ условия для записи ΠΈ чтСния Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½Π΅ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° Π² области памяти ядра. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° появилась Π² ядрС 5.5 ΠΈ ΠΏΠΎΠ·Π΄Π½Π΅Π΅ ΠΏΡ€ΠΈ бэкпортировании исправлСний Π±Ρ‹Π»Π° пСрСнСсСна Π² ядро 5.4, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² ΠΏΠ°ΠΊΠ΅Ρ‚ с ядром 5.3, ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΌ Π² Ubuntu Linux.

Для блокирования уязвимости Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°Π½ΠΎ ΠΎΡ‚ΠΊΠ°Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½Ρ‹ΠΉ ΠΏΠ°Ρ‚Ρ‡ ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ BPF-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡΠΌΠΈ Ρ‡Π΅Ρ€Π΅Π· установку sysctl kernel.unprivileged_bpf_disabled Π² Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 1. Бтатус исправлСния Π² дистрибутивах: Ubuntu, Debian, Arch, Fedora ΠΈ SUSE (Π² ядра RHEL ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠ΅Ρ€Π΅Π½ΠΎΡΠΈΠ»ΠΎΡΡŒ).

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

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