PaintShop Pro Photo X2 FPX文件解析堆溢出漏洞
受影响系统:
Corel PaintShop Pro Photo X2 Ultimate 12.50
描述:BUGTRAQ ID: 37980
PaintShop Pro Photo X2是一套兼具完整功能与简易操作的专业级数码影像编辑软件。
PaintShop Pro Photo X2错误的相信了FPX文件中用户控制的数据并在拷贝数据时用作了循环计数器,这可能导致堆溢出。
首先,应用以常数调用malloc()分配了0xC08字节长的缓冲区:
/-----
[Module: JPEGACC.dll]
095F4D97 |. 68 080C0000 PUSH 0C08
;size of the buffer to be allocated
095F4D9C |. E8 9F4D0000 CALL JPEGACC.095F9B40
;call to malloc()
095F4DA1 |. 83C4 04 ADD ESP,4
095F4DA4 |. 894424 10 MOV DWORD PTR SS:[ESP+10],EAX
;saves the pointer returned by malloc()
- -----/
之后将FPX文件中的数据拷贝到了上述分配的缓冲区。在以下反汇编代码可见FPX文件中0x1406偏移处所分配的字节被解释为内部循环的循环计数器,以确定应调用多少次拷贝操作。拷贝操作是在09264C50地址的调用中执行的,拷贝到缓冲区的数据也是部分从FPX文件的0x1416偏移处开始获取的。
/-----
[Module: JPEGACC.dll]
09264DD2 |> 8B6C24 24 /MOV EBP,DWORD PTR SS:[ESP+24]
09264DD6 |. 33D2 |XOR EDX,EDX
09264DD8 |. 8A55 00 |MOV DL,BYTE PTR SS:[EBP] ;
byte at offset 0x1406 in the FPX file (user controlled)
09264DDB |. 45 |INC EBP
09264DDC |. 8BFA |MOV EDI,EDX ;
EDI=inner loop counter, byte at offset 0x1406 (user controlled)
09264DDE |. 896C24 24 |MOV DWORD PTR SS:[ESP+24],EBP
09264DE2 |. 85FF |TEST EDI,EDI
09264DE4 |. 74 28 |JE SHORT JPEGACC.09264E0E
09264DE6 |. 7E 26 |JLE SHORT JPEGACC.09264E0E
09264DE8 |. 8D68 08 |LEA EBP,DWORD PTR DS:[EAX+8]
09264DEB |> 8B5424 28 |/MOV EDX,DWORD PTR SS:[ESP+28] ;
EDX starts pointing to offset 0x1416 of the FPX file
09264DEF |. 33C0 ||XOR EAX,EAX
09264DF1 |. 8BCE ||MOV ECX,ESI
09264DF3 |. 55 ||PUSH EBP
09264DF4 |. 8A02 ||MOV AL,BYTE PTR DS:[EDX] ;
reads bytes starting from offset 0x1416 (user controlled)
09264DF6 |. 46 ||INC ESI
09264DF7 |. 53 ||PUSH EBX
09264DF8 |. 42 ||INC EDX
09264DF9 |. 50 ||PUSH EAX
09264DFA |. 51 ||PUSH ECX
09264DFB |. 895424 38 ||MOV DWORD PTR SS:[ESP+38],EDX
09264DFF |. E8 4CFEFFFF ||CALL JPEGACC.09264C50 ;
copies user-controlled data to the buffer
09264E04 |. 83C4 10 ||ADD ESP,10
09264E07 |. 4F ||DEC EDI ;
is the loop counter == 0?
09264E08 |.^ 75 E1 |\JNZ SHORT JPEGACC.09264DEB ;
if not, repeat the copy operation
09264E0A |. 8B4424 10 |MOV EAX,DWORD PTR SS:[ESP+10]
09264E0E |> D1E6 |SHL ESI,1
09264E10 |. 43 |INC EBX
09264E11 |. 83FB 08 |CMP EBX,8
09264E14 |.^ 7E BC \JLE SHORT JPEGACC.09264DD2
- -----/
内部循环的每次迭代都会将0x80个对象拷贝到缓冲区,每次大小为8个字节,也就是大小为0xC08字节的缓冲区最多只能处理三次迭代,因此如果用户受骗打开的FPX文件中0x1406偏移处的字节值大于3就可以触发溢出,向缓冲区末尾后的某些位置写入可控字节。在退出外部循环后,应用会进入另一个循环,向缓冲区写入几个值为0的dword,此处的迭代次数为拷贝到缓冲区的对象数,也就是乘以0x80。
/-----
[Module: JPEGACC.dll]
09264E26 |. 8BD6 MOV EDX,ESI ;
EDX = number of objects copied to the buffer
09264E28 |> C701 00000000 /MOV DWORD PTR DS:[ECX],0
09264E2E |. 83C1 08 |ADD ECX,8
09264E31 |. 4A |DEC EDX
09264E32 |.^ 75 F4 \JNZ SHORT JPEGACC.09264E28
- -----/
如果所处理的FPX文件如上所述触发了缓冲区溢出,这个循环也会写过缓冲区的限制,破坏内存内容,包括临近的块元数据,最终在应用试图通过调用 ntdll.RtlFreeHeap释放所分配的缓冲区时导致内存访问破坏。
/-----
[Module: ntdll.dll]
7C9108D3 8902 MOV DWORD PTR DS:[EDX],EAX
Access violation when writing to [00000000]
- -----/
<*来源:Francisco Falcon
链接:http://marc.info/?l=bugtraq&m=126507516309185&w=2
*>
建议:厂商补丁:
Corel
-----
目前厂商还没有提供补丁或者升级程序,我们建议使用此软件的用户随时关注厂商的主页以获取最新版本:
http://www.corel.com/servlet/Satellite/us/en/Product/1184951547051
- (MS09-051)Microsoft Windows Media Runtime文件压
- OpenLDAP CA SSL证书验证漏洞
- Linux Kernel 64位内核寄存器内存泄露漏洞
- (MS09-064)Microsoft Windows License Logging服务
- Hyperic HQ跨站脚本和脚本注入漏洞
- Kaspersky Anti-Virus kl1.sys驱动本地拒绝服
- FreeBSD fifo_vnops.c资源泄漏本地拒绝服务
- HP Operations Dashboard默认管理账号口令漏
- (MS10-002)Microsoft IE表格布局Col标签缓存
- GNU Gzip动态Huffman解压远程代码执行漏洞
相关热点
更多相关
- (MS09-051)Microsoft Windows Media Runtime文件压
- OpenLDAP CA SSL证书验证漏洞
- Linux Kernel 64位内核寄存器内存泄露漏洞
- (MS09-064)Microsoft Windows License Logging服务
- Hyperic HQ跨站脚本和脚本注入漏洞
- Kaspersky Anti-Virus kl1.sys驱动本地拒绝服
- FreeBSD fifo_vnops.c资源泄漏本地拒绝服务
- HP Operations Dashboard默认管理账号口令漏
- (MS10-002)Microsoft IE表格布局Col标签缓存
- GNU Gzip动态Huffman解压远程代码执行漏洞
- (MS09-052)Microsoft Windows Media Player ASF文件
- MyBB MYPS插件username参数跨站脚本执行漏
常见问题
- 服务器为什么要做双机热备?
- 浅析网络安全审计原理和技术
- 怎样防止域欺骗——阻止域名劫持
- 域名劫持是怎样劫持的?
- LINUX修改、增加IP的方法
- MySql 常用命令集
- 禁止ICP空链接入侵,删除默认共享.bat
- 服务器被黑,被写入隐藏账户怎么查啊?
服务项目
- 服务器安全维护服务
- 服务器安全加固服务
- 服务器安全设置服务
- 服安信息安全技术培训
- 服务器安全评估服务
- 服务器安全应急响应
- 服务器入侵检测服务
- 服务器安全维护包年
- 网站入侵检测服务
- 反黑、反DDOS攻击专案
成功案例
联系我们
- 专家信箱:sec@serversteam.com
- 专家热线:13542743816
- 安全客服:0755-82894338
- 应急传真:0755-82894338
- 地址:深圳市福田区群星广场A座
安全应急响应中心:


