日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。
: N2 [% N* ?$ K% E# U& G: L
S# P- R3 j4 o* K, H" c0 gSymantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
& X: w! k4 D5 M: W0 q" y( K; {+ }1 \. p( w
研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:
) O# u g6 B0 x; \8 q% a- W' _8 M: {' Z
. J; f9 o) S! s* I" ~' a. G4 C# E4 ~
function at 0x10024C20 is responsible for dispatching ioctl codes:
3 G+ D, I( Y- l+ R" V
: {. u( d* e6 P, J+ y.text:10024C20 ; int __thiscall ioctl_handler_deep(int this, int ioctl, PVOID inbuff, unsigned int inbuff_size, unsigned int outbuff_size, PDWORD bytes_to_return)7 y" d1 F" {/ [" J7 r
.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap5 o( I3 v/ j- g% o6 H7 U3 c
.text:10024C20: w( g7 D! Q$ {. ~' d, \) W
.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch* D# D' b- U6 H% e3 u8 m* C- B
.text:10024C20 var_31 = byte ptr -31h: u |5 V$ [2 v$ ~3 w+ s( R' S1 Y6 z
.text:10024C20 var_30 = dword ptr -30h- [9 c- F$ v; l8 ]/ R& H
.text:10024C20 some_var = dword ptr -2Ch
$ w3 @( U, u+ m+ Z, l* U7 |& y.text:10024C20 var_28 = dword ptr -28h; l1 n; ^* N+ W4 d! K Y
.text:10024C20 var_24 = byte ptr -24h: p6 [. p$ J+ o/ l& i, l
.text:10024C20 var_5 = byte ptr -5 B5 W& N7 w- L; j$ W% p, W
.text:10024C20 var_4 = dword ptr -4/ }3 y2 m, g2 v6 L
.text:10024C20 ioctl = dword ptr 8
" j& q X; J# i3 p.text:10024C20 inbuff = dword ptr 0Ch
. d: P$ U% R+ D.text:10024C20 inbuff_size = dword ptr 10h
& S% p$ X$ e' h. O.text:10024C20 outbuff_size = dword ptr 14h
6 o) t' l2 a) I: s' B.text:10024C20 bytes_to_return = dword ptr 18h/ K7 R! i- u# ~$ y" l, g
.text:10024C208 q8 ~( _- b) @& Y+ g% e% R- @
.text:10024C20 push ebp: x0 V" ?& h4 N' L$ L
.text:10024C21 mov ebp, esp! _; v1 L" b: z3 J
.text:10024C23 sub esp, 3Ch
" o) \ y# V- o& j/ y.text:10024C26 mov eax, BugCheckParameter2( x% z1 B" s) @2 D" F5 L
.text:10024C2B xor eax, ebp0 E( f7 J" u2 U& `: [
.text:10024C2D mov [ebp+var_4], eax
+ b4 G; G# ^$ T" |/ n6 n.text:10024C30 mov eax, [ebp+ioctl]' E8 B4 j5 @. p2 g8 t! w/ J2 h
.text:10024C33 push ebx3 {6 L( o& k, s$ v: }; d
.text:10024C34 mov ebx, [ebp+inbuff]- o3 Q( j* v `; B
.text:10024C37 push esi
7 {* I! |3 U& @& D8 V, @.text:10024C38 mov esi, [ebp+bytes_to_return]) ?, f5 a2 s/ [& H1 o& ]$ i+ \! _
.text:10024C3B add eax, 7FFDDFD8h
0 I. M, K; {* W6 \3 Q" t.text:10024C40 push edi a. m( i+ X2 ~( M0 b
.text:10024C41 mov edi, ecx" x( t9 c. C3 x9 I& E' D. a" n: ^
.text:10024C43 mov [ebp+some_var], esi( H% P& M6 a4 \1 q' r0 C3 w( T
.text:10024C46 mov [ebp+var_28], 0) ?2 @( t# l( K8 B4 ?! g
.text:10024C4D cmp eax, 0A4h ; switch 165 cases
5 a" b# x+ d4 v2 b2 C.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
- z9 E, A. m# P3 z8 ~& `0 f+ @; ^" \.text:10024C58 movzx eax, ds:byte_10025BF0[eax]# g6 Q+ _) B. Q
.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump' F2 ~7 [' E5 I. A8 v7 T' r
6 Q9 o8 }% p0 @& U* I
[..]
( v @& w8 v3 E0 e+ d1 k( W
7 K" _& @+ |' S" X0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
! g4 c# h! o+ l# Q. o7 [# ]; r- a( Y; E/ {; J L" i2 Q
.text:10024F5A lea ecx, [edi+958h]5 O- n+ ^) k/ {+ g
.text:10024F60 call sub_100237B0) _; F7 w8 @9 m4 V% h
.text:10024F65 mov [ebp+some_var], eax0 L. J- d ~, G8 K0 s! c+ K Q
.text:10024F68 test eax, eax& J, l7 m, T0 B) }' t0 U0 f6 M
.text:10024F6A jnz short loc_10024F7D" v! F5 X3 @8 e
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh% n1 ^. d1 n E; V9 ~
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer5 T6 e$ y O5 y
/ d$ I7 X, u5 e& m- N7 f
next in IofComplete request will be rep movsd at pointer, that is under attacker's control
& C8 J4 `$ [$ e
& D; L' O3 i# B% q3 w/ Y! tDue the type of vulnerability (METHO_BUFFERED with output_size == 0) exploit works only on Winows XP/2k3, cause in later Windows OS I/O manager doesn't craft IRP if ioctl is METHOD_BUFFERED and output_size == 0. 6 g- w3 _8 y2 d6 v6 X& K
5 g; k, p' a4 L( N* i4 x% K& f/ P
Symantec表示在2月份的补丁包中修复该漏洞。3 N) S, {% K% \8 g: X" n
5 T0 H1 K( {; ?- |
相关阅读:
# O% a9 j0 p4 V) e( C$ d9 Q7 U
9 f) M( _1 t% P; J# }$ Y; ?赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。8 o1 j2 O/ `0 h( \8 Q% l `, r3 ]5 H
, _+ T) j* d& o$ K9 b$ A) N |