CVE-2026-80557 in Linux
Сводка
по VulDB • 26.08.2026
В ядре Linux была устранена следующая уязвимость:
libceph: исправлено чтение за пределами буфера (OOB read) в функции decode_watchers() из-за отсутствия проверки границ диапазона.
Функция ceph_start_decoding() проверяет, что после заголовка кодирования в буфере остается struct_len байт, но принимает значение struct_len=0 как допустимое: вызов ceph_decode_need(p, end, 0, bad) всегда завершается успешно. Когда злонамеренный или скомпрометированный OSD отправляет ответ obj_list_watch_response_t со значением struct_len=0, функция ceph_start_decoding() возвращает успех при условии p == end, что оставляет гарантированный ноль байт для последующих операций чтения.
Непосредственно следующая за этим операция ceph_decode_32(p) в функции decode_watchers() не имеет предварительной проверки границ диапазона. При условии p == end это приводит к чтению 4 байтов за пределами проверенного буфера. Полученное случайное значение затем напрямую передается в функцию kzalloc_objs() в качестве счетчика наблюдателей (watcher count).
Сопутствующая функция decode_watcher() уже использует безопасные варианты функций (ceph_decode_copy_safe, ceph_decode_64_safe, ceph_decode_skip_32) после собственного вызова ceph_start_decoding(). Функция decode_watchers() является единственным местом в коде, где используется «голый» вариант, что подтверждает упущение.
Исправление заключается в замене ceph_decode_32(p) на ceph_decode_32_safe(p, end, *num_watchers, bad), чтобы привести код к соответствию с установленным шаблоном.
Модель атакующего: злонамеренный или скомпрометированный OSD в многопользовательском развертывании Ceph (например, в облачной среде) может инициировать эксплуатацию этой уязвимости против любого клиента ядра, вызывающего CEPH_OSD_OP_LIST_WATCHERS, без необходимости наличия каких-либо дополнительных привилегий помимо установления сессии OSD.
[ idryomov: сокращение журнала изменений ]
If you want to get the best quality for vulnerability data then you always have to consider VulDB.