Милиони устройства четат SD карти чрез малка библиотека с код, наречена FatFs, а изследователи току-що откриха седем начина за нейното компрометиране. Най-сериозната уязвимост предава пълния контрол над устройството на този, който е създал картата.

FatFs изпълнява една проста задача – позволява на устройството да чете и записва във форматите FAT и exFAT, същите, които използват вашите USB памети и SD карти. Почти всяко устройство с порт за карта или USB се нуждае от подобна функционалност, а тъй като FatFs е безплатна, изключително малка и лесна за интегриране, голяма част от индустрията я използва. Един човек пише кода, а хиляди продукти го копират в своя хардуер и го разпространяват.

Ето защо една компрометирана карта е достатъчна. FatFs е модулът, на който устройството разчита веднага щом поставите картата. Ако го компрометирате по правилния начин, вие не просто сривате дадено приложение, а предавате контрола над устройството на това, което се намира на самата карта. Засегнатият код се копира в продукти от години и ако дадено устройство работи с олекотена операционна система за микроконтролери, има голяма вероятност да използва именно FatFs. Така че това не е проблем на един повреден продукт, а на една компрометирана част, скрита в много от тях.

Най-опасната уязвимост работи по следния начин: когато поставите карта, FatFs първо изчислява откъде започват данните на нея. За целта тя умножава две числа, предоставени от самата карта. Това умножение е слабото място. Атакуващият избира стойностите на картата така, че резултатът да надхвърли максималния лимит и да се препълни до съвсем малка стойност (препълване на целочислена променлива, регистрирано като CVE-2026-6682).

Оттам нататък FatFs получава грешна информация за началото на данните. Атакуващият поставя фалшив запис за файл на това място и FatFs отчита нереално голям размер на файла. Когато програмата се довери на този размер и прочете файла, тя прехвърля зададения брой байтове в буфер, предназначен за много по-малко данни, което води до препълване на буфера и запис в памет, която никога не трябва да бъде докосвана. При малък чип без допълнителна защита, това пренаписване може да изпълни кода на атакуващия директно на устройството ви.

Останалите шест уязвимости разчитат на същия трик на различни места. Прекалено дълъг етикет на диска или твърде дълго име на файл могат да препълнят заделеното пространство. При Zephyr този буфер е само 14 байта, така че специално форматирано име лесно компрометира паметта. Друг бъг тихо поврежда данни на фрагментирана карта без срив или съобщение за грешка, а трети позволява възстановяване на изтрито съдържание. Има и случай, в който просто деление на нула по време на актуализация блокира устройството завинаги.

Ето къде се използва този код:

  • ArduPilot – софтуерът за автопилот, използван в голяма част от потребителските и търговските дронове (засегнат от 5 от 7-те уязвимости);
  • Espressif ESP-IDF – софтуерът за чипа ESP32, захранващ милиони смарт контакти, камери и сензори;
  • STMicroelectronics STM32 – чийто генератор на код вгражда уязвимия размер на буфера във всеки проект, пренасяйки проблема в търговски фърмуер;
  • MicroPython – който все още се разпространява с версия FatFs R0.13c от 2018 г. (засегнат от 6 от 7-те уязвимости);
  • KeystoneHQ Keystone3 – хардуерен портфейл за съхранение на криптовалута (засегнат от бъга за отдалечено изпълнение на код).

Най-лесният начин за атака е чрез физически достъп – подмяна на SD картата или USB паметта. Устройството я монтира автоматично и уязвимостта се задейства преди натискането на какъвто и да е бутон. Примери за такива устройства са камери, 3D принтери, терминали в магазини, банкомати и машини за гласуване. Атаката е възможна и от разстояние, ако устройството сваля фърмуер по незащитен HTTP протокол и го предава директно на FatFs без предварителна проверка.