0x01 Cookie的前世今身

Cookie指某些网站为了辨别用户身份而储存在用户本地客户端上的数据。

因为HTTP协议是不保存用户状态的,这使得用户在交互式的web应用中体验非常差。

在一个网上购物的场景中,用户向购物车添加了一些商品,最后结账时,由于HTTP的无状态性,不通过额外参数,服务器并不知道哪位用户购买了哪些商品。在这种场景下,服务端可通过设置或读取Cookie中包含的信息,维护用户的会话状态。

0x02 由Cookie延伸出的漏洞

在这篇文章中,我们将列出各种攻击场景,如果web应用使用Cookie进行认证或其它个性化的功能,那它就可能成为黑客眼中的一个攻击手段。文中提到的场景,少部分可能需要结合其它漏洞才能实现攻击效果,例如中间人攻击篡改数据等,由于利用场景复杂,实现难度较大,漏洞描述相对少一些,如有兴趣,文章末尾会给出相关链接。

  1. 跨站脚本攻击

    跨站脚本攻击(XSS)是最常见的web漏洞之一,攻击者通常会利用XSS来窃取Cookie,但Cookie也可能会成为攻击者payload中的一部分。

    网站开发者在某些情况下会将Cookie作为网页的一部分内容,写入html中。例如许多开发者喜欢将用户的昵称等看似无关紧要的信息存储再Cookie中。此时大家可能有些疑问,为什么Cookie不是服务端返回设置的吗,那攻击者如何修改用户的Cookie呢?

    其实并不然,许多开发者在不经意间会将一些统计信息写入Cookie,例如referer、url参数、邀请链接中的邀请码等等,一旦有写入cookie的动作,就会让攻击者有机可趁,构造恶意的Cookie使其出现在HTML中型成XSS。

  2. 会话管理不当

    会话管理不当通常指会话退出后没有注销、会话有效时间过长、重置或修改密码后未清除旧会话和会话能够被异地重放等情况,攻击者通过信息泄漏或其它方式,得到某用户的会话信息后,可以在不同环境下使用相同的会话,调用Api或在web应用中使用相同的功能。

  3. 越权漏洞

    越权漏洞顾名思义,就是绕过普通用户的权限,可以访问或修改其它用户的数据,甚至有可能是管理员用户数据的漏洞。在Cookie中如果用户的特征过于明显,例如user_id=1 ,那么攻击者就会尝试修改Cookie中的id探测是否存在越权漏洞。

  4. Cookie缺少安全属性

    Cookie中最常见的安全属性有以下三种

    Secure

    具有Secure属性值的Cookie只应通过被 HTTPS 协议加密过的请求发送给服务端,因此可以预防 中间人攻击。但即便给Cookie设置了Secure属性,敏感信息也不应该通过 Cookie 传输,因为 Cookie 有其与生俱来的不安全性,Secure 标记也无法提供确实的安全保障。

    从 Chrome 52 和 Firefox 52 开始,仅使用http协议的站点无法对Cookie赋予 Secure 属性。

    HttpOnly

    Cookie一旦被添加了HttpOnly属性,JavaScript就无法访问带有此属性的Cookie值。不可读取,也无法通过JavaScript对某些Cookie设置HttpOnly属性。

    此属性只能由HTTP服务端进行设置,常见的形式如下:

    Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT; Secure; HttpOnly

    Same-Site

    Same-Site这个概念很早就被提出,但是全面推广应用的时间线大概在Chrome83版本之后。

    Same-Site有以下三种值可选:

    • Lax Cookie允许与top页面一起发送,并将与第三方网站发起的GET请求一起发送。如果服务端没有强行设置Same-Site的值,那么Lax就会作为默认的Same-Site值。

    • Strict Cookie只会在当前域名下发送,第三方网站不允许使用当前Cookie值。

    • None Cookie将在所有上下文中发送,即允许跨域发送。

      没有 SameSite 属性的Cookies默认为 SameSite=Lax;

      此属性只能由HTTP服务端进行设置,常见的形式如下:

      Set-Cookie: flavor=choco; SameSite=None

      简而言之,只要你使用了最新版本83版本之后的Chrome,就不用担心被溯源脚本抓取到个人信息了,攻击队大佬们可以放心上网冲浪了

      (当然,如果网站强行将Same-Site属性值设置为None,也就是不使用Same-Site,第三方的Cookie仍然会被发送至服务端,依然有可能被溯源脚本抓取到。)

  5. 易被猜解的Cookie

    这里所说的Cookie,指的是在服务端创建完成并返回到前端的Cookie。如果一个较为重要的Cookie值,仅通过简单的算法(例如Base64)生成,而不是随机或使用单向函数(例如md5)生成的,那么就存在一定被破解的风险。

    假定攻击者可以通过此方法生成一个新的有效的Cookie,那么理论上可以获得任何属于该站点的用户凭证,认证机制形同虚设,在discuz的某登录插件中就存在此类问题。

  6. 文件包含

    文件包含漏洞产生的根本原因是服务端没有对用户是输入判断,传入了require、require_once、include,include_once方法中导致的。此漏洞的输入点通常不会在Cookie中,但也有例外。国外安全研究员Ismayil Tahmazov在测试漏洞的过程中发现,键值为lang的Cookie值发送到服务端后,没有经过过滤并且抛出了异常,产生了文件包含漏洞,漏洞详情可见本文参考链接【2】。

  7. 敏感信息存储

    用户的个人信息或部分个人信息,如收货地址、手机号码、购物车记录、真实姓名,甚至是身份证信息,都可能被粗心的开发者写入Cookie中,无论是加密还是非加密的方式。

  8. 不安全的反序列化

    许多开发者喜欢将对象序列化存储在Cookie中,但并未意识到这样情况下会产生极大的安全风险。无论服务端使用的开发语言Python还是Java,都逃不开反序列化的风险。

    大家熟知的Shiro-550漏洞(CVE-2016-4437),就是非常典型的反序列化导致远程命令执行漏洞例子,该漏洞的利用代码是经过序列化后的数据存放在Cookie中,特征难以识别,网络防护设备防护效果差,即便到了今天,互联网上仍然有一部分web系统可能遭受此漏洞影响。

    漏洞详情可见本文参考链接【3】

  9. SQL Injection

    SQL注入是最为常见的web漏洞之一,Cookie和url中的参数没有区别,都是作为常规字符串或数字传入服务端代码中,此处不再赘述。

  10. 参数污染

    参数污染也可以理解为参数覆盖。常见的后端框架在处理Cookie数据时,不会判断Cookie中是否包含重名的值。攻击者构造出大量的重名Cookie,以此干扰后端程序的正常运行,可能会导致权限绕过等问题。

  11. 未授权访问

    未授权访问漏洞也可以理解为服务端配置不当。例如某敏感业务需要用户登录或管理员登录后才可以访问,但路由上并没有覆盖到,或在配置文件中,允许不使用Cookie就允许访问此页面,就可能产生未授权访问漏洞。像Tomcat任意文件上传漏洞、Jenkins未授权访问漏洞都是由于配置不当导致的。

0x03 零信任系统如何防御

  1. 零信任网关在攻击者访问到对应资源前,就要求每位用户主动认证。所以像SQL注入、反序列化漏洞、文件包含等漏洞,如果想要在零信任防御体系下完成常规web漏洞的利用,门槛较高
  2. 对于参数污染和敏感信息存储漏洞等,零信任平台可以通过威胁感知、数据防泄漏等安全能力,对返回数据中已有的敏感数据做脱敏处理,同时也可以在平台进行告警,由IT/安全人员评估后告知研发人员是否存在风险及如何处理风险

0x04 总结

基于Cookie的攻击方法远不止以上方法,更多的攻击手法可见本文参考链接【4】。

无论是远程代码执行还是权限绕过漏洞,其根本原因都是开发者在处理数据时,认为用户“不可能”修改,因此过分相信用户的输入并使用了该数据。

网络安全的本质是人与人、数据与数据之间的对抗,我们在了解已有漏洞场景的同时,会持续探索和研究新型的攻击方式。如对此类漏洞或其它安全问题存在疑问,可联系持安科技7*24小时应急响应团队:service@chiansec.com

0x05 参考资料

  1. HTTP cookies - HTTP | MDN
  2. https://medium.com/@tehmezovismayil/cookie-based-php-local-file-inclusion-bug-bounty-553f8b38d4dc
  3. https://xz.aliyun.com/t/7793
  4. Cookies Hacking - HackTricks

