Skip to content
KitploitKITPLOIT
工具博客
Log in
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
vulns-2026-fatfs-chance — FatFs嵌入式文件系统库中已记录的安全漏洞,包含CVE详情、模糊测试工具、漏洞利用磁盘镜像生成器,以及跨数十个下游固件项目的供应链影响分析。 | Kitploit
工具/GitHubGitHub/runzeroinc/vulns-2026-fatfs-chance
嵌入式系统安全物联网安全漏洞分析漏洞利用模糊测试硬件安全二进制分析供应链安全论文与研究学习与教育固件分析
419462个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
GitHub
runzeroinc/vulns-2026-fatfs-chance

vulns-2026-fatfs-chance

FatFs嵌入式文件系统库中已记录的安全漏洞,包含CVE详情、模糊测试工具、漏洞利用磁盘镜像生成器,以及跨数十个下游固件项目的供应链影响分析。

查看仓库

ELM FatFs 漏洞研究

本仓库记录了 FatFs 中六个经确认的安全漏洞,以及一个测试工具套件、模糊测试器和独立的漏洞利用磁盘镜像生成器。

原始 FatFs 源代码可在 FatFs-R0.16 目录中找到。

该项目是对 2017 年一次安全评估的回顾,当时通过手动审计和多日模糊测试在 FatFs 驱动中发现了一些基础但无趣的漏洞。九年后,即 2026 年 3 月,我们使用 Visual Studio Code、GitHub Copilot(自动模式)和一些基本提示重新审视了该项目,没有使用任何特定的循环、工具或技能。结果令人惊讶——在手动审计中忽略的漏洞变得易如反掌,因为 LLM 自动构建了一个带有新颖输入的模糊测试器。这项工作不仅发现了有趣的漏洞,还自动化了针对不同嵌入式开发场景的可利用性验证过程。

请参阅以下文件以获取详细说明:

  • 00_INITIAL.md:初步调查与发现
  • 01_PROJECTS.md:项目枚举与 FatFs 版本调查
  • 02_CRITICAL.md:高影响项目分析

什么是 FatFs?

FatFs 是由 ChaN(elm-chan.org)用 C 语言编写的一个可移植、免版税的 FAT/exFAT 文件系统库。它专为资源受限的嵌入式系统设计,不依赖操作系统,通常直接编译进固件。它支持 FAT12、FAT16、FAT32 和 exFAT,以及可选的 LFN(长文件名)和 GPT 分区支持。

由于 FatFs 体积小、自包含且许可宽松,它已成为微控制器固件中 FAT 实现的事实标准。该库直接以原始形式被嵌入官方 SDK、RTOS、引导加载程序和应用程序框架中——这意味着单个上游漏洞会传播到每一个复制了 ff.c 的下游项目。

主要项目

以下项目已被确认捆绑了存在漏洞的 FatFs 版本。完整的分析、每个项目的传播路径以及安全联系信息请参阅 02_CRITICAL.md。

项目星标数FatFs 版本漏洞
espressif/esp-idf17,655R0.16CVE-2026-6682
STMicroelectronics/stm32-mw-fatfs所有 STM32CubeR0.15 w/p2CVE-2026-6682, CVE-2026-6683, CVE-2026-6686, CVE-2026-6687
zephyrproject-rtos/zephyr14,820R0.16CVE-2026-6683, CVE-2026-6687, CVE-2026-6688
micropython/micropython21,583R0.13c (2019)CVE-2026-6682, CVE-2026-6683, CVE-2026-6684, CVE-2026-6686, CVE-2026-6687
ArduPilot/ardupilot14,743R0.14bCVE-2026-6682, CVE-2026-6683, CVE-2026-6686, CVE-2026-6687
RT-Thread/rt-thread11,862R0.16CVE-2026-6683, CVE-2026-6686
nodemcu/nodemcu-firmware7,903不定CVE-2026-6688
RIOT-OS/RIOT5,701R0.15CVE-2026-6682, CVE-2026-6683, CVE-2026-6686, CVE-2026-6687
ARMmbed/mbed-os4,837R0.14bCVE-2026-6682, CVE-2026-6683, CVE-2026-6686
sbabic/swupdate1,780R0.16CVE-2026-6683
rsta2/circle2,222待定CVE-2026-6684
hugen79/NanoVNA-H695R0.15CVE-2026-6683
ChibiOS/ChibiOS833不定CVE-2026-6688
Samsung/TizenRT643R0.16CVE-2026-6683, CVE-2026-6688
adafruit/tinyuf2447待定CVE-2026-6684, CVE-2026-6686
grblHAL/Plugin_SD_card475R0.16CVE-2026-6688
JcZou/StarryPilot315R0.16CVE-2026-6688
KeystoneHQ/keystone3-firmware199R0.16CVE-2026-6682
flysight/flysight44不定CVE-2026-6682, CVE-2026-6688
eugene-tarassov/vivado-risc-v1,061待定CVE-2026-6684

