探索

越权访问漏洞

时间:2010-12-5 17:23:32  作者:时尚   来源:时尚  查看:  评论:0
内容摘要:2019年,某电商平台的安全团队在例行巡检时发现了一个奇怪现象:一个普通用户的账号,竟然能通过修改URL里的订单ID,查看到别人的收货地址和手机号。问题出在后端接口——它只校验了用户是否登录,却没校验

2019年,越权某电商平台的访问安全团队在例行巡检时发现了一个奇怪现象:一个普通用户的账号,竟然能通过修改URL里的漏洞订单ID,查看到别人的越权收货地址和手机号。问题出在后端接口——它只校验了用户是访问否登录,却没校验这个订单到底属不属于当前用户。漏洞这就是越权最典型的越权访问漏洞。

说白了,访问越权访问就是漏洞系统没把"你是谁"和"你能干什么"这两件事对上号。你登录了,越权系统知道你是访问张三,但张三能不能看李四的漏洞数据?很多系统在这里偷懒了。

越权分两种。越权一种是访问水平越权,跟你同级别的漏洞用户之间互相越界。比如上面说的订单查询,大家权限一样,但你不该看我的订单。另一种是垂直越权,低权限用户干了高权限的事。普通用户通过某个接口直接调用了管理员才能执行的操作,比如删除文章、修改配置。

这两种越权,本质上是同一个问题:权限校验缺失或不到位。

为什么会出这种漏洞?

我观察下来,原因通常不复杂。开发阶段,前端做了权限控制——普通用户看不到"删除"按钮,管理员才看得到。看起来没问题。但攻击者压根不走前端,直接用工具构造HTTP请求,绕过界面直接打后端接口。后端如果没有独立做权限判断,就裸奔了。

还有一种常见情况:接口太多,开发人员漏了。一个系统几百个API,每个都要写权限校验逻辑,总有几个被遗忘。尤其是那些后期迭代加上的接口,或者内部使用的接口不小心暴露到公网。

更隐蔽的是ID可预测。用户ID是自增的,1、2、3、4……攻击者把URL里的/user/1001/profile改成/user/1002/profile,就能遍历所有人的资料。如果ID是UUID这种随机字符串,难度会大很多,但也不是绝对安全——如果接口本身不校验归属关系,拿到UUID照样能越权。

真实场景里的破坏力

越权漏洞的杀伤力取决于它暴露了什么。查看类越权,泄露的是数据——用户信息、订单记录、聊天内容。操作类越权,攻击者能替别人做事——转账、发消息、改密码。2018年某社交平台就出过一次垂直越权,普通用户通过构造请求直接获得了后台管理权限,能操作所有用户的内容。

这类漏洞在OWASP Top 10里长期占有一席之地。不是因为它技术含量高,恰恰相反——它太简单了,简单到容易被忽视。不需要什么高级利用技巧,改个参数就行。但影响面可以非常大。

怎么防

核心原则一句话:每一次请求,后端都要独立判断当前用户有没有权限操作目标资源。

具体做法上,我倾向于这几点。所有涉及资源的接口,必须校验资源归属——这个订单是不是你的,这条评论是不是你发的。管理类接口,必须单独做角色校验,不能依赖前端隐藏入口。资源ID尽量用不可预测的值,虽然这只是增加难度,不能替代权限校验。还有就是写测试用例,用低权限账号去请求高权限接口,看能不能成功。

有个细节容易被忽略:批量接口。比如批量删除,攻击者可能在请求体里混入不属于自己的资源ID。如果后端只校验了第一个ID的权限,后面的就漏了。

越权漏洞不酷,不像SQL注入那样有"技术感",也不像XSS那样能弹窗。它就是老老实实地检查每一个请求。但正是这种枯燥的重复劳动,很多团队没做到位。安全这件事,往往不是败在攻防对抗的 sophistication 上,而是败在基本功。

最近更新
热门排行
copyright © 2026 powered by 烟消火灭网   sitemap