安全科普:使用Cookie会导致哪些安全问题?相关推荐

  1. Nginx 使用 proxy_cookie_path 解决反向代理 cookie 丢失导致无法登录等问题

    语法 参考nginx官方文档 语法: proxy_cookie_path off;proxy_cookie_path path replacement; 默认: proxy_cookie_path o ...

  2. JAVA防止CRLF攻击_CRLF攻击的一篇科普:新浪某站CRLF Injection导致的安全问题(转)...

    CRLF Injection很少遇见,这次被我逮住了.我看zone中(http://zone.wooyun.org/content/13323)还有一些同学对于这个漏洞不甚了解,甚至分不清它与CSRF ...

  3. node.js中cookie数据丢失导致session失效问题

    问题 今天刚准备用node.js作为后端语言来开发就遇到了一个小坑,网上的资料还是比较的少,于是我决定记录下来.关于session和cookie我就不做具体的介绍了,网上有挺多资料的.我打算实现的功能 ...

  4. QQ浏览器兼容模式下Cookie失效 导致的NetCore Cookie认证失效

    最近在写NetCore项目采用的是NetCore的Cookie认证.结果偶然发现QQ浏览器登录不好用.这里先需要了解一下set-cookie中的SameSite属性  导致原因 首先Fiddler 4 ...

  5. ThreadLocal线程复用导致的安全问题

    我们知道,ThreadLocal 适用于变量在线程间隔离,而在方法或类间共享的场景.如果用户信息的获取比较昂贵(比如从数据库查询用户信息),那么在 ThreadLocal 中缓存数据是比较合适的做法. ...

  6. 移动安全学习笔记——组件安全之组件暴露导致的安全问题(含实验)

    0x00 漏洞原理 exported的组件可以被第三方APP调用,在权限控制不当的情况下,可能导致敏感信息泄露.绕过认证.越权行为执行等风险. 0x01 检测方法 1.手动查看 1-反编译apk,查看 ...

  7. csrf验证问题 -- 不同域名下Iframe嵌套Cookie失效导致csrf验证失败

    问题原因 Cookie:SameSite Chrome 51 开始,浏览器的 Cookie 新增加了一个SameSite属性,主要用于防止CSRF攻击和用户追踪. cookie的SameSite属性用 ...

  8. Session与Cookie的安全问题

    由于http协议是无状态的协议,为了能够记住请求的状态,于是引入了Session和Cookie的机制.我们应该有一个很明确的概念,那就是Session是存在于服务器端的,在单体式应用中,他是由tomc ...

  9. Cookie、Session、Token那点事儿

    前言:新公司项目中使用到了Cookie,在各大Android技术讨论群向前辈们取经讨论这cookie.session.token这仨哥们的时候,很多开发者说法不一各抒已见,所以是时候回顾下http基础 ...

最新文章

  1. WebView的截屏实现
  2. python用户登录_【python】实例-用户登录系统
  3. Java IO流中 File文件对象与Properties类(四)
  4. 华为交换机之SNMP管理
  5. 机器学习笔记:梯度下降
  6. @有两个含义:1,在参数里,以表明该变量为伪参数 ,在本例中下文里将用@name变量代入当前代码中2,在字串中,@的意思就是后面的字串以它原本的含义显示,如果不...
  7. OpenGL之渲染大小球自转和公转的效果
  8. Android开发之购物车添加商品实现抛物线动画
  9. 性能测试流程(超级详细)
  10. 计算机会考ppt考试,信息技术会考Powerpoint复习要点
  11. #1024程序员节# cc2530 按键唤醒功耗模式PM3例程
  12. 常用LINUX配置及SHELL命令集锦-SHELL命令
  13. 纳米软件推出的新一代的网络分析仪软件你了解了吗?
  14. Enable Geolocation in a WebView (Android)
  15. nodejs 获取系统环境变量_Node.js中环境变量process.env的一些事详解
  16. 【数字孪生】数字孪生十问:分析与思考
  17. js动态添加样式和jQuery动态添加样式
  18. Ubuntu 8.04 AMD64平台下Realplayer 11安装指南
  19. HTML实现除夕最美烟花,2023春节倒计时,新年不可没有烟花,最炫烟花代码分享
  20. matlab时分复用,基于matlab的多路时分复用仿真.docx

热门文章

  1. 我们是ikun,为坤坤加油(简单的python反序列化、爬虫、越权、支付漏洞)
  2. python爬取快手粉丝榜_[Python] 【原创开源】快手爬虫,根据id批量爬取用户的所有图集和视频...
  3. css超级无敌不会,一大堆疑问大全
  4. 2022年3月11号黑马培训的第一天
  5. ERP需求和销售管理 华夏
  6. WS_EX_TOOLWINDOW导致的窗口一直不能在前面
  7. 布朗大学计算机专业怎么样,布朗大学计算机工程研究生怎么样?好不好
  8. JAVA 完整实现滑块拼图验证码
  9. 【我的开源】蜗牛闹钟
  10. 【STM32CubeIDE和ITM SWV实现printf调试信息的打印】