CVE 摘要

CVE ID简短标题CWE
CVE-2026-6682FAT32 卷挂载中的整数溢出CWE-190: 整数溢出或回绕
CVE-2026-6683exFAT 同步中的除零错误CWE-369: 除零错误
CVE-2026-6684GPT 分区扫描中的无限循环CWE-835: 循环不可达退出条件
CVE-2026-6686在 Seek 超过文件末尾后使用未初始化的簇CWE-908: 使用未初始化的资源
CVE-2026-6687通过未限制的 exFAT 卷标长度导致的栈缓冲区溢出CWE-121: 基于栈的缓冲区溢出
CVE-2026-6688通过无界 LFN 文件名复制导致的缓冲区溢出CWE-120: 未检查输入大小的缓冲区复制

攻击者价值

FatFs 没有 CVE 历史、没有安全邮件列表、也没有补丁通知机制。每个将 ff.c 嵌入的下游项目必须独立发现、分类并修补这些漏洞,通常甚至不知道自身受到影响。这意味着从公开披露到广泛修复的时间窗口将以年计,而非以天计。因此,实际攻击面并非单个软件应用程序或服务,而是跨越数十个独立代码库的数千万台设备,其中许多设备永远不会收到补丁。

典型的攻击场景是恶意 SD 卡:攻击者只需几秒钟的物理接触,便可更换设备(从消费级相机到无人机,从 3D 打印机到成千上万的其他产品系列)中的存储介质。该漏洞集中的每一个漏洞都可以通过挂载精心构造的 FAT 镜像来触发,而这一过程在插入时几乎总是自动发生,无需用户交互。尽管如此,物理接触并非唯一途径。

那些从网络源摄入 FAT 格式更新包的设备(如 OTA 更新框架和拖放式引导加载程序更新)容易受到任何能够向更新管道投递恶意镜像的攻击者攻击。供应链攻击、在明文 HTTP 更新流上的中间人注入,或在爱好者固件分发门户上发布的恶意镜像,都是可能的攻击方式。在任何缺乏端到端认证完整性验证(在调用 FatFs 挂载更新容器之前)的设备上,OTA 路径完全远程可达。

按 CVE 划分的攻击者价值

CVE-2026-6682 - 整数溢出导致攻击者控制的读取长度

通过构造一个特定字段设置为溢出值的 FAT32 卷,攻击者可以导致受害设备将一个攻击者选择的字节数(来自攻击者选择的源)读入固定缓冲区——这是代码执行的直接路径。在裸金属嵌入式目标上,该利用是确定性的,无需堆喷射、暴力破解或信息泄露作为前提条件。

攻击者需要控制目标将要挂载的 FAT 卷。对于大多数设备,这意味着物理接触以更换 SD 卡。接受网络固件更新,或仅在 FatFs 解析后才信任更新包完整性的设备,可远程利用。

CVE-2026-6683 - exFAT 同步中的除零错误

能够向运行 R0.16 之前版本 FatFs 的设备投递精心构造的 exFAT 卷的攻击者可以保证在后续任何写入时触发崩溃。FatFs R0.16 添加了一个部分挂载时防护,可能在写入发生前拒绝构造的卷,但底层的算术缺陷并未完全修复。对于通过写入 FAT 格式介质应用 OTA 固件更新的设备,成功触发成为一次性远程变砖:更新过程在写入中途崩溃,设备可能无法恢复,除非物理接触硬件调试器。

攻击者需要目标挂载其控制的 exFAT 卷,然后执行任何写入或同步操作。恶意 SD 卡场景覆盖了大多数嵌入式设备;对于远程利用,目标的 OTA 管道必须接受并挂载攻击者提供的镜像,而不首先验证其完整性。

CVE-2026-6684 - GPT 分区扫描中的无限循环

提供一个单个字段设置为最大值的 GPT 磁盘镜像会导致目标循环读取磁盘扇区,直到电源被断开。对于没有看门狗的引导加载程序和裸金属固件,这是一个永久性变砖:设备永远无法完成启动。该漏洞已在 FatFs R0.16 中修复,因此仅影响使用旧版本发布版的设备。

攻击者需要目标挂载其控制的 GPT 格式化磁盘,并且目标必须运行支持 64 位 LBA 的 R0.16 之前版本的 FatFs 构建。请注意,引导加载程序在此处是最具吸引力的目标,恰恰因为它们通常没有看门狗,也没有恢复路径。

CVE-2026-6686 - 在 Seek 超过文件末尾后可读的陈旧簇数据

