
Vulnerabilidades de segurança documentadas na biblioteca de sistema de arquivos embarcado FatFs com detalhes de CVE, harness de fuzzing, gerador de imagem de disco de exploit e análise de impacto na cadeia de suprimentos em dezenas de projetos de firmware downstream.
Este repositório documenta seis vulnerabilidades de segurança confirmadas no FatFs, juntamente com um harness de teste, um fuzzer e um gerador autônomo de imagens de disco de exploit.
O código-fonte original do FatFs pode ser encontrado no diretório FatFs-R0.16.
Este projeto é um retorno a uma avaliação de segurança de 2017, quando uma auditoria manual e um esforço de fuzzing de vários dias identificaram alguns bugs básicos, mas não interessantes, no driver FatFs. Nove anos depois, em março de 2026, revisitamos este projeto usando Visual Studio Code, GitHub Copilot no modo "auto" e alguns prompts básicos, sem loops, harnesses ou skills específicos. Os resultados foram surpreendentes - bugs que foram ignorados durante a auditoria manual tornaram-se triviais de encontrar, ao usar o LLM para construir automaticamente um fuzzer com entradas inéditas. Esse esforço não apenas encontrou bugs interessantes, como também automatizou o processo de validação da explorabilidade em diferentes cenários de desenvolvimento embarcado.
Consulte os seguintes arquivos para notas detalhadas:
O FatFs é uma biblioteca de sistema de arquivos FAT/exFAT portável e livre de royalties, escrita em C por ChaN (elm-chan.org). É projetada para sistemas embarcados com recursos limitados, sem dependência de SO, e é tipicamente compilada diretamente no firmware. Ela suporta FAT12, FAT16, FAT32 e exFAT, bem como suporte opcional a LFN (Long File Name) e partições GPT.
Por ser pequeno, autocontido e com licença permissiva, o FatFs tornou-se o padrão de facto para implementação FAT em firmware de microcontroladores. A biblioteca é incorporada verbatim em SDKs oficiais, RTOSes, bootloaders e frameworks de aplicação — ou seja, uma única vulnerabilidade upstream se propaga para todos os projetos downstream que copiaram ff.c.
Os seguintes projetos foram confirmados como incluindo uma versão vulnerável do FatFs. Consulte 02_CRITICAL.md para a análise completa, os caminhos de propagação por projeto e as informações de contato de segurança.
| Projeto | Estrelas | Versão do FatFs | Bugs |
|---|---|---|---|
| espressif/esp-idf | 17,655 | R0.16 | CVE-2026-6682 |
| STMicroelectronics/stm32-mw-fatfs | all STM32Cube | R0.15 w/p2 | CVE-2026-6682, CVE-2026-6683, CVE-2026-6686, CVE-2026-6687 |
| zephyrproject-rtos/zephyr | 14,820 | R0.16 | CVE-2026-6683, CVE-2026-6687, CVE-2026-6688 |
| micropython/micropython | 21,583 | R0.13c (2019) | CVE-2026-6682, CVE-2026-6683, CVE-2026-6684, CVE-2026-6686, CVE-2026-6687 |
| ArduPilot/ardupilot | 14,743 | R0.14b | CVE-2026-6682, CVE-2026-6683, CVE-2026-6686, CVE-2026-6687 |
| RT-Thread/rt-thread | 11,862 | R0.16 | CVE-2026-6683, CVE-2026-6686 |
| nodemcu/nodemcu-firmware | 7,903 | varies | CVE-2026-6688 |
| RIOT-OS/RIOT | 5,701 | R0.15 | CVE-2026-6682, CVE-2026-6683, CVE-2026-6686, CVE-2026-6687 |
| ARMmbed/mbed-os | 4,837 | R0.14b | CVE-2026-6682, CVE-2026-6683, CVE-2026-6686 |
| sbabic/swupdate | 1,780 | R0.16 | CVE-2026-6683 |
| rsta2/circle | 2,222 | tbd | CVE-2026-6684 |
| hugen79/NanoVNA-H | 695 | R0.15 | CVE-2026-6683 |
| ChibiOS/ChibiOS | 833 | varies | CVE-2026-6688 |
| Samsung/TizenRT | 643 | R0.16 | CVE-2026-6683, CVE-2026-6688 |
| adafruit/tinyuf2 | 447 | tbd | CVE-2026-6684, CVE-2026-6686 |
| grblHAL/Plugin_SD_card | 475 | R0.16 | CVE-2026-6688 |
| JcZou/StarryPilot | 315 | R0.16 | CVE-2026-6688 |
| KeystoneHQ/keystone3-firmware | 199 | R0.16 | CVE-2026-6682 |
| flysight/flysight | 44 | varies | CVE-2026-6682, CVE-2026-6688 |
| eugene-tarassov/vivado-risc-v | 1,061 | tbd | CVE-2026-6684 |
| ID CVE | Título Resumido | CWE |
|---|---|---|
| CVE-2026-6682 | Estouro de inteiro na montagem de volume FAT32 | CWE-190: Integer Overflow or Wraparound |
| CVE-2026-6683 | Divisão por zero na sincronização exFAT | CWE-369: Divide By Zero |
| CVE-2026-6684 | Loop infinito na varredura de partição GPT | CWE-835: Loop with Unreachable Exit Condition |
| CVE-2026-6686 | Uso de clusters não inicializados após seek além do EOF | CWE-908: Use of Uninitialized Resource |
| CVE-2026-6687 | Estouro de buffer de pilha via comprimento não limitado do rótulo exFAT | CWE-121: Stack-based Buffer Overflow |
| CVE-2026-6688 | Estouro de buffer via cópia de nome de arquivo LFN sem limite | CWE-120: Buffer Copy without Checking Size of Input |
O FatFs não tem histórico de CVEs, lista de discussão de segurança ou mecanismo de notificação de patches. Cada projeto downstream que incorpora ff.c precisa descobrir, triar e corrigir essas vulnerabilidades de forma independente, geralmente sem saber que é afetado. Isso significa que a janela entre a divulgação pública e a remediação em larga escala será medida em anos, não em dias. A superfície de ataque prática, portanto, não é um único aplicativo ou serviço, mas dezenas de milhões de dispositivos em dezenas de codebases independentes, muitos dos quais nunca receberão um patch.
O cenário de exploração arquetípico é o cartão SD maligno: um atacante com alguns segundos de acesso físico troca o meio de armazenamento em um dispositivo, de câmeras de consumo a drones, de impressoras 3D a mil outras famílias de produtos. Todas as vulnerabilidades deste conjunto são acionáveis ao montar uma imagem FAT adulterada, o que quase sempre acontece automaticamente na inserção, sem exigir interação do usuário. Dito isso, o acesso físico não é o único caminho.