禁用外部实体本身并不能保护报表处理器免受每个资源耗尽输入的影响。压缩附件可以在 XML 解析器启动之前展开,深度嵌套或过大的 XML 可能会消耗资源而无需访问外部实体。将解压缩、XML 解释和工作负载接纳视为单独的防御边界。
RFC 9990 明确识别归档和 XML 资源耗尽风险。 OWASP 的 XML 指南解释了为什么特定于解析器的外部资源控制很重要。这里的测试设计是一个操作建议,用于在隔离的暂存环境中验证这些边界。
定义绝对不能发生的事情
参考: RFC 9990 §8.1.
工作人员不应获取附件选择的网络资源、通过 XML 解析读取应用程序机密、写入存档提供的路径或消耗无限的 CPU、内存或磁盘。为其提供最少的文件系统访问权限,并且不要进行不必要的网络访问。使用带有合成金丝雀的一次性测试环境,而不是生产秘密。
为压缩输入、扩展输出、解析时间、嵌套、文本长度和同时作业设置可观察的限制。记录每个限制的实施地点。最终导入周围的超时无法保护早期的无限制解压步骤。
直接检查 XML 功能
配置实际的解析器和任何模式验证或转换层。禁用不必要的 DTD 处理、外部实体、Xinclude 和外部资源加载。将不受支持的安全设置视为配置失败。如果稍后的验证阶段获取输入选择的模式,则可能会破坏安全的解析器设置。查看整个处理链,而不仅仅是其第一个库调用。
使用一个微型夹具,其中包含受控测试哨兵的外部参考。根据记录的策略,预期行为是拒绝或安全的非解决方案,没有哨兵访问权限。记录网络和文件访问遥测。不要将测试引用指向您无法控制的敏感本地文件或外部服务。
绑定无害扩展测试
参考: RFC 9990 §8.1.
对于减压,使用少量的合成内容并故意降低分期阈值。对于 XML,使用有界嵌套或内部扩展装置来触发类似的低限制。没有必要制造一颗真正巨大的炸弹来确定边界的执行。
说明性案例:测试工作线程具有 256 KiB 扩展字节上限和一秒的处理截止时间。 300 KiB 合成扩展流应在字节边界处停止。单独的微小外部参考夹具不应导致任何查找。通过一个案例并不能证明其他边界有效。阈值是说明性的,实际记忆和经过的时间必须被测量而不是假设。
验证故障遏制
对于每个被拒绝的夹具,断言没有提交部分报告记录,没有出现未经批准的输出文件,并且诊断包含安全输入参考和原因。诊断大小也受到限制,因为将整个被拒绝的文档复制到日志中会产生另一种资源和隐私风险。
接下来提交一份有效的小报告。检查队列处理是否恢复,临时文件是否在批准的策略内清理,并且重播不会创建重复计数。在安全测试预算内执行并发到达,以便测试总工作人员限制以及每个文件限制。
使测试证据可重复
参考: RFC 9990 §8.1, RFC 9990 §9.2.
保留固定装置哈希、解析器和运行时版本、配置、限制、预期结果和测量结果。在依赖项、解析器、容器或验证更改后重复此操作。如果测试无法观察外部访问或内存使用,请将该部分标记为未经验证,而不是声明管道安全。
拒绝证明特定输入在测试配置中遇到了特定边界。它并不能证明所有可能的恶意文档都是无害的。结合重点固定装置、审查配置、隔离和监控,并在任何边界出现故障时维护所有者进行跟进。
审查包仅执行小型有界解压演示和语义模型。上述外部引用、内存隔离、并发工作人员和实际数据库包含测试仍然是验收要求,而不是已完成的测试。