当通过 Seek 超过文件末尾来扩展文件时,FatFs 不会将新分配的存储清零。先前写入这些扇区的任何数据(来自已删除的文件)都可以被打开该扩展文件的下一个进程读取。在通过 OTA 暂存区循环固件镜像的设备,或在引导加载程序和应用程序之间共享 SD 卡的设备上,这可能将先前的固件二进制文件、密钥或其他敏感内容暴露给低权限的读取者。

攻击者需要能够读取目标 FAT 卷上通过 Seek 操作扩展的文件。这主要是本地或物理接触场景。

CVE-2026-6687 - 通过 exFAT 卷标溢出导致的栈缓冲区溢出

提供一个带有超长卷标的 exFAT 卷会导致 FatFs 在应用程序调用 f_getlabel() 时溢出调用者的标签缓冲区。ST 的 STM32CubeMX 代码生成器在其生成的每个启用 FatFs 的项目中都使用了易受攻击的缓冲区大小,这意味着该漏洞存在于大量且大部分未编目的商业 STM32 固件中。在没有栈保护或 ASLR 的裸金属 Cortex-M 设备上(常见情况),这是一个一次性代码执行原语。

攻击者需要目标挂载其控制的 exFAT 卷,然后调用 f_getlabel()。FatFs 库不会内部调用此函数——应用程序必须显式调用。大多数项目在自身的挂载时初始化中会这样做,在实践中对于这些项目无需攻击者进一步交互。

CVE-2026-6688 - 通过目录列表中的长 LFN 文件名导致的缓冲区溢出

通过在 FAT 目录中放置一个长文件名文件,攻击者可以在调用应用程序遍历目录时溢出用于存储该名称的缓冲区。溢出量与文件名长度成正比,最多可达 255 字节。该漏洞存在于调用代码中,而非 FatFs 自身,因此影响因目标而异——但任何遍历目录并将文件名复制到固定大小缓冲区且不检查长度的应用程序都会受到影响。

攻击者需要目标遍历其控制的 FAT 卷上的目录。不需要 exFAT;此漏洞适用于 FAT12、FAT16 和 FAT32。必须在 FatFs 配置中启用长文件名支持,而这是每个主要发行版中的默认和推荐设置。

漏洞详情

在 FatFs R0.16 及更早版本中发现了六个不同的错误。

CVE-2026-6682 - FAT32 整数溢出在 mount_volume() 中 → 攻击者控制的 finfo.fsize

位置: ff.c mount_volume() - fasize *= fs->n_fats

当 BPB_FATSz32 被构造为产生一个较大值时,会发生 DWORD 乘法溢出。当 BPB_FATSz32 = 0x80000001 且 NumFATs = 2 时:```c fasize = 0x80000001; fasize *= 2; // DWORD overflow → 0x00000002

截断的 `fasize` 导致 `fs->database`(数据区起始位置)落入 FAT 区域。控制磁盘镜像的攻击者可以在重叠扇区放置伪造的目录项,使 `f_stat()` 返回攻击者控制的 `finfo.fsize`。任何调用 `f_read(fp, buf, finfo.fsize, &br)` 但未对计数进行 `sizeof(buf)` 边界限制的应用程序,都会导致目标缓冲区被完全由攻击者控制的字节溢出——这是通向 RCE 的直接路径。

**最坏影响:** 在从 FatFs 读取文件大小并将其用作读取长度的任何嵌入式设备上,可实现远程代码执行(堆或栈溢出)。

---

### CVE-2026-6683 - `sync_fs()` 中的除零错误(exFAT)

**位置:** `ff.c` `sync_fs()` - `(n_fatent - 2 - free_clst) * 100 / (n_fatent - 2)`

当 `BPB_NumClusEx = 0` 时,`n_fatent = 2`,使得除数 `(n_fatent - 2) = 0`。在对精心构造的 exFAT 卷执行任何写入或同步操作时都会触发此问题,产生 SIGFPE / 硬件故障并导致目标崩溃。

FatFs R0.16 在挂载时部分地对此进行了防护(当 `NumClusEx = 0` 时,位图簇验证失败)。旧版本——R0.14b(ArduPilot、Mbed OS)、R0.15(RIOT OS、STM32)、R0.13c(MicroPython)——没有此类防护,会无条件崩溃。

**最坏影响:** 对精心构造的 exFAT 卷进行任何写入操作时,导致拒绝服务/系统崩溃。在 OTA 更新期间,这可能会使设备变砖。

---

### CVE-2026-6684 - `find_volume()` 中无限制的 GPT 分区扫描循环(R0.16 之前)

**位置:** `ff.c` `find_volume()` - `for (i = 0; i < n_ent; i++) disk_read()`
下载工具