• Eric Biggers's avatar
    ASN.1: fix out-of-bounds read when parsing indefinite length item · 8f4007a4
    Eric Biggers authored
    commit e0058f3a upstream.
    
    In asn1_ber_decoder(), indefinitely-sized ASN.1 items were being passed
    to the action functions before their lengths had been computed, using
    the bogus length of 0x80 (ASN1_INDEFINITE_LENGTH).  This resulted in
    reading data past the end of the input buffer, when given a specially
    crafted message.
    
    Fix it by rearranging the code so that the indefinite length is resolved
    before the action is called.
    
    This bug was originally found by fuzzing the X.509 parser in userspace
    using libFuzzer from the LLVM project.
    
    KASAN report (cleaned up slightly):
    
        BUG: KASAN: slab-out-of-bounds in memcpy ./include/linux/string.h:341 [inline]
        BUG: KASAN: slab-out-of-bounds in x509_fabricate_name.constprop.1+0x1a4/0x940 crypto/asymmetric_keys/x509_cert_parser.c:366
        Read of size 128 at addr ffff880035dd9eaf by task keyctl/195
    
        CPU: 1 PID: 195 Comm: keyctl Not tainted 4.14.0-09238-g1d3b78bb...
    8f4007a4
asn1_decoder.c 12.7 KB