В ядре Linux устранена следующая уязвимость:
fs/ntfs3: привязанный индекс page_lcns[] к записи журнала
Цикл copy_lcns и индекс цикла сокращения повтора page_lcns[] в j + i,
где я подбегаю к записи lcns_follow в журнале. Этот счетчик проверяется только
относительно собственной длины записи, а не целевой записи, поэтому check_dp_table()
(который проверяет lcns_follow записи) не распространяется на нее: copy_lcns
запись может быть даже выделена заново после этой проверки, и find_dp() ограничивает j
но не я. Таким образом, созданная запись переполняет page_lcns[] действительной в противном случае записи.
вход.
Добавьте dp_range_ok() и отклоняйте перед каждым циклом любую запись, запуск которой
не подходит для записи. Это единственные два доступа к page_lcns[], проиндексированные
запись, а не запись, поэтому вместе с проверкой записи
каждый доступ теперь ограничен.
[almaz.alexandrovich@paragon-software.com: исходный патч содержал изменения уже решенной проблемы, примененные частично]
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: fs/ntfs3: bound page_lcns[] index by the log record The copy_lcns loop and the redo shorten loop index page_lcns[] at j + i, where i runs up to the log record's lcns_follow. That count is checked only against the record's own length, not the target entry, so check_dp_table() (which validates the entry's lcns_follow) does not cover it: the copy_lcns entry may even be freshly allocated after that check, and find_dp() bounds j but not i. A crafted record thus overflows page_lcns[] of an otherwise valid entry. Add dp_range_ok() and reject, before each loop, any record whose run does not fit the entry. These are the only two page_lcns[] accesses indexed by the record rather than the entry, so together with the entry validation every access is now bounded. [almaz.alexandrovich@paragon-software.com: original patch contained changes to the problem already handled, applied partly]
Характеристики атаки
Последствия
Строка CVSS v3.1