Jeśli zobaczycie na kwietniowy Critical Patch Update odnośnie Javy, to pewnie machniecie ręką – eee, nic ciekawego.
Więc jeśli już machnęliście ręką, warto zapoznać się z tym wpisem: CVE-2022-21449: Psychic Signatures in Java.
Problem występuje w implementacji algorytmu podpisu ECDSA. Ultra krótkie wprowadzenie do problemu:
ECDSA stands for the Elliptic Curve Digital Signature Algorithm, and it is a widely used standard for signing all kinds of digital documents. Compared to the older RSA standard, elliptic curve keys and signatures tend to be much smaller for equivalent security, resulting in them being widely used in cases where size is at a premium. For example, the WebAuthn standard for two-factor authentication allows device manufacturers to choose from a wide range of signature algorithms, but in practice almost all of the devices manufactured to date support ECDSA signatures only (a notable exception being Windows Hello, which uses RSA signatures; presumably for compatibility with older TPM hardware).
Okazuje się, że wystarczy dla dowolnej wiadomości wygenerować „pusty podpis” (same zera) i taki podpis będzie prawdziwy:
Podatne są (tj. były): Java 15, Java 16, Java 17, Java 18 (łatka Oracle wskazuje jako podatne wersje: 7u331, 8u321, 11.0.14, 17.0.2, 18 – lub (w danej linii?) niższe). Polecamy dość szybko zaaplikować łatkę, w szczególności jeśli gdzieś bazujecie na podpisach wykorzystujących krzywe eliptyczne (patrz np. JWT i algorytmy ES*)