CVE-2025-68701Jervis是一个用于Job DSL插件脚本和共享Jenkins管道库的Java库。该库在2.2版本之前存在严重的密码学安全漏洞:在加密操作中使用确定性的AES初始化向量(IV)派生方式。正常情况下,AES加密应该使用随机生成的IV以确保相同明文每次加密产生不同的密文,从而防止模式分析和已知明文攻击。然而,Jervis从密码短语直接派生IV,使得相同的明文总是产生相同的密文输出。这种实现违反了现代密码学的最佳实践,攻击者可以通过分析加密数据的模式来推断明文内容或进行密码猜测攻击。由于Jervis常用于处理Jenkins的敏感配置和凭证信息,该漏洞可能导致敏感凭据、API密钥、部署凭证等机密信息泄露。攻击者无需任何认证即可利用此漏洞,对使用受影响版本Jervis的系统构成严重安全威胁。
漏洞根因在于Jervis库在AES加密实现中使用了确定性的IV派生算法。在标准的AES-CBC模式中,IV应该是随机生成的,以确保加密语义安全。然而,Jervis在2.2之前的版本中,使用密码短语通过某种固定算法派生IV,这导致:1)相同的密码短语总是产生相同的IV;2)相同的明文在相同的密钥下总是产生相同的密文。攻击者可以利用这一特性进行以下攻击:已知明文攻击 - 如果攻击者知道某段密文对应的明文(如常见的header、配置格式等),他们可以验证密码猜测的正确性;选择明文攻击 - 通过观察加密输出模式,攻击者可以推断明文结构或识别重复内容;密码短语重用攻击 - 如果同一密码短语用于加密多个消息,攻击者可以识别这些消息之间的关系。漏洞代码通常表现为类似:IV = deriveIV(passphrase),而非标准的SecureRandom生成IV。修复方案使用密码学安全的随机数生成器(CSPRNG)生成随机的16字节IV,并在加密时将IV与密文一起传输或存储。