CSRF来袭

简介: 最近收到了一份安全漏洞警告--用户账户恶意劫持漏洞,直指我们联登中的state参数存在严重问题在之前的《常识二Oauth2.0介绍及安全防范》文章中已经说明了oauth2.0以及可能的csrf问题看来知道和做到还是有些差距,通过这篇文章再来回顾一下此次漏洞问题

最近收到了一份安全漏洞警告--用户账户恶意劫持漏洞,直指我们联登中的state参数存在严重问题

在之前的《常识二Oauth2.0介绍及安全防范》文章中已经说明了oauth2.0以及可能的csrf问题

看来知道和做到还是有些差距,通过这篇文章再来回顾一下此次漏洞问题

相关知识点

详细的说明可查看:《常识二Oauth2.0介绍及安全防范》,这儿作个简单回顾

CSRF

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为:CSRF/XSRF

oauth2.0

image.png

由于oauth2.0的交互需要好几步,所以存在跨域攻击风险

state参数

oauth2.0的提供者定义接口时,都会有一个非必选state参数

state 用于保持请求和回调的状态,授权请求成功后原样带回给第三方。该参数用于防止csrf攻击(跨站请求伪造攻击),强烈建议第三方带上该参数。参数设置建议为简单随机数+session的方式

想要防范风险,state参数值需要具备下面几个特性:

  • 不可预测性:足够的随机,使得攻击者难以猜到正确的参数值
  • 关联性:state参数值和当前用户会话(user session)是相互关联的
  • 唯一性:每个用户,甚至每次请求生成的state参数值都是唯一的
  • 时效性:state参数一旦被使用则立即失效

漏洞详情

其实我们的接口中,是有state参数的,那么为什么会有漏洞呢?

使用第三方联登,不会简单的登陆上就可以了,还需要把联登帐户绑定到正常帐户(已经有了就直接绑定,没有就注册一个新帐户)上,这应该是通用的用法了,第三方联登只是作为一种引流。

所以攻击者一般把自己的第三方帐户与受害者绑定,就可以达到窃取受害者帐户的目的

state参数的作用,只是防止了非本应用发出的认证url

image.png

张三怎么能用李四的code呢?作为oauth provider是没法知晓的,只能client通过state判别,是不是由合法client发出的

但,如果client把state给泄漏了呢?

这就是我们这次的漏洞场景之一:之前有个‘分享帐户’的功能,其实就是在个人中心中绑定自己的第三方帐户

如果攻击者在这儿把自己的authorize url给了受害者,这个url中带了合法的state参数,那这个url就是合法的,应用本身成了攻击者的帮凶。

那么对于这种情况如何防范呢?

最根本原因是我们的state参数:关联性:state参数值和当前用户会话(user session)是相互关联的,没有完美实现

一个用户的state不能给别的用户使用

用户登陆了可以使用userid与state关联

用户未登陆,可以使用用户设备号与state关联,识别url与state的关系

这样就能防范一切情况

结语

安全与监控实在是太重要了,从开发者角度讲,这个功能已经上线很久,功能正常。但从安全角度来讲,实则完全不能上线。

各个功能点,不管是开发,还是产品都可能会忽略了单个功能产生的交叉漏洞,这需要安全去监测,监控。

近期上线了个功能,功能一切正常,但在监控时发现在线上会有严重的性能问题;如果不是监控,可能这个问题会在下次搞活动时才会被发现,造成严重问题!

目录
相关文章
|
安全 NoSQL Java
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
互联网并发与安全系列教程(06) - 常见的Web安全漏洞(CSRF攻击)
122 0
|
27天前
|
存储 JSON 安全
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
2024全网最全面及最新的网络安全技巧 二 之 CSRF+XSS漏洞的各类利用技巧
|
3月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
135 5
|
5月前
|
SQL 安全 前端开发
Web安全新纪元:Python如何筑起SQL注入、XSS、CSRF的铜墙铁壁?
【7月更文挑战第26天】在Web开发中,安全性至关重要。Python提供强大工具来抵御SQL注入、XSS和CSRF等威胁。使用ORM如Django和SQLAlchemy可防SQL注入; Django等框架自动转义输出防XSS; CSRF通过自动及手动验证令牌来阻止。开发者须持续学习最新安全实践以保护用户数据。迈向Web安全新纪元,Python助你一臂之力。
39 1
|
7月前
|
前端开发 安全 JavaScript
前端安全防护:XSS、CSRF攻防策略与实战
【4月更文挑战第13天】本文探讨了XSS和CSRF攻击的类型、危害及防御方法。XSS攻击通过注入恶意脚本威胁用户安全,分为存储型、反射型和DOM型。CSRF攻击利用用户已登录状态发起恶意请求,可能导致账户状态改变和数据泄露。防御XSS包括输入验证、输出编码和启用Content Security Policy(CSP)。针对CSRF,可使用Anti-CSRF Tokens、设置SameSite Cookie属性和启用HTTPS。开发者应采取这些策略保护用户数据和网站稳定性。
933 0
|
网络安全
关于最近很火的”DDOS”攻击
什么叫DDOS攻击? DDoS攻击,全称Distributed Denial of Service Attack,即分布式拒绝服务攻击,是指处于不同位置的多个攻击者同时向一个或数个目标发动攻击,或者一个攻击者控制了位于不同位置的多台机器并利用这些机器对受害者同时实施攻击。 DDoS攻击利用分布式网络来发起大量的请求,导致目标服务器或网络资源的过载,从而使其无法正常处理请求,使目标系统瘫痪,无法正常提供服务。攻击者通常会利用多个计算机或设备的协同攻击来进行DDoS攻击,这些计算机或设备被称为“僵尸机器”。
|
安全 测试技术 数据库
与黑客的斗智斗勇-一次服务器被攻击的实录
与黑客的斗智斗勇-一次服务器被攻击的实录
152 0
|
XML Web App开发 JSON
手把手教你实现一次 CSRF 攻击
之前写过一篇 CSRF 攻击文章,介绍了定义、触发方式、防御方式,但唯独没有给出一个实现方式,今天就借这篇文章重新写出一个实现方式
|
XML 存储 前端开发
手把手教你防御 CSRF 攻击
之前已经写了两篇关于 CSRF 的文章,其中昨天的一篇手把手教你实现一次 CSRF 攻击 留下了防御的悬念,而今天这篇就是教导如何防御 CSRF 攻击
|
存储 安全 JavaScript
实战漏洞挖掘-csrf+存储selfxss漏洞组合拳
前一阵子在疯狂学习,看了很多文章,也学习到了不少,所以也尝试着去挖一挖洞,把学习到的思路引入到实际中。在挖某网站的时候,发现了一枚CSRF+存储型selfxss的漏洞组合拳成功打到cookie。
198 0