Follow @Openwall on Twitter for new release announcements and other news
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Tue, 6 Oct 2020 22:25:48 +0300
From: Alexander Popov <>
To: Jann Horn <>
Cc: Kees Cook <>, Will Deacon <>,
 Andrey Ryabinin <>,
 Alexander Potapenko <>, Dmitry Vyukov <>,
 Christoph Lameter <>, Pekka Enberg <>,
 David Rientjes <>, Joonsoo Kim <>,
 Andrew Morton <>,
 Masahiro Yamada <>,
 Masami Hiramatsu <>, Steven Rostedt
 <>, Peter Zijlstra <>,
 Krzysztof Kozlowski <>,
 Patrick Bellasi <>,
 David Howells <>, Eric Biederman <>,
 Johannes Weiner <>, Laura Abbott <>,
 Arnd Bergmann <>,
 Greg Kroah-Hartman <>,
 Daniel Micay <>,
 Andrey Konovalov <>,
 Matthew Wilcox <>, Pavel Machek <>,
 Valentin Schneider <>,
 kasan-dev <>, Linux-MM <>,
 Kernel Hardening <>,
 kernel list <>,
Subject: Re: [PATCH RFC v2 0/6] Break heap spraying needed for exploiting

On 06.10.2020 21:37, Jann Horn wrote:
> On Tue, Oct 6, 2020 at 7:56 PM Alexander Popov <> wrote:
>> On 06.10.2020 01:56, Jann Horn wrote:
>>> On Thu, Oct 1, 2020 at 9:43 PM Alexander Popov <> wrote:
>>>> On 29.09.2020 21:35, Alexander Popov wrote:
>>>>> This is the second version of the heap quarantine prototype for the Linux
>>>>> kernel. I performed a deeper evaluation of its security properties and
>>>>> developed new features like quarantine randomization and integration with
>>>>> init_on_free. That is fun! See below for more details.
>>>>> Rationale
>>>>> =========
>>>>> Use-after-free vulnerabilities in the Linux kernel are very popular for
>>>>> exploitation. There are many examples, some of them:
>> Hello Jann, thanks for your reply.
>>> I don't think your proposed mitigation would work with much
>>> reliability against this bug; the attacker has full control over the
>>> timing of the original use and the following use, so an attacker
>>> should be able to trigger the kmem_cache_free(), then spam enough new
>>> VMAs and delete them to flush out the quarantine, and then do heap
>>> spraying as normal, or something like that.
>> The randomized quarantine will release the vulnerable object at an unpredictable
>> moment (patch 4/6).
>> So I think the control over the time of the use-after-free access doesn't help
>> attackers, if they don't have an "infinite spray" -- unlimited ability to store
>> controlled data in the kernelspace objects of the needed size without freeing them.
>> "Unlimited", because the quarantine size is 1/32 of whole memory.
>> "Without freeing", because freed objects are erased by init_on_free before going
>> to randomized heap quarantine (patch 3/6).
>> Would you agree?
> But you have a single quarantine (per CPU) for all objects, right? So
> for a UAF on slab A, the attacker can just spam allocations and
> deallocations on slab B to almost deterministically flush everything
> in slab A back to the SLUB freelists?

Aaaahh! Nice shot Jann, I see.

Another slab cache can be used to flush the randomized quarantine, so eventually
the vulnerable object returns into the allocator freelist in its cache, and
original heap spraying can be used again.

For now I think the idea of a global quarantine for all slab objects is dead.

Thank you.

Best regards,

Powered by blists - more mailing lists

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.