Уязвимости в подсистемата 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

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster