Skip to content

Commit d702c34

Browse files
l1kherbertx
authored andcommitted
X.509: Fix out-of-bounds access when parsing extensions
Leo reports an out-of-bounds access when parsing a certificate with empty Basic Constraints or Key Usage extension because the first byte of the extension is read before checking its length. Fix it. The bug can be triggered by an unprivileged user by submitting a specially crafted certificate to the kernel through the keyrings(7) API. Leo has demonstrated this with a proof-of-concept program responsibly disclosed off-list. Fixes: 30eae2b ("KEYS: X.509: Parse Basic Constraints for CA") Fixes: 5676712 ("KEYS: X.509: Parse Key Usage") Reported-by: Leo Lin <leo@depthfirst.com> # off-list Signed-off-by: Lukas Wunner <lukas@wunner.de> Reviewed-by: Ignat Korchagin <ignat@linux.win> Cc: stable@vger.kernel.org # v6.4+ Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
1 parent 31d0015 commit d702c34

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

crypto/asymmetric_keys/x509_cert_parser.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -609,10 +609,10 @@ int x509_process_extension(void *context, size_t hdrlen,
609609
* 0x04 is where keyCertSign lands in this bit string
610610
* 0x80 is where digitalSignature lands in this bit string
611611
*/
612-
if (v[0] != ASN1_BTS)
613-
return -EBADMSG;
614612
if (vlen < 4)
615613
return -EBADMSG;
614+
if (v[0] != ASN1_BTS)
615+
return -EBADMSG;
616616
if (v[2] >= 8)
617617
return -EBADMSG;
618618
if (v[3] & 0x80)
@@ -645,10 +645,10 @@ int x509_process_extension(void *context, size_t hdrlen,
645645
* (Expect 0xFF if the CA is TRUE)
646646
* vlen should match the entire extension size
647647
*/
648-
if (v[0] != (ASN1_CONS_BIT | ASN1_SEQ))
649-
return -EBADMSG;
650648
if (vlen < 2)
651649
return -EBADMSG;
650+
if (v[0] != (ASN1_CONS_BIT | ASN1_SEQ))
651+
return -EBADMSG;
652652
if (v[1] != vlen - 2)
653653
return -EBADMSG;
654654
/* Empty SEQUENCE means CA:FALSE (default value omitted per DER) */

0 commit comments

Comments
 (0)