Исследователи безопасности из компании Google выявили в ядре Linux уязвимость (CVE-2025-38236), позволяющую повысить свои привилегии в системе. Среди прочего уязвимость даёт возможность обойти механизм sandbox-изоляции, применяемый в Google Chrome, и добиться выполнения кода на уровне ядра при выполнении кода в контексте изолированного процесса рендеринга Chrome (например, при эксплуатации другой уязвимости в Chrome). Проблема проявляется начиная с ядра Linux 6.9 и устранена в обновлениях ядра Linux 6.1.143, 6.6.96, 6.12.36 и 6.15.5. Для загрузки доступен прототип эксплоита.
Уязвимость вызвана ошибкой в реализации флага MSG_OOB, который можно выставить для сокетов AF_UNIX. Флаг MSG_OOB ("out-of-band") позволяет прикрепить дополнительный байт к отправляемым данным, который получатель может прочитать до получения остальных данных. Данный флаг был добавлен в ядре Linux 5.15 по запросу Oracle и в прошлом году предлагался для перевода в разряд устаревших, как не получивший широкого распространения.
В реализации sandbox-окружении Chrome разрешены операции с UNIX-сокетами и системные вызовы send()/recv(), в которых флаг MSG_OOB допускался наряду c другими опциями и не был отдельно отфильтрован. Ошибка в реализации MSG_OOB позволяла добиться обращения к памяти после её освобождения (use-after-free) после выполнения определённой последовательности системных вызовов:
char dummy;
int socks[2];
socketpair(AF_UNIX, SOCK_STREAM, 0, socks);
send(socks[1], "A", 1, MSG_OOB);
recv(socks[0], &dummy, 1, MSG_OOB);
send(socks[1], "A", 1, MSG_OOB);
recv(socks[0], &dummy, 1, MSG_OOB);
send(socks[1], "A", 1, MSG_OOB);
recv(socks[0], &dummy, 1, 0);
recv(socks[0], &dummy, 1, MSG_OOB);
|