FAT12 文件截断漏洞

主要观点:作者研究 FAT12 和 FAT16 文件系统以改进 NetDrive 代码时发现从 DOS 2.x 升级到后期版本时可能导致有效文件被截断的 bug,详细介绍了该 bug 出现的条件(磁盘使用 FAT12、有 4078 或更多数据簇、文件使用簇号 0xFF0、用 DOS 3.2 或更早写入文件后用 DOS 3.3 或更晚读取)、文件系统的工作原理(如文件由簇组成,FAT 表跟踪簇的使用情况等)、关于 FAT12 最大簇数的不同说法及来源(从 4085 到 4078 不等)、MS-DOS 4.0 源代码中的神秘注释(提及 0xFF0 为 FAT12 的链结束标记)、媒体描述字节的相关信息、FAT 的设计特点及可能导致的问题、演示 bug 的硬盘镜像创建过程及在不同 DOS 版本下文件被截断的情况等,最后总结安全的 FAT12 最大簇数可能为 4078 簇,虽该 bug 出现条件特定但仍会给用户带来困扰。
关键信息:

  • 1986 年 8 月 27 日引入 bug,可能存在于 3.3 版及以后的 DOS 中。
  • FAT12 中 0 和 1 保留,0xFF7 为坏簇标记,0xFF8 及以上为链结束标记,0xFF0 到 0xFF6 后期被认为保留。
  • MS-DOS 4.0 源代码中关于 0xFF0 的注释及相关处理逻辑。
  • 演示 bug 的硬盘镜像创建及在不同 DOS 版本下的测试结果。
    重要细节:
  • 不同来源对 FAT12 最大簇数的说法及差异。
  • 演示 bug 的硬盘镜像创建步骤及各阶段 FAT 表的状态。
  • CHKDSK 在不同 DOS 版本下对截断文件的检测情况。
阅读 9
0 条评论