CVE-2023-53537CVE-2023-53537是Linux内核f2fs(Flash-Friendly File System)文件系统中存在的一个高危释放后使用(Use-After-Free)漏洞。该漏洞由xfstest工具集中的generic/019测试用例发现,触发时会在mm/filemap.c:1619处引发内核BUG,调用链涉及folio_end_writeback、end_page_writeback、f2fs_write_end_io、bio_endio等多个核心I/O路径函数。漏洞的根因在于:当cp_error(checkpoint错误标志)被设置后,f2fs_write_single_data_page()函数中的f2fs_submit_merged_ipu_write()尝试刷新缓存中的IPU(In-Place Update,原地更新) bio时,缺少对@bio参数有效性的检查。这导致函数可能提交属于其他IO上下文的随机缓存bio,从而引发释放后使用问题。该漏洞CVSS评分为7.8,属于高危级别,攻击者只需本地低权限访问即可触发,可能导致内核崩溃(拒绝服务)或权限提升,对系统的机密性、完整性和可用性均造成严重影响。该漏洞影响多个Linux内核稳定版本,官方已通过多个补丁提交进行了修复。
该漏洞的技术原理如下:
1. **漏洞触发路径**:在f2fs文件系统的写回路径中,当执行f2fs_write_single_data_page()时,会调用f2fs_submit_merged_ipu_write()来合并并提交IPU写操作。该函数负责将多个小的原地更新操作合并到一个bio(块I/O请求结构体)中提交。
2. **根因分析**:f2fs_submit_merged_ipu_write()函数在处理缓存的IPU bio时,没有对传入的@bio参数进行有效性验证。具体来说,当cp_error标志被设置后,f2fs可能进入错误处理路径,但此时缓存中的bio可能已经被释放或属于其他IO上下文。函数仍然尝试提交这个无效的bio,导致对已释放内存的访问。
3. **崩溃机制**:当无效的bio被提交后,bio_endio回调链会调用f2fs_write_end_io(),进而调用end_page_writeback()和folio_end_writeback()。由于folio(页面)可能已经被释放或回收,在folio_end_writeback()中触发mm/filemap.c:1619的BUG检查,导致内核panic。
4. **利用方式**:攻击者作为本地低权限用户,可以通过以下方式触发:创建并写入大量小文件触发IPU合并路径,同时通过制造I/O错误(如磁盘故障模拟)设置cp_error标志,使代码进入错误处理路径,从而触发对无效bio的提交。