当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2014-085570

漏洞标题:百度COM控件BaiduSetupAx存在远程栈溢出漏洞

相关厂商:百度

漏洞作者: 路人甲

提交时间:2014-12-02 18:01

修复时间:2015-03-02 18:02

公开时间:2015-03-02 18:02

漏洞类型:拒绝服务

危害等级:中

自评Rank:6

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-12-02: 细节已通知厂商并且等待厂商处理中
2014-12-03: 厂商已经确认,细节仅向厂商公开
2014-12-06: 细节向第三方安全合作伙伴开放
2015-01-27: 细节向核心白帽子及相关领域专家公开
2015-02-06: 细节向普通白帽子公开
2015-02-16: 细节向实习白帽子公开
2015-03-02: 细节向公众公开

简要描述:

COM控件BaiduSetupAx 参数长度验证不完整,畸形参数可导致栈溢出。

详细说明:

这个控件会到http://%s.baidu.com:%d/%s 这样的一个地址下载程序安装运行,下载的文件文件会保存到本地缓存目录,而缓存文件的文件名是可以通过属性参数控制的,BaiduSetupAxPackageChannel这个属性指定缓存文件的名字。而属性参数是没有长度限制的,我们可以给PackageChannel赋值很长的串。
文件名属性参数 axBaiduSetupCtrl1.PackageChannel= AAAAAAAAAAAAAAAA.........这是一个长串
缓存文件路径 C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Baidu\BaiduSetupAx\\
HTTP缓存文件名的格式 HTTP{97500BA6-87CA-420C-8889-BFFA3868D8A4}_{axBaiduSetupCtrl1.PackageChanne}.exe
P2P 缓存文件名的格式 P2P{0FF9FDCD-76A9-4E5B-903E-7A35FC302F4B}{axBaiduSetupCtrl1.PackageChanne}.exe
最后会组成这样的缓存文件字符串

C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\Baidu\BaiduSetupAx\\HTTP{97500BA6-87CA-420C-8889-BFFA3868D8A4}
_AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA.exe


接下来会使用循环把缓存文件名拷贝到堆栈。

SrcPathName = *(_WORD **)PPathName;
destBuffer = (const WCHAR *)((char *)&WideCharStr - *(_DWORD *)PPathName);
do
{
data = *SrcPathName;
*(_WORD *)((char *)destBuffer + (_DWORD)SrcPathName) = *SrcPathName;
++SrcPathName;
}
while ( data );


问题就在这里,它会把源串全部完全拷贝,而没有检查目标地址的大小。
所用当axBaiduSetupCtrl1.PackageChannel的值足够大时就会发生堆栈溢出
最后 GS Cookie检查抛出异常
__security_check_cookie((unsigned int)&v61 ^ v69);

0:005> kn
# ChildEBP RetAddr
00 04299174 0678f90b KERNELBASE!UnhandledExceptionFilter+0x63
WARNING: Stack unwind information not available. Following frames may be wrong.
01 042994a8 06785801 BaiduSetupAx_0!DllRegisterServer+0x13d6b
02 0429bd10 00410041 BaiduSetupAx_0!DllRegisterServer+0x9c61
03 0429bd14 00410041 0x410041
04 0429bd18 00410041 0x410041
05 0429bd1c 00410041 0x410041
06 0429bd20 00410041 0x410041
07 0429bd24 00410041 0x410041
08 0429bd28 00410041 0x410041
09 0429bd2c 00410041 0x410041
0a 0429bd30 00410041 0x410041
0b 0429bd34 00410041 0x410041
0c 0429bd38 00410041 0x410041
0d 0429bd3c 00410041 0x410041
0e 0429bd40 00410041 0x410041
0f 0429bd44 00410041 0x410041
10 0429bd48 00410041 0x410041
11 0429bd4c 00410041 0x410041
12 0429bd50 00410041 0x410041
13 0429bd54 00410041 0x410041
14 0429bd58 00410041 0x410041
15 0429bd5c 00410041 0x410041
16 0429bd60 00410041 0x410041
17 0429bd64 00410041 0x410041
18 0429bd68 00410041 0x410041
19 0429bd6c 00410041 0x410041
1a 0429bd70 00410041 0x410041
1b 0429bd74 00410041 0x410041
1c 0429bd78 00410041 0x410041
1d 0429bd7c 00410041 0x410041
1e 0429bd80 00410041 0x410041
1f 0429bd84 00410041 0x410041
20 0429bd88 00410041 0x410041
21 0429bd8c 00410041 0x410041
22 0429bd90 00410041 0x410041
23 0429bd94 00410041 0x410041
24 0429bd98 00410041 0x410041
25 0429bd9c 00410041 0x410041
26 0429bda0 00410041 0x410041
27 0429bda4 00410041 0x410041
28 0429bda8 00410041 0x410041
29 0429bdac 00410041 0x410041
2a 0429bdb0 00410041 0x410041
2b 0429bdb4 00410041 0x410041
2c 0429bdb8 00410041 0x410041
2d 0429bdbc 00410041 0x410041
2e 0429bdc0 00410041 0x410041
2f 0429bdc4 00410041 0x410041
30 0429bdc8 00410041 0x410041
31 0429bdcc 00410041 0x410041
32 0429bdd0 00410041 0x410041
33 0429bdd4 00410041 0x410041
34 0429bdd8 00410041 0x410041
35 0429bddc 00410041 0x410041
36 0429bedc 770b0d92 0x410041
37 0429bf80 76f7613a ntdll!RtlDebugAllocateHeap+0x31e
38 0429bf8c 76f791b4 verifier!AVrfpDphPostProcessing+0x1a
39 0429bfa4 770b10c0 verifier!AVrfDebugPageHeapSize+0xa4
3a 0429bfec 00000000 ntdll!RtlDebugSizeHeap+0x2b

漏洞证明:

http://drops.wooyun.org/wp-content/uploads/2014/12/BaiduSetupAx_0.rar
附上原始ActiveX控件给伙伴们研究。

修复方案:

1. axBaiduSetupCtrl1.PackageChannel 参数长度限制
2. 内部拷贝代码,检查目标地址的大小

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:6

确认时间:2014-12-03 12:13

厂商回复:

感谢提交,已通知业务部门处理

最新状态:

暂无