Foxmail安全性分析

发表于:2007-05-06来源:作者:点击数: 标签:分析安全声明不要Foxmail
声明:请不要利用本文的任何内容或方法进行破坏,否则由此导致的一切后果自负! 【前言】 前几天收到一封网友的来信,信件的内容没有什么,但是奇怪的是Foxmail提示来信 的时候,还有一个漂亮的小图标,挺有意思的。 开始我还以为又是利用那个**agent搞的玩意
声明:请不要利用本文的任何内容或方法进行破坏,否则由此导致的一切后果自负!

【前言】

前几天收到一封网友的来信,信件的内容没有什么,但是奇怪的是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/ C05FVFNDQVBFMi4wAwEAAA
Ah/g5CdWlsdCBieSBaaXBweQAh+QQBZAAHACwAAAAAIAAgAAAD/ni63P4wykmrveSYS7P5
m/MdmWUQwPiARkBkKAiU51AMbgCIgD0YqV5hOAgSfLHhrlG7BWzD6E1ATA4DK8EPKiUOtA
SBIRpaGQbH7m3AFggCUWwEQC8Quqgo/V6QR84fXFcfRGcFAH4QAIdjcFEaB3YCM3xLWYJq
kmFAfIkMBm59OEKLQ25uYycBZUxubE84T1FhqDNiJQ89bLu8UJuULhIoaC/FL1o3qagTZ8
bOAnypiBRj0M5hUkUfnitHLsZwX7vbFS1Fu8MEsGgtFy1Hu5MubJu4E6vWL/QEQNCTJi8A
uCnGzobAEwA3DQwj8AgobhJATZKRwk0KiBNSOODXCY6Dx48gQ35MAAAh+QQBZAAHACwAAA
AAIAAgAAAD/ni63P4wykmrveSYS7P5m/MdmWUQwPiARkBkKAiU51AMbgCIgD0YqV5hOAgS
fLHhrlG7BWzD6E1ATA4DK8EPKiUOtASBIRpaGQbH7m3AFggCUWwEAFAPCVI6viCPnEFSLR
9EZwUAfRB1cXYFYTN7S1lcjGFhQHuIDAZufDhCigVubmMnAWVMbmxPOE9RYaMzYiUPPWy2
t1CWjy4SKGgvwC9aN6SjE2fByQJ7pIcUY8vJYVJFH5krRy7BcF+21hUtRba+BKtoLRctR7
YCh+uWsxOm0S9sL0DL7SYvAG7A5zb6ndhnyZ+jZT/ecNjUTkYKNymuUUjhgMA3DhgzatyY
AjEBADs= //编码后的图标内容

--=====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/ C05FVFNDQVBFMi4wAwEAAA
Ah/g5CdWlsdCBieSBaaXBweQAh+QQBZAAHACwAAAAAIAAgAAAD/ni63P4wykmrveSYS7P5
m/MdmWUQwPiARkBkKAiU51AMbgCIgD0YqV5hOAgSfLHhrlG7BWzD6E1ATA4DK8EPKiUOtA
SBIRpaGQbH7m3AFggCUWwEQC8Quqgo/V6QR84fXFcfRGcFAH4QAIdjcFEaB3YCM3xLWYJq
kmFAfIkMBm59OEKLQ25uYycBZUxubE84T1FhqDNiJQ89bLu8UJuULhIoaC/FL1o3qagTZ8
bOAnypiBRj0M5hUkUfnitHLsZwX7vbFS1Fu8MEsGgtFy1Hu5MubJu4E6vWL/QEQNCTJi8A
uCnGzobAEwA3DQwj8AgobhJATZKRwk0KiBNSOODXCY6Dx48gQ35MAAAh+QQBZAAHACwAAA
AAIAAgAAAD/ni63P4wykmrveSYS7P5m/MdmWUQwPiARkBkKAiU51AMbgCIgD0YqV5hOAgS
fLHhrlG7BWzD6E1ATA4DK8EPKiUOtASBIRpaGQbH7m3AFggCUWwEAFAPCVI6viCPnEFSLR
9EZwUAfRB1cXYFYTN7S1lcjGFhQHuIDAZufDhCigVubmMnAWVMbmxPOE9RYaMzYiUPPWy2
t1CWjy4SKGgvwC9aN6SjE2fByQJ7pIcUY8vJYVJFH5krRy7BcF+21hUtRba+BKtoLRctR7
YCh+uWsxOm0S9sL0DL7SYvAG7A5zb6ndhnyZ+jZT/ecNjUTkYKNymuUUjhgMA3DhgzatyY
AjEBADs=? //注意最后增加的“?”

--------------------------------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:”域的值,从而达到匿名邮件的效果,因此通过
邮件过滤恐怕无法达到预期的效果。



【其它】

没什么需要多说的了,只要编程的时候多想一些不可能的事就好!

原文转自:http://www.ltesting.net