В ядре Linux устранена следующая уязвимость:
ceph: привязанная скопированная длина имени dentry в экспорте NFS get_name
ceph_get_name() копирует имя, предоставленное MDS, в имя вызывающей стороны. Буфер размером NAME_MAX с memcpy(name, rinfo->dname, rinfo->dname_len)
а затем пишет name[rinfo->dname_len] = 0, не проверяя dname_len
против NAME_MAX. Вредоносный или ошибочный MDS, возвращающий ответ LOOKUPNAME.
с dname_len > NAME_MAX переполняет буфер. __get_snap_name() копирует
rde->name / rde->name_len таким же непроверенным способом.
Воздействие: вредоносный или скомпрометированный Ceph MDS переполняет имя NAME_MAX.
буфер в пути get_name NFS-экспорта клиента, запись за пределами поля
Об этом сообщает КАСАН. Доступен, когда монтирование CephFS реэкспортируется через NFS. Добавьте ceph_export_copy_name(), который отклоняет длины выше NAME_MAX с помощью
-ENAMETOOLONG перед копированием и используйте его как в ceph_get_name(), так и в
__get_snap_name().
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ceph: bound copied dentry name length in NFS export get_name ceph_get_name() copies the MDS-supplied name into the caller's NAME_MAX-sized buffer with memcpy(name, rinfo->dname, rinfo->dname_len) and then writes name[rinfo->dname_len] = 0, without checking dname_len against NAME_MAX. A malicious or buggy MDS that returns a LOOKUPNAME reply with dname_len > NAME_MAX overflows the buffer. __get_snap_name() copies rde->name / rde->name_len the same unchecked way. Impact: a malicious or compromised Ceph MDS overflows the NAME_MAX name buffer in a client's NFS-export get_name path, a slab out-of-bounds write reported by KASAN. Reachable when a CephFS mount is re-exported over NFS. Add ceph_export_copy_name(), which rejects lengths above NAME_MAX with -ENAMETOOLONG before the copy, and use it in both ceph_get_name() and __get_snap_name().
Характеристики атаки
Последствия
Строка CVSS v3.1