Java Web安全之程序逻辑缺陷

时间:2023-12-14 17:20:56

  Java Web程序逻辑缺陷本质是由于程序设计和开发者设计的程序执行逻辑存在某种缺陷而导致的安全隐患。企业的代码审查和渗透测试通常主要针对的大多是诸如xss攻击和sql注入和跨站点脚本这些头条式漏洞,而由于程序逻辑缺陷导致的安全问题通常被忽略,测试中也很难辨别,即使是最简单的web网站系统中也包含无数的逻辑操作,而这些程序执行逻辑经常被攻击者利用。以下描述一些web常见的程序逻辑缺陷。

  1)核心业务令牌加密算法泄漏,企业有严格安全加密需求的核心业务与普通业务加密共用一套加密算法,且通过“加解密提示漏洞”或者普通业务加解密值暴露间接泄露了核心业务的加密算法;

  2)类似订单结算等需要在按序完成多阶段请求访问之后才能实现处理的特殊功能,开发者在客户端控制下单流程,并假设所有用户均会遵循这些流程按序操作,并未在后序阶段操作前作强校验。而实际情况是攻击者通常可以利用强制浏览技术手段跳过前一个阶段页面的导航直接在未支付的情况下进行下单结算;

  3)密码修改,普通用户密码修改与管理员修改普通用户密码共用一个接口,且接口逻辑通过客户端提交的请求参数判断用户类型,例如普通用户需输入旧密码,新密码以及确认密码,而管理员修改用户密码只需输入新密码,这将可能导致普通用户可以修改任意其他用户的密码进而获取他们的账号信息;

  4)由于程序逻辑设计问题,用户通过身份认证验证之后可通过访问其他接口修改会话中个人的身份信息为其他用户,进而提升普通用户的水平和垂直权限。在一个需要隔离水平与垂直权限的场景开发者与测试人员尤其需要注意由于访问接口导致的“用户状态信息累积”引起的应用程序行为变化,并评估这种变化可能带来的风险。