### 漏洞概述 - **漏洞名称**: Potential thread stack overflow in main #4332 - **漏洞类型**: 线程栈溢出 - **漏洞描述**: 在 `flipperzero-firmware` 项目中,`main` 线程函数存在潜在的栈溢出风险。具体表现为 `main` 线程分配的栈大小为 1024 字节,但在某些详细配置下,实际需要的栈空间可能达到 1464 字节。 ### 影响范围 - **受影响组件**: `flipperzero-firmware` 项目中的 `main` 线程 - **具体场景**: 在 `cc.scons` 配置文件中添加 `-ffstack-usage` 选项后,通过构建 `flipperzero-firmware` 项目,可以检测到 `main` 线程的栈使用情况。在某些详细配置下,`main` 线程的栈使用量可能超过 1024 字节,导致栈溢出。 ### 修复方案 1. **增加栈大小**: - 修改链接器脚本 `targets/FF/stm32wb55xx_flash.ld`,将 `main` 线程的栈大小从 1024 字节增加到 2048 字节。 ```ld /* Change from: */ _stack_size = 1024; /* To: */ _stack_size = 2048; ``` 2. **优化代码结构**: - 重构 `flipper_update_process_manifest` 路径,减少其 920 字节的栈帧大小。 - 将 `update_manifest_init_mm` 结构体从栈上分配改为堆上分配。 3. **STM32WB55 考虑**: - 由于 MCU 有 256KB SRAM,将 `main` 线程栈增加到 2048 字节是可行的,且成本较低。 ### POC 代码 - **POC 代码**: ```ld /* Change from: */ _stack_size = 1024; /* To: */ _stack_size = 2048; ``` ### 其他信息 - **CVE ID**: CVE-2026-30363 - **作者**: k6dpvmm8-glitch - **评论者**: bad-antics, herbenderbier