Суть проблемы: от флешки до root
Разработчик Вова Токарев (Vova Tokarev) обнаружил серьезную брешь в драйвере NTFS3, интегрированном в основное ядро Linux. Уязвимость позволяет локальному пользователю получить полный доступ к системе (root) путем подключения специально сконструированного USB-накопителя. Проблема заключается в том, что десктопные автомонтеры, такие как udisks, по умолчанию монтируют NTFS-разделы с флагом suid.
Технические детали эксплуатации
Атака не требует взаимодействия с пользователем после вставки устройства. Злоумышленник создает образ NTFS, в котором в MFT (Master File Table) уже прописаны расширенные атрибуты (EAs) с параметрами $LXUID=0, $LXGID=0 и $LXMOD=0104755. При монтировании драйвер считывает эти данные с диска напрямую, игнорируя проверки безопасности, и устанавливает бит Set-UID на создаваемый файл, превращая его в бинарник с правами root.
Код уязвимости и предлагаемое исправление
Корень проблемы находится в файле fs/ntfs3/xattr.c (строка 1022), где режим файла присваивается напрямую из недоверенных данных на диске без фильтрации битов привилегий. Токарев предложил простое однострочное исправление, которое отбрасывает биты SUID и SGID:
| Компонент | Значение / Код |
|---|---|
| Уязвимая строка | inode->i_mode = le32_to_cpu(value[2]); |
| Исправленная строка | inode->i_mode = le32_to_cpu(value[2]) & ~(S_ISUID | S_ISGID); |
| Область воздействия | Драйвер NTFS3 в mainline ядре Linux |
| Статус исправления | Не исправлено (на момент публикации) |
Почему это важно сейчас
Несмотря на то, что уязвимость была сообщена приватно два месяца назад, она остается незакрытой в основных ветках ядра. Это создает риск для миллионов пользователей, использующих автоматическое монтирование внешних накопителей. Примечательно, что альтернативный драйвер NTFS, который также развивается в mainline, не подвержен этой атаке, что подчеркивает важность выбора корректной реализации файловой системы.
Источник: Phoronix ↗
