В ядре Linux устранена следующая уязвимость:
libceph: проверка карт экстентов OSD перед перемещением курсора
net/ceph/osd_client.c:osd_sparse_read() проверяет, что разреженное чтение
длина данных соответствует сумме длин экстентов, но не проверяется
что каждый экстент, предоставленный OSD, монотонен и находится внутри исходного
диапазон запроса. Неверно сформированный аутентифицированный ответ OSD может рекламировать
далеко вперед ненулевое смещение экстента с соответствующей длиной данных и сделать
клиент перемещает курсор данных сообщения за пределы буфера запроса. Это достигает утверждения BUG_ON(!*length) в ceph_msg_data_next() из
клиент получает путь.
Воздействие: вредоносный или скомпрометированный аутентифицированный одноранговый узел Ceph OSD может привести к сбою.
клиент Ceph ядра через некорректный ответ разреженного чтения. Отклонять разреженные карты экстентов, которые переполняются, перемещаются назад, перекрываются или
выйти за пределы исходного запроса на разреженное чтение перед продвижением
курсор.
[идрёмов: чуть раньше выполните проверку sparse_extent_map_valid(),
в CEPH_SPARSE_READ_DATA_LEN вместо CEPH_SPARSE_READ_DATA_PRE
состояние ]
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: libceph: validate OSD extent maps before cursor advance net/ceph/osd_client.c:osd_sparse_read() validates that the sparse-read data length matches the summed extent lengths, but it does not validate that each OSD-supplied extent is monotonic and lies inside the original request range. A malformed authenticated OSD reply can advertise a far-forward nonzero extent offset with a matching data length and make the client advance the message-data cursor beyond the request buffer. This reaches the BUG_ON(!*length) assertion in ceph_msg_data_next() from the client receive path. Impact: A malicious or compromised authenticated Ceph OSD peer can crash a kernel Ceph client via a malformed sparse-read reply. Reject sparse extent maps that overflow, move backwards, overlap, or extend outside the original sparse-read request before advancing the cursor. [ idryomov: perform sparse_extent_map_valid() check a bit earlier, in CEPH_SPARSE_READ_DATA_LEN instead of CEPH_SPARSE_READ_DATA_PRE state ]
Характеристики атаки
Последствия
Строка CVSS v3.1