В ядре Linux устранена следующая уязвимость:
ntfs: проверка значений атрибутов при поиске
ntfs_attr_find() и ntfs_external_attr_find() проверяют этот общий
Значения резидентных атрибутов соответствуют их записям атрибутов, и это
Резидентные значения фиксированного размера достаточно велики. Для резидента переменной длины
форматы, однако фиксированной части недостаточно: встроенные поля длины
все еще может указывать вызывающим абонентам за пределы значения резидента. Созданное изображение может установить небольшое резидентное значение $FILE_NAME value_length, в то время как
оставив file_name_length большим.
Затем вызывающие абоненты доверяют file_name_length и
прочитайте резидентное значение при преобразовании или сравнении имени. Это
был воспроизведен с обработанным изображением под КАСАН как плита, выходящая за пределы поля
прочитать из копии записи kmalloc-1k MFT. В стек входит
ntfs_lookup(), ntfs_iget(), ntfs_read_locked_inode(), ntfs_attr_name_get(),
ntfs_ucstonls() и utf16s_to_utf8s().
Добавьте валидатор значения общего атрибута и используйте его перед путем поиска.
может возвращать атрибут, включая случай перечисления AT_UNUSED, где
вызывающие абоненты напрямую проверяют возвращаемые атрибуты. Помощник проверяет
границы резидентных значений, минимальные размеры резидентных значений, переменная длина
Поля $FILE_NAME и метаданные нерезидентных пар сопоставлений, которые были
ранее проверялось отдельно в обоих путях поиска. Это также сохраняет предполагаемую резидентную семантику сопоставления @val в
Путь поиска внешнего атрибута.
Старый дублированный блок проверки
перезаписал фактическую длину резидентного значения минимальным значением для конкретного типа
length перед сравнением @val, поэтому резидентные значения переменной длины могут
не совпадают, даже если байты были идентичны. Продолжайте сравнение
фактическую длину значения и сравните ntfs_attrlist_entry_add()
резидентные атрибуты с нулевым значением low_vcn вместо чтения
член профсоюза-нерезидент после успешного совпадения с резидентом. Отклонять также нерезидентные записи $FILE_NAME: формат требует
$FILE_NAME будет резидентным, а вызывающие объекты будут считать возвращенные записи резидентными.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ntfs: validate attribute values on lookup ntfs_attr_find() and ntfs_external_attr_find() check that generic resident attribute values fit in their attribute records and that fixed-size resident values are large enough. For variable-length resident formats, however, the fixed part is not enough: embedded length fields can still point callers past the resident value. A crafted image can set a small resident $FILE_NAME value_length while leaving file_name_length large. Callers then trust file_name_length and read past the resident value when converting or comparing the name. This was reproduced with a crafted image under KASAN as a slab-out-of-bounds read from the kmalloc-1k MFT record copy. The stack included ntfs_lookup(), ntfs_iget(), ntfs_read_locked_inode(), ntfs_attr_name_get(), ntfs_ucstonls(), and utf16s_to_utf8s(). Add a shared attribute value validator and use it before a lookup path can return an attribute, including the AT_UNUSED enumeration case where callers inspect returned attributes directly. The helper validates resident value bounds, minimum resident value sizes, variable-length $FILE_NAME fields, and non-resident mapping-pairs metadata that was previously checked separately in both lookup paths. This also preserves the intended resident @val matching semantics in the external attribute lookup path. The old duplicated validation block overwrote the actual resident value length with the type-specific minimum length before comparing @val, so variable-length resident values could fail to match even when the bytes were identical. Keep the comparison on the actual value length, and make ntfs_attrlist_entry_add() compare resident attributes with lowest_vcn zero instead of reading the non-resident union member after a successful resident match. Reject non-resident $FILE_NAME records too: the format requires $FILE_NAME to be resident and callers treat returned records as resident.
Характеристики атаки
Последствия
Строка CVSS v3.1