Skip to content
  • Jann Horn's avatar
    netfilter: xt_bpf: add overflow checks · 03e82f2b
    Jann Horn authored
    
    [ Upstream commit 6ab40511 ]
    
    Check whether inputs from userspace are too long (explicit length field too
    big or string not null-terminated) to avoid out-of-bounds reads.
    
    As far as I can tell, this can at worst lead to very limited kernel heap
    memory disclosure or oopses.
    
    This bug can be triggered by an unprivileged user even if the xt_bpf module
    is not loaded: iptables is available in network namespaces, and the xt_bpf
    module can be autoloaded.
    
    Triggering the bug with a classic BPF filter with fake length 0x1000 causes
    the following KASAN report:
    
    ==================================================================
    BUG: KASAN: slab-out-of-bounds in bpf_prog_create+0x84/0xf0
    Read of size 32768 at addr ffff8801eff2c494 by task test/4627
    
    CPU: 0 PID: 4627 Comm: test Not tainted 4.15.0-rc1+ #1
    [...]
    Call Trace:
     dump_stack+0x5c/0x85
     print_address_description+0x6a/0x260
     kasan_report+0x254/0x370
     ? bpf_prog_create+0x84/0xf0
     memcpy+0x1f/0x50
     bpf_prog_create+0x84/0xf0
     bpf_mt_check+0x90/0xd6 [xt_bpf]
    [...]
    Allocated by task 4627:
     kasan_kmalloc+0xa0/0xd0
     __kmalloc_node+0x47/0x60
     xt_alloc_table_info+0x41/0x70 [x_tables]
    [...]
    The buggy address belongs to the object at ffff8801eff2c3c0
                    which belongs to the cache kmalloc-2048 of size 2048
    The buggy address is located 212 bytes inside of
                    2048-byte region [ffff8801eff2c3c0, ffff8801eff2cbc0)
    [...]
    ==================================================================
    
    Fixes: e6f30c73
    
     ("netfilter: x_tables: add xt_bpf match")
    Signed-off-by: default avatarJann Horn <jannh@google.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: default avatarSasha Levin <alexander.levin@verizon.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    03e82f2b