受影響系統:
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結構)。如果用特制的內存覆蓋這些結構,就可以強制內核執行內存破壞,導致完全控制內核執行流。