Шестнадесетгодишен младеж откри две грешки в паметта в NTFS драйвера на ядрото на Linux – кодът, който чете дискове на Windows. И двете уязвимости са оценени с рейтинг 7.8 HIGH (висок). Поддържащите ядрото разработчици дори упоменаха неговата корекция в официалния регистър. 🧐

Името му е Павитра Джа. Той използва Linux от седемгодишна възраст и търси уязвимости от деветгодишен. Джа работи по трудни цели: браузърни енджини, Android, Windows и ядрото на Linux – нискостепенните части, където се намират проблемите с повреждане на паметта и ескалация на привилегии. На своя сайт той изброява признания от Google, Oracle, NASA, Philips и MoonPay, както и титлата от Индийската книга на рекордите като най-младия етичен хакер в Индия. Той се свърза с мен в LinkedIn, сподели, че харесва съдържанието ми, и изпрати своя анализ на тези два бъга.

И двата бъга се намират в ntfs3. Това е драйверът, който позволява на Linux да чете и пише върху NTFS дискове (файловата система на Windows). Когато включите форматирана под Windows USB памет в Linux машина, именно този код я разчита. Разработен от Paragon Software, той е част от ядрото от версия 5.15 през 2021 г. Когато даден диск не е изключен правилно, NTFS поддържа журнал, за да може да възстанови последните промени при следващото монтиране. Ядрото възпроизвежда този журнал по време на монтирането. При този процес то прочита няколко числа директно от диска и им се доверява сляпо.Нищо не проверява тези числа спрямо размера на обекта, в който трябва да се поберат.

  • CVE-2026-64532: запис извън границите на хийпа (heap out-of-bounds write). Поле за отместване, наречено data_off, указва на функцията memmove къде да пише, но нищо не проверява дали това място е в рамките на записа. Ако се зададе стойност 0xFFFC, записът се извършва с 32 байта след края – директно върху това, което ядрото е поставило след него. Това се случва два пъти в две разклонения на една и съща функция.
  • CVE-2026-64533: четене и запис извън границите на хийпа (heap out-of-bounds read and write). Брояч на име lcns_follow определя колко байта да копира memmove, като се чете от диска без горен лимит. При подаване на 0x1FFFFFFF копирането нараства до приблизително четири гигабайта. Същият брояч се използва по-късно и като лимит за цикъл, което дава безплатно второ четене и запис извън границите.

При втория бъг разработчикът дори е оставил бележка в кода непосредствено над копирането: // NOTE: Danger. Check for of boundary. Предупреждението е било там. Проверката – не.

И двете уязвимости имат еднаква сериозност от 7.8 HIGH и сходен профил. Атаката е локална. Някой трябва да монтира злонамерен NTFS образ на машината:

  • чрез предоставен и отворен дисков образ;
  • чрез услуга за автоматично монтиране (automount daemon), която сама монтира сменяеми носители.

Няма признаци уязвимостите да са били експлоатирани в реална среда. Става дума за повреждане на паметта на ядрото, задействано от монтиране на диск, на който не е трябвало да се доверявате.

Тези два бъга не са първите от този тип в ntfs3. Четенето на метаданни от NTFS диск и сляпото доверяване на тях е слабо място, където драйверът и преди е допускал грешки. Неправилно оформен образ вече е причинявал безкраен цикъл в една функция (CVE-2025-71265) и целочислено препълване в друга (CVE-2026-46062), като срещу ntfs3 непрекъснато работи автоматизиран инструмент за откриване на бъгове (fuzzer), който има натрупани и все още неограничени отворени открития. Доверяването на числа, идващи директно от диска, е повтарящата се грешка.

Официалният CVE запис за 64532 в kernel.org описва корекцията и добавя ред, който лесно може да бъде пропуснат. Корекцията е „сходна по форма с изпратената от Павитра Джа корекция за сигурност на 2026-05-02“, посочвайки идентификатора на съобщението, което той е изпратил на разработчиците на ядрото. Той не просто е докладвал за срив – на 2 май той е изпратил собствено решение. Поддържащите кода избраха вградена проверка на границите вместо предложената от него помощна функция, но внедриха корекция със същата форма и вписаха името му в официалния регистър. Това вписване е за първия бъг. Вторият, 64533, също е негово откритие, подробно описано в анализа му, въпреки че официалният му запис не съдържа неговото име. Корекциите са интегрирани в основния код и са пренесени обратно към шест стабилни клона на ядрото.

Това е реалният код от неговия анализ – уязвимия път и корекцията, а не опростена версия.Записът, без никаква проверка на data_off:

Корекцията, с първоначално добавената проверка на границите:

Три реда. Проверка дали отместването е вътре в записа, проверка дали записът не излиза извън края, и след това копиране. Това е всичко, което е липсвало. Кодът, който чете същите тези записи, вече е извършвал проверката. Пътят за възстановяване обаче никога не я е правил.

Това не е първият му успех. По-рано тази година той получи признание за CVE-2026-43495 – четене извън границите в драйвера на модема MediaTek t7xx, пренесено в пет стабилни клона. Същият тип работа: входни данни от устройство или диск, на които ядрото се е доверило повече, отколкото е трябвало.

  • Обновете ядрото си. Корекциите и за двата бъга са внедрени и разпространени в стабилните клонове.
  • Бъдете внимателни при монтиране на NTFS образ или USB памет от недоверен източник. Самото монтиране може да достигне до кода на ядрото, преди изобщо да сте отворили някой файл.

Нещото, към което продължавам да се връщам, е възрастта. Детайлното четене на кода за възстановяване на ядрото...