SuperAPI AI 工具集

php-filesystem-audit

安全与审计

查看项目

更新于 10-15 10:42

技能介绍

用途

php-filesystem-audit 用于分析 PHP 项目中对文件系统的关键操作,特别关注这些操作如何与路径校验/归一化失败(目录遍历、basePath 缺失)、落点写入/读取/包含链路、写后触发(可执行性、可包含性)以及竞争条件(TOCTOU)发生联动,从而提升真实利用可能性。

主要能力

覆盖范围包括:

  1. 创建/目录操作:mkdir($path, $mode, $recursive)、rmdir($path)、touch($path)、tmpfile()/tempnam(),以及框架封装的目录创建(如 Storage::put/ensureDirectory 的底层封装,若识别得到)。

  2. 权限/所有权变更(常用于提权链或绕过执行策略):chmod/chown/chgrp、umask。

  3. 链接与重定向落点(常见 symlink/hardlink 绕过):symlink($target, $link)、link($target, $link)、readlink($path)。

  4. 删除与清理(结合 TOCTOU 或覆盖链):unlink($path)、unlink/rename 变体删除、rename($src, $dest)(用于落点变更时需特别关注 TOCTOU)、copy/move 变体(当作为“落点准备步骤”出现)。

  5. 路径竞态与 TOCTOU(必须单独审计):对“检查-使用分离”的代码模式给出判定,包括是否存在 if (realpath/canonicalize + 前缀校验) 后又在某个分支/异常处理里重复 join/open/write(路径可能变化);是否存在先判断可写/再写入、先检查再执行文件操作;是否存在符号链接解析/不一致解析(检查时与实际打开时 resolved path 不一致)。

使用方式

每条发现必须包含:位置证据(文件路径与函数/调用点,尽量带行号;找不到行号则标注待定位)、操作类型(创建/权限/链接/删除/重命名/拷贝等)、路径控制来源(路径参数来自 GET/POST/SESSION/配置还是硬编码)、跟链路的关系(必须至少选一条说明:与 WRITE/UPLOAD 落点可执行性或可包含性关联;与 FILE(读取/包含)或 ARCHIVE(解压落点)关联;与鉴权/资源归属关联;与 TOCTOU 竞态关联)、可利用性判断(✅ 已确认 / ⚠️ 待验证 / ❌ 不可利用 / 🔍 环境依赖)。

可触发性约束:仅对“能够被具体 HTTP 路由/入口触发”的文件系统操作生成漏洞条目,并且必须能提供真实路由与完整参数用于 PoC。若无法定位具体路由入口(如纯后台任务/定时任务/命令行工具且入口不可追踪),该 FS 风险只能在报告中标注“未能定位入口,跳过条目生成(待人工补齐触发路径)”,不得仍按漏洞条目模板强行输出不可执行 PoC。

报告输出到:{output_path}/vuln_audit/fs_{timestamp}.md。漏洞编号规范:{C/H/M/L}-FS-{序号},详见 shared/SEVERITY_RATING.md。

漏洞条目模板(强制)包含:严重等级、可达性 (R)、影响范围 (I)、利用复杂度 (C)、可利用性、位置;数据流链(Source → Path Control → FS Operation → Chain Influence);可利用前置条件(鉴权要求、输入可控性、触发条件、链路承接);验证 PoC(强制:可观测验证框架,含 HTTP 请求与观察点);证据引用(强制:来自源码片段,至少三段);建议修复;代码搜索语句(强制)。

代码搜索语句示例:

rg -n "(mkdir\(|rmdir\(|touch\(|tmpfile\(|tempnam\(|chmod\(|chown\(|chgrp\(|symlink\(|readlink\(|link\(|unlink\(|rename\(|copy\(|symlink\())" . rg -n "(realpath\(|canonicalize\(|dirname\(|basename\(|baseDir|dest(path)?|target(path)?)" .

适用场景

适用于对 PHP 项目进行安全审计,尤其是需要评估文件系统操作在路径校验绕过、写入链利用、权限提升、符号链接绕过及 TOCTOU 竞态条件中的实际可利用性时。

限制

该工具不替代 FILE/UPLOAD/WRITE 等 sink 子审计,仅提供“可利用性增强证据”。仅对能够被具体 HTTP 路由/入口触发的文件系统操作生成漏洞条目;无法定位入口的风险需人工补齐触发路径。

修复建议要点

路径校验与实际使用必须绑定到同一个 resolved target:realpath/canonicalize 后用同一个值进行 open/rename/write(避免 TOCTOU)。禁止对可被攻击者影响的路径进行“先校验后使用”的拆分;若必须拆分,应在同一系统调用/同一文件描述符上下文内完成。对 symlink/hardlink:在目标落点启用防链接策略(平台支持时禁用跟随符号链接,或基于 inode/文件描述符校验一致性)。权限变更必须最小化并确保不可由用户影响;避免攻击者能控制 chmod/chown 的路径。