lkml.org 
[lkml]   [2009]   [Jul]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 2/8] personality: fix PER_CLEAR_ON_SETID (CVE-2009-1895)
    2.6.27-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Julien Tinnes <jt@cr0.org>

    commit f9fabcb58a6d26d6efde842d1703ac7cfa9427b6 upstream.

    We have found that the current PER_CLEAR_ON_SETID mask on Linux doesn't
    include neither ADDR_COMPAT_LAYOUT, nor MMAP_PAGE_ZERO.

    The current mask is READ_IMPLIES_EXEC|ADDR_NO_RANDOMIZE.

    We believe it is important to add MMAP_PAGE_ZERO, because by using this
    personality it is possible to have the first page mapped inside a
    process running as setuid root. This could be used in those scenarios:

    - Exploiting a NULL pointer dereference issue in a setuid root binary
    - Bypassing the mmap_min_addr restrictions of the Linux kernel: by
    running a setuid binary that would drop privileges before giving us
    control back (for instance by loading a user-supplied library), we
    could get the first page mapped in a process we control. By further
    using mremap and mprotect on this mapping, we can then completely
    bypass the mmap_min_addr restrictions.

    Less importantly, we believe ADDR_COMPAT_LAYOUT should also be added
    since on x86 32bits it will in practice disable most of the address
    space layout randomization (only the stack will remain randomized).

    Signed-off-by: Julien Tinnes <jt@cr0.org>
    Signed-off-by: Tavis Ormandy <taviso@sdf.lonestar.org>
    Acked-by: Christoph Hellwig <hch@infradead.org>
    Acked-by: Kees Cook <kees@ubuntu.com>
    Acked-by: Eugene Teo <eugene@redhat.com>
    [ Shortened lines and fixed whitespace as per Christophs' suggestion ]
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    include/linux/personality.h | 5 ++++-
    1 file changed, 4 insertions(+), 1 deletion(-)

    --- a/include/linux/personality.h
    +++ b/include/linux/personality.h
    @@ -40,7 +40,10 @@ enum {
    * Security-relevant compatibility flags that must be
    * cleared upon setuid or setgid exec:
    */
    -#define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC|ADDR_NO_RANDOMIZE)
    +#define PER_CLEAR_ON_SETID (READ_IMPLIES_EXEC | \
    + ADDR_NO_RANDOMIZE | \
    + ADDR_COMPAT_LAYOUT | \
    + MMAP_PAGE_ZERO)

    /*
    * Personality types.



    \
     
     \ /
      Last update: 2009-07-17 22:45    [W:0.022 / U:0.032 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site