В ядре Linux устранена следующая уязвимость:
fs/ntfs3: проверка lcns_follow при преобразовании log_replay
log_replay() преобразует записи DIR_PAGE_ENTRY_32 в DIR_PAGE_ENTRY
записи при воспроизведении таблиц перезапуска версии 0. Во время этого преобразования длина memmove() получается непосредственно из
поле lcns_follow на диске:
memmove(&dp->vcn, &dp0->vcn_low,
2 * размер(u64) +
le32_to_cpu(dp->lcns_follow) * sizeof(u64));
check_rstbl() проверяет структуру таблицы перезапуска, но не ограничивает
Значения lcns_follow для каждой записи относительно размера записи. Деформированный
образ файловой системы может содержать слишком большое значение lcns_follow, что приводит к
преобразование memmove() для доступа к памяти за пределами
выделенный буфер таблицы перезапуска.
Это же поле позже используется для ограничения итерации по page_lcns[],
поэтому проверка lcns_follow во время преобразования также предотвращает нисходящий поток
доступ за пределами границ из тех же искаженных метаданных. Вычислите максимальное допустимое значение lcns_follow из уже проверенных
перезапустите размер записи таблицы и отклоните записи, превышающие эту границу. Повторно используйте существующие рабочие переменные t16/t32, уже объявленные в
log_replay(), чтобы избежать введения новых объявлений.
[almaz.alexandrovich@paragon-software.com: исправлены конфликты]
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: fs/ntfs3: validate lcns_follow in log_replay conversion log_replay() converts DIR_PAGE_ENTRY_32 records into DIR_PAGE_ENTRY records when replaying version 0 restart tables. During this conversion, the memmove() length is derived directly from the on-disk lcns_follow field: memmove(&dp->vcn, &dp0->vcn_low, 2 * sizeof(u64) + le32_to_cpu(dp->lcns_follow) * sizeof(u64)); check_rstbl() validates restart table structure, but does not constrain per-entry lcns_follow values relative to the entry size. A malformed filesystem image can provide an oversized lcns_follow value, causing the conversion memmove() to access memory beyond the bounds of the allocated restart table buffer. The same field is later used to bound iteration over page_lcns[], so validating lcns_follow during conversion also prevents downstream out-of-bounds access from the same malformed metadata. Compute the maximum valid lcns_follow from the already-validated restart table entry size and reject entries that exceed this bound. Reuse the existing t16/t32 scratch variables already declared in log_replay() to avoid introducing new declarations. [almaz.alexandrovich@paragon-software.com: fixed the conflicts]
Характеристики атаки
Последствия
Строка CVSS v3.1
Уязвимые продукты 7
| Конфигурация | От (включительно) | До (исключительно) |
|---|---|---|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
5.15.212
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
6.1.178
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
6.6.145
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
6.12.97
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
6.18.40
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
7.1.5
|
|
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
5.15
|
7.2-rc1
|