您现在的位置: 万盛学电脑网 >> 网络安全 >> 杀毒软件 >> 熊猫卫士 >> 正文

熊猫卫士2008 CPoint.sys发现内存破坏漏洞

作者:佚名    责任编辑:admin    更新时间:2022-06-22

受影响系统:

Panda Internet Security 2008

Panda Antivirus+Firewall 2008

描述:

BUGTRAQ ID: 28150


熊猫卫士是熊猫系列杀毒软件,支持对多种文件格式进行病毒分析。


多个熊猫系列杀毒软件所捆绑的cpoint.sys内核驱动中处理IOCTL请求的代码存在漏洞,本地攻击者可能利用此漏洞提升权限。


该驱动的0xba002848 IOCTL调用未经充分验证便接受了用户提供的输入,导致越界写入内核内存。


cpoint.sys的反汇编(Windows Vista 32位版):


[...]

.text:00012633 loc_12633:

.text:00012633 mov edx, 0BA002848h <-- (1)

.text:00012638 cmp ecx, edx

.text:0001263A ja loc_12946

[...]

.text:00012640 jz loc_128BE

[...]

.text:000128BE loc_128BE:

.text:000128BE cmp [ebp+IOCTL_INPUT_SIZE], 1008h <-- (2)

.text:000128C5 jb loc_12A7D

[...]

.text:000128CB mov esi, [ebp+IOCTL_INPUT_DATA] <-- (3)

.text:000128CE cmp dword ptr [esi], 3F256B9Ah <-- (4)

.text:000128D4 jnz loc_12A7D

[...]

.text:000128FF xor eax, eax

.text:00012901 cmp [esi+8], eax <-- (5)

.text:00012904 jbe short loc_1291B

[...]


(1) 有漏洞的IOCTL调用

(2) IOCTL输入大小检查

(3) 用户提供的数据拷贝到了esi

(4) + (5) 次要的输入数据检查


从这时其有两条不同的漏洞代码路径,如下所述:


漏洞代码路径1:


[...]

.text:00012906 lea ecx, [esi+0Ch] <-- (6)

[...]

.text:00012909 loc_12909:

.text:00012909 mov edx, [ecx] <-- (7)

.text:0001290B mov OVERWRITTEN_DATA[eax*4], edx <-- (8)

.text:00012912 inc eax

.text:00012913 add ecx, 4

.text:00012916 cmp eax, [esi+8] <-- (9)

.text:00012919 jb short loc_12909

[...]


(6) 一些用户控制的数据拷贝到了ecx

(7) 用户控制数据拷贝到了edx

(8) 在OVERWRITTEN_DATA内存位置拷贝用户控制数据

(9) 用户可控拷贝数据大小


这可能导致越界写入内核内存。


漏洞代码路径2:


[...]

.text:0001291B loc_1291B:

.text:0001291B xor eax, eax

.text:0001291D cmp [esi+10Ch], eax <-- (10)

.text:00012923 jbe loc_129B4

[...]

.text:00012929 lea ecx, [esi+110h] <-- (11)

[...]

.text:0001292F loc_1292F:

.text:0001292F mov edx, [ecx] <-- (12)

.text:00012931 mov OVERWRITTEN_DATA2[eax*4], edx <-- (13)

.text:00012938 inc eax

.text:00012939 add ecx, 4

.text:0001293C cmp eax, [esi+10Ch] <-- (14)

.text:00012942 jb short loc_1292F

[...]

(10) 用户控制数据的次要检查

11) 一些用户控制的数据拷贝到了ecx

(12) 用户控制数据拷贝到了edx

(13) 在OVERWRITTEN_DATA2内存位置拷贝用户控制的数据

(14) 用户可控拷贝数据的大小

这可能导致越界写入内核内存。

上述两种情况都可以将任意数量的用户控制数据写入到内核内存。由于所覆盖的数据属于cpoint.sys内核驱动的数据部分,因此可以控制临近的数据结构(如某些KEVENT结构)。如果用特制的内存覆盖这些结构,就可以强制内核执行内存破坏,导致完全控制内核执行流。