规避工作流程的测试
ID |
---|
WSTG-BUSL-06 |
总结
工作流漏洞涉及任何类型的漏洞,这些漏洞允许攻击者以某种方式滥用应用程序/系统,从而允许他们规避(而不是遵循)设计/预期的工作流。
维基百科上的工作流定义:
工作流由一系列连接的步骤组成,其中每个步骤都无延迟或间隔地进行,并在后续步骤开始之前结束。它是对一系列操作的描述,声明为个人或小组的工作、员工组织或一个或多个简单或复杂的机制。工作流可以被视为实际工作的任何抽象。
应用程序的业务逻辑必须要求用户以正确/特定的顺序完成特定步骤,如果工作流在未正确完成的情况下终止,则所有操作和生成的操作都将被“回滚”或取消。与规避工作流或绕过正确的业务逻辑工作流相关的漏洞是独一无二的,因为它们非常特定于应用程序/系统,必须使用需求和用例来开发谨慎的手动误用案例。
应用程序业务流程必须进行检查,以确保用户的事务/操作以正确 / 可接受的顺序进行,如果事务触发了某种操作,则该操作将被 “回滚” 并在事务未成功完成时被删除。
示例 1
我们中的许多人在从杂货店和加油站购物时都会获得某种类型的“俱乐部/忠诚度积分”。假设用户能够开始与他们的账户相关联的交易,然后在将积分添加到他们的俱乐部/忠诚度账户后取消交易或从他们的“购物篮”中删除商品并招待。在这种情况下,系统要么在投标之前不将积分/积分应用于账户,要么如果积分/积分增量与最终投标不匹配,则应“回滚”积分/积分。考虑到这一点,攻击者可以开始交易并取消它们以建立他们的积分水平,而无需实际购买任何东西。
示例 2
可以设计一个电子公告板系统,以确保初始帖子不包含基于帖子被比较的列表的亵渎性语言。如果在用户输入的文本中找到拒绝列表中的单词,则不会发布提交。但是,一旦提交被发布,提交者就可以访问、编辑和更改提交内容,以包含包含在亵渎/拒绝列表中的词语,因为在编辑时,该帖子永远不会再次被比较。请记住这一点,攻击者可能会打开一个初始空白或最小讨论,然后添加他们喜欢的任何内容作为更新。
测试目标
- 查看项目文档,了解可以跳过或按与预期业务逻辑流不同的顺序完成应用程序流程中步骤的方法。
- 开发一个误用案例,并尝试规避已识别的每个 logic flow。
如何测试
测试方法 1
- 通过应用程序启动一个事务,越过触发用户帐户的积分/积分的点。
- 取消交易或减少最终投标,以便降低积分值,并检查积分/信用系统以确保记录了正确的积分/信用。
测试方法 2
- 在内容管理或公告板系统上,输入并保存有效的初始文本或值。
- 然后尝试附加、编辑和删除会使现有数据处于无效状态或具有无效值的数据,以确保不允许用户保存不正确的信息。一些“无效”数据或信息可能是特定词语(亵渎性语言)或特定主题(例如政治问题)。
相关测试用例
- 测试目录遍历/文件包含
- 测试绕过授权架构
- 测试绕过会话管理架构
- 测试业务逻辑数据验证
- 测试伪造请求的能力
- 测试完整性检查
- Process Timing 测试
- 测试函数可以使用的次数限制
- 测试应用程序滥用的防御措施
- 测试上传意外文件类型
- 恶意文件测试上传
修复
应用程序必须具有自我意识并进行检查,以确保用户以正确的顺序完成工作流程中的每个步骤,并防止攻击者规避/跳过/或重复工作流程中的任何步骤/流程。工作流漏洞测试涉及开发业务逻辑滥用/误用案例,目标是成功完成业务流程,但没有按正确的顺序完成正确的步骤。