Торвальдс опять разнёс всех: когда имя файла вдруг становится уязвимостью, это уже диагноз, а не фича

Торвальдс опять разнёс всех: когда имя файла вдруг становится уязвимостью, это уже диагноз, а не фича

Кажется, кто-то слишком любит старый FAT и решил воссоздать его ужасы.

image

Линус Торвальдс снова в ударе — и на этот раз под горячую руку попала поддержка нечувствительности к регистру в файловых системах. Поводом для высказываний послужила проблема с case-folding в Bcachefs, которая была обнаружена и теперь исправляется в готовящемся релизе Linux 6.15. Но Торвальдс использовал эту возможность, чтобы в своём стиле высказать мнение о всей идее нечувствительных к регистру имён файлов и папок — и сделал это максимально жёстко.

Он начал с того , что «единственный урок здесь — это то, что разработчики файловых систем ничему не учатся». По его мнению, сама идея нечувствительности к регистру в файловых системах — это ошибка, которую не следовало бы допускать вообще. Не проблема в недостаточном тестировании, а в самом факте её реализации.

Дальше — больше. Он критикует попытки реализовать «корректное» сравнение строк, особенно с поддержкой Unicode и его особенностей. По словам Линуса, как только кто-то решает делать это «правильно», начинаются хаотичные проблемы, где байты внезапно обретают «магическое значение», а попытка учесть все особенности ведёт к новым уязвимостям.

Особую тревогу у него вызывают ситуации, когда программы в пространстве пользователя проверяют, соответствует ли имя файла какому-либо чувствительному шаблону — например, в целях безопасности. И если файловая система решает проигнорировать «невидимые» символы (так называемые ignorable code points), то один и тот же путь может восприниматься по-разному в приложении и в файловой системе. Это может привести к тому, что программа, которая думает, будто защитилась от доступа к какому-либо критичному пути, на самом деле позволяет доступ — просто потому, что имена считаются одинаковыми.

Торвальдс приводит конкретные примеры: два Unicode-символа — ❤ и ❤️ — отличаются только наличием таких игнорируемых символов. Если их считать одинаковыми, то система может начать считать одинаковыми и другие имена файлов, что уже может иметь серьёзные последствия для безопасности.

Итог его тирады прост: поддержка нечувствительности к регистру — это баг. Не фича. Не необходимость. А ошибка проектирования. И то, что разработчики до сих пор пытаются это реализовать, по его мнению, выглядит как «почитание старой файловой системы FAT», только в ещё более сломанном виде.

Классический Линус — говорит прямо, без фильтров и с технической яростью.

Твой код — безопасный?

Расскажи, что знаешь о DevSecOps.
Пройди опрос и получи свежий отчет State of DevOps Russia 2025.