首页
技术服务
  • 网络安全等级保护测评
  • 商用密码应用安全性评估
  • 软件测试
  • 数据安全风险评估
  • 全生命周期安全保障
  • 实战攻防
  • 人才培养
培训赛事
  • 培训中心介绍
  • 赛事活动
  • 校企合作
  • 培训服务
  • 预约咨询
合作单位
  • 党政机关
  • 能源行业
  • 医疗行业
  • 教育行业
  • 重点用户
新闻中心
  • 企业动态
  • 行业资讯
  • 漏洞报告
人才招聘
  • 团队风采
  • 招聘信息
关于我们
  • 企业介绍
  • 企业文化
  • 发展历程
  • 荣誉资质
  • 公正性声明
  • 洽谈联系
新闻中心 漏洞报告
相关新闻
  • 2024-06-12

    CVE-2024-4577 PHP CGI远程代码执行漏洞分析

  • 2022-04-29

    关于Apache Struts2存在远程代码执行漏洞的安全通告

  • 2021-03-05

    记一次渗透测试

  • 2021-08-20

    致远A8 OA未授权文件上传漏洞在野利用EXP预警通告

CVE-2023-38545 curl & libcurl堆缓冲区溢出漏洞分析
2024-03-26

一、漏洞简介

1、这个缺陷使得curl在SOCKS5代理握手时导致一个基于堆的缓冲区溢出。

2、当 curl 被要求将主机名传递给 SOCKS5 代理以允许代理解析地址而不是由 curl 本身完成时,主机名的最大长度可以是 255 字节。

3、如果检测到主机名长度超过 255 字节,则 curl 将切换到本地名称解析,并将解析的地址传递给代理。由于一个错误,”让主机解析名称“的局部变量可能会在缓慢的 SOCKS5 握手过程中获得错误的值,将太长的主机名复制到目标缓冲区,而不是在复制已解析的地址。



二、补丁分析

2.1 影响范围

受影响的版本:libcurl 7.69.0 至 8.3.0(含 8.3.0)
不受影响的版本:libcurl = 8.4.0

2.2 官方更新

从 curl 8.4.0 开始,如果名称太长,curl 不再切换到本地解析模式,而是正确地返回错误。
补丁下载地址:https://curl.se/docs/CVE-2023-38545_patches.zip
主机名太长,超过255字节,就会返回报错。

图片



三、漏洞成因

根据补丁分析,成因在于hostname长度大于255时,memcpy拷贝主机名的时候,那么我们找到对应的代码:
1、主机名hostname长度大于255时,会进行本地解析
图片
2、本地解析主机名
图片
3、本地解析失败后,会进行远程解析,当主机名超长时,memcpy拷贝时超过socksreq的大小,造成堆溢出。
图片



四、环境准备

4.1 系统环境

系统为Ubuntu 20.04 64位系统,安装需要的依赖
sudo apt update
sudo apt install make gdb gcc git checksec

4.2 运行代理服务

参考hatboy师傅的python版本的socks5服务端代码,保存其中“不需要认证的socks5服务器“代码为socks.py,端口这里设置为1080:
import select
import socket
import logging, struct
from socketserver import StreamRequestHandler, ThreadingTCPServer
SOCKS_VERSION = 5
class SocksProxy(StreamRequestHandler):
    def handle(self):
        print('Accepting connection from {}'.format(self.client_address))
        # 协商
        # 从客户端读取并解包两个字节的数据
        header = self.connection.recv(2)
        version, nmethods = struct.unpack("!BB", header)
        # 设置socks5协议,METHODS字段的数目大于0
        assert version == SOCKS_VERSION
        assert nmethods > 0
        # 接受支持的方法
        methods = self.get_available_methods(nmethods)
        # 无需认证
        if 0 not in set(methods):
            self.server.close_request(self.request)
            return
        # 发送协商响应数据包
        self.connection.sendall(struct.pack("!BB", SOCKS_VERSION, 0))
        # 请求
        version, cmd, _, address_type = struct.
Previous

暂无

Next

湖北省成功举办首期“密码技术应用员”培训班

联系我们

地址:
总部地址:武汉市洪山区欢乐大道9号正堂时代28层
培训中心地址:武汉市东西湖区径河街道国家网络安全人才与创新基地培训中心1期
热线:
18627879046
027-88879416
邮箱:
whay@wuhananyu.com

技术服务

人才培养
实战攻防
全生命周期安全保障
数据安全风险评估
软件测试
商用密码应用安全性评估
网络安全等级保护测评

培训赛事

培训中心介绍
赛事活动
校企合作
培训服务
预约咨询

人才招聘

招聘信息
团队风采

投诉与监督:
027-88879416

关注我们
返回顶部
版权所有 Copyright @   2010-2014武汉安域信息安全技术有限公司       鄂ICP备16004959号      
   鄂公网安备 42018502000535号
技术支持:幸运坐标     免责声明