The current SM9 decryption implementation contains an infinity-point ciphertext forgery vulnerability. The root cause is that, during decryption, the elliptic-curve point C1 in the ciphertext is only deserialized and checked to be on the curve, but the implementation does not explicitly reject the point at infinity.
In the current implementation, an attacker can construct C1 as the point at infinity, causing the bilinear pairing result to degenerate into the identity element in the GT group. As a result, a critical part of the key derivation input becomes a predictable constant. An attacker who only knows the target user's UID can derive the decryption key material and then forge a ciphertext that passes the integrity check.
The direct impact of this vulnerability is ciphertext forgery, not confidentiality loss.
This issue affects the following paths because they all eventually enter the same UnwrapKey logic:
sm9.Decryptsm9.DecryptASN1sm9.UnwrapKeyThis means the issue affects not only public-key encryption/decryption, but also key encapsulation/decapsulation.
This vulnerability should be rated as High.
Using CVSS 3.1 as a reference, it can be characterized as follows:
Overall, the estimated score falls in the High range, approximately 7.5.
It is High rather than Critical for the following reasons:...
0.41.1Exploitability
AV:NAC:LAT:NPR:NUI:NVulnerable System
VC:NVI:HVA:NSubsequent System
SC:LSI:HSA:N9.2/CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:N/SC:L/SI:H/SA:N