失效的对象级别授权指未对通过身份验证的用户实施恰当的访问控制。攻击者可以利用这些缺陷访问未经授权的功能或数据(直接的对象引用或限制的URL)。例如:访问其他用户的帐户、查看敏感文件、修改其他用户的数据、更改访问权限等。
在发送的请求中改变对象的ID
/shops/{shopName}/revenue_data.json 通过遍历URL中的{shopName},攻击者获取到不同商户的销售数据。
通过监控可穿戴设备的网络流量,其HTTP PATCH请求中的自定义请求头中存在字段: X-User-Id: 54796。通过替换X-User-Id字段的值为54795,攻击者接收到成功的HTTP响应,并可以修改其他用户的账户数据。
用户身份认证过程中出现的安全问题,如弱口令、明文存储、弱加密、密码爆破、GET方式传输令牌和密码、认证绕过等。
API接口被调用时返回了大量数据,很多数据可能都是不必要的,应将用户看到的内容范围限制为必需内容。
API接口未对客户端/用户可以请求的资源大小或数量施加任何限制。这不仅会影响API服务器的性能,从而导致拒绝服务(DoS),而且还为诸如暴力破解之类的身份验证漏洞敞开了大门。
攻击者利用漏洞将合法的API调用发送 给他们不应访问的API 端点。这些端点可能会暴露给匿名用户或常规的非特权用户。由于API更加结构化,并且更易于预测访问API的方式,因此更容易发现API中的这些缺陷(如,将HTTP方法从GET替换为PUT,或将URL中的 “用户”字符串更改为“管理员”)。
在仅允许受邀用户加入的应用程序注册过程中,移动应用程序将触发对GET /api/invites/ {invite_guid}的API调用。响应包含一个JSON,其中包含有关邀请的详细信息,包括用户的角色和用户的电子邮件。攻击者复制了请求,并修改“role”值为admin,向/api/invites/new发出POST请求。管理员只能使用管理控制台访问该端点,
该控制台未实现功能级别的授权检查。攻击者利用此问题并向自己发送邀请以创建管理员帐户:
POST /api/invites/new {“email”:”hugo@malicious.com”,”role”:”admin”}
后端应用对象可能包含许多属性,其中一些属性可以由客户端直接更新(如,user.firstname或user.address),而某些属性则不应该更新(如,user.isvip标志)。
一个乘车共享应用程序为用户提供了编辑个人资料基本信息的选项。用户可以更新“user_name”、“age”两个参数。
PUT /api/v1/users/me {"user_name":"inons","age":24}
发现/api/v1/users/me接口返回一个附加“credit_balance”参数:
GET /api/v1/users/me {"user_name":"inons","age":24,"credit_balance":10}
攻击者构造报文,重放第一个请求:
PUT /api/v1/users/me {"user_name":"attacker","age":60,"credit_balance":99999}
攻击者无需支付即可篡改自己的信用值。
安全配置错误可以发生在一个应用程序堆栈的任何层面,包括平台、Web服务器、应用服务器、数据库、框架和自定义代码。
服务端未对客户端提供的数据进行验证、过滤或净化,数据直接使用或者拼接到SQL/NoSQL/LDAP查询语句、 OS命令、XML解释器和ORM(对象关系映射器)/ODM(对象文档映射器)中,产生注入类攻击。
判断服务端是否支持XML解析,如果支持,可以尝试XML注入。
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE Anything [ <!ENTITY entityex SYSTEM "file:///etc/passwd"> ]> <abc>&entityex;</abc>
API未对来自外部系统(如,集成系统)的数据进行验证、过滤或净化。
资产管理存在问题,如暴露测试接口地址、未下线旧版本接口。
旧版本或者存在漏洞版本的API接口未下线,在没有打补丁的情况下持续运行。如:api.someservice.com/v2,将URL中的v2替换为v1使攻击者能够利用旧版本的API接口发起攻击 ;
测试接口对公网开放;
非生产API接口而使用生产数据;