open5gs/lib
Sukchan Lee 7c14073533 [UDM] Added validation for pubkey
a cryptographic vulnerability in the SUCI decryption routines
of Open5GS 5G—specifically Profile B, which uses P-256 (secp256r1)
for its elliptic curve routines.

If a mobile device user passes a public key within its SUCI
that does not correspond to a valid point on the P-256 elliptic curve,
the Open5GS UDM will not check the point
before running elliptic curve operations with it and returning a response
to the mobile device user.

If the public key is not checked to be a valid point, an attacker can leverage
this behavior to extract the Profile B private key from the UDM,
as has been done in other domains
(https://owasp.org/www-pdf-archive/Practical_Invalid_Curve_Attacks_on_TLS-ECDH_-_Juraj_Somorovsky.pdf).

Note that Profile A is not similarly vulnerable to this, as it is impossible
to construct an invalid point on a curve25519 elliptic curve.

There was some work that went into developing a practical proof of concept
of this kind of attack against free5gc last year; it can be found here:

https://www.gsma.com/security/wp-content/uploads/2023/10/0073-invalid_curve.pdf

And here is the free5gc security advisory:

https://github.com/advisories/GHSA-cqvv-r3g3-26rf

To mitigate this issue in Open5GS, the public key of the UE must be validated
by the UDM prior to use. Adding a validation function such as the following
should work:

I designed this code based on information from https://crypto.stackexchange.com/questions/90151/verify-that-a-point-belongs-to-secp256r1.
2024-03-24 14:09:10 +09:00
..
app Add space to inprove readbility of error 2023-12-21 22:14:24 +09:00
asn1c [ASN1C] Fixed asn1c library on 32bit (#2934) 2024-02-12 14:00:06 +09:00
core [PFCP] Session removal while waiting PFCP reply (#3040) 2024-03-24 09:50:23 +09:00
crypt [UDM] Added validation for pubkey 2024-03-24 14:09:10 +09:00
dbi memset input/output structure inside the function 2024-01-22 17:34:59 +09:00
diameter [SMF] Gy: Check Multiple-Services-Credit-Control Result-Code 2024-03-21 07:13:44 +09:00
gtp [GTP/PFCP]] incorrect dst TEI=0/SEID=0 (#3043) 2024-03-23 10:06:16 +09:00
ipfw [SMF] Added Bi-Directional Flow (#2909) 2024-02-17 20:43:15 +01:00
metrics [SEPP] Initial Update for 5G Roaming (#2739) 2023-11-19 19:34:51 +09:00
nas UE context transfer (#3052) 2024-03-21 07:07:25 +09:00
ngap [MME/AMF] Fixed crash following Handover Request (#3014) 2024-02-29 23:02:38 +09:00
pfcp [PFCP] Session removal while waiting PFCP reply (#3040) 2024-03-24 09:50:23 +09:00
proto UE context transfer (#3052) 2024-03-21 07:07:25 +09:00
s1ap [Release-17] Upgrade S1AP/NGAP to v17.3.9 2023-02-21 21:48:06 +09:00
sbi UE context transfer (#3052) 2024-03-21 07:07:25 +09:00
sctp [MME] Added log messages to find memory problem 2024-02-27 21:16:50 +09:00
tun [ALL] Removing trailing whitespace and tab 2022-09-02 23:38:39 +09:00
meson.build [SEPP] Initial Update for 5G Roaming (#2739) 2023-11-19 19:34:51 +09:00