Уязвимости Π² подсистСмС eBPF, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра Linux

ВыявлСны Π΄Π²Π΅ Π½ΠΎΠ²Ρ‹Π΅ уязвимости Π² подсистСмС eBPF, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π΅ΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ ядра Linux Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ машинС с JIT. ОбС ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π΄Π°ΡŽΡ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄ с ΠΏΡ€Π°Π²Π°ΠΌΠΈ ядра, Π²Π½Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ eBPF. Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°Ρ… ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π»Π° ΠΊΠΎΠΌΠ°Π½Π΄Π° Zero Day Initiative, проводящая сорСвнования Pwn2Own, Π² Ρ…ΠΎΠ΄Π΅ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π² этом Π³ΠΎΠ΄Ρƒ Π±Ρ‹Π»ΠΈ продСмонстрированы Ρ‚Ρ€ΠΈ Π°Ρ‚Π°ΠΊΠΈ Π½Π° Ubuntu Linux, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… использовались Ρ€Π°Π½Π΅Π΅ нСизвСстныС уязвимости (связаны Π»ΠΈ уявзимости Π² eBPF с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π°Ρ‚Π°ΠΊΠ°ΠΌΠΈ Π½Π΅ сообщаСтся).

  • CVE-2021-3490 — ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° отсутствиСм ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π° Π·Π° Π³Ρ€Π°Π½ΠΈΡ†Ρƒ 32-разрядных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΡ€ΠΈ выполнСния Π±ΠΈΡ‚ΠΎΠ²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ AND, OR ΠΈ XOR Π² eBPF ALU32. ΠΡ‚Π°ΠΊΡƒΡŽΡ‰ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π΄Π°Π½Π½ΠΎΠΉ ошибкой для чтСния ΠΈ записи Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½Π΅ Π³Ρ€Π°Π½ΠΈΡ† Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π°. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ XOR проявляСтся начиная с вСрсии ядра 5.7-rc1, Π° AND ΠΈ OR — начиная с выпуска 5.10-rc1.
  • CVE-2021-3489 — ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Ρ‹Π·Π²Π°Π½Π° ошибкой Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° ΠΈ связана с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ функция bpf_ringbuf_reserve Π½Π΅ провСряла Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ области памяти ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ мСньшС фактичСского Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΊΠΎΠ»ΡŒΡ†Π΅Π²ΠΎΠ³ΠΎ Π±ΡƒΡ„Π΅Ρ€Π° ringbuf. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° проявляСтся начиная с выпуска 5.8-rc1.

Бтатус исправлСния уязвимостСй Π² дистрибутивах ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡΠ»Π΅Π΄ΠΈΡ‚ΡŒ Π½Π° Π΄Π°Π½Π½Ρ‹Ρ… страницах: Ubuntu, Debian, RHEL, Fedora, SUSE, Arch). Π˜ΡΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡ Ρ‚Π°ΠΊΠΆΠ΅ доступны Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉ (CVE-2021-3489, CVE-2021-3490). Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ эксплуатации ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ зависит ΠΎΡ‚ доступности ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π° eBPF. НапримСр, Π² ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² RHEL для эксплуатации уязвимости трСбуСтся Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΡ€Π°Π² CAP_SYS_ADMIN.

ΠžΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½Ρƒ ΡƒΡΠ·Π²ΠΈΠΌΠΎΡΡ‚ΡŒ Π² ядрС Linux — CVE-2021-32606, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΡƒΡŽ Π»ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎΠΌΡƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ ΠΏΠΎΠ΄Π½ΡΡ‚ΡŒ свои ΠΏΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΠΈ Π΄ΠΎ уровня root. ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° проявляСтся начиная с ядра Linux 5.11 ΠΈ Π²Ρ‹Π·Π²Π°Π½Π° состояниСм Π³ΠΎΠ½ΠΊΠΈ Π² Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° CAN ISOTP, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π΄Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ привязки ΠΊ сокСту ΠΈΠ·-Π·Π° отсутствия установки Π΄ΠΎΠ»ΠΆΠ½Ρ‹Ρ… Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ isotp_setsockopt() ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ„Π»Π°Π³Π° CAN_ISOTP_SF_BROADCAST.

ПослС закрытия сокСта ISOTP ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅Ρ‚ Π΄Π΅ΠΉΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ привязка ΠΊ сокСту получатСля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ связанныС с сокСтом структуры послС освобоТдСния связанной с Π½ΠΈΠΌΠΈ памяти (use-after-free ΠΈΠ·-Π·Π° обращСния ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ isotp_rcv() ΠΊ ΡƒΠΆΠ΅ освобоТдённой структурС isotp_sock). Π§Π΅Ρ€Π΅Π· манипуляции с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡ‚ΡŒΡΡ пСрСопрСдСлСния указатСля Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ sk_error_report() ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ свой ΠΊΠΎΠ΄ Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ ядра.

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

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