CVE-2026-22699CVE-2026-22699是RustCrypto椭圆曲线密码学库中的一个高危拒绝服务漏洞。该漏洞存在于SM2公钥加密解密路径中,攻击者可以通过构造特殊的无效椭圆曲线点来触发程序崩溃。在受影响的版本0.14.0-pre.0和0.14.0-rc.0中,当解码SM2加密消息中的C1组件时,代码使用.unwrap()方法直接解包AffinePoint::from_encoded_point()的返回值。如果提供的坐标在语法上有效但实际上不在SM2曲线上,该方法会返回None,而.unwrap()会导致panic,从而造成服务中断。此漏洞无需认证即可远程利用,攻击复杂度低,可能对使用该库进行SM2加密通信的系统造成严重影响。
漏洞根源在于RustCrypto elliptic-curves库中SM2 PKE(Public Key Encryption)解密实现。问题代码路径如下:
1. SM2解密函数接收加密后的密文,其中包含C1和C2两个组件
2. C1是被编码的椭圆曲线点,通过AffinePoint::from_encoded_point(&encoded_c1)解码
3. 当输入点坐标语法有效但不满足SM2曲线方程时,from_encoded_point返回CtOption::None
4. 原代码使用.unwrap()直接解包,未进行空值检查,导致panic
漏洞利用条件:
- 攻击者需能够向目标系统发送SM2加密数据
- 构造的C1点坐标需满足椭圆曲线点的语法格式(如满足模p运算的坐标范围)
- 但该点不能是SM2曲线上的有效点(即不满足y²=x³+ax+b mod p)
修复方案:在调用.unwrap()前检查返回值,或使用expect()并配合错误处理,或使用if let Some()模式匹配进行安全解包。