日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。
/ o: j% D5 v3 h0 j; E6 ?2 F8 |) j3 I6 E0 q3 t# |3 D4 y8 N% D
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
3 y: ^1 T- o( {5 g6 R7 ?, E( D4 o- \6 f) ~$ B
研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:& I @7 x* j2 _
* V. O& F/ p* `! T! l - K h/ z5 X0 X! a5 q
: D0 z; a6 \0 N2 z2 T$ T, q
function at 0x10024C20 is responsible for dispatching ioctl codes:
. v4 y7 v% |, M3 `" G
- K" t" i3 |! f9 ~6 ^3 k7 Q.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)
0 C' a1 [. t2 g+ ].text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
}5 X) N9 n: x0 f- ]# u.text:10024C20
% B8 v7 D# f- N9 o; i: d4 G4 N- C; y.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch
% i, l- m2 r$ D: S& C.text:10024C20 var_31 = byte ptr -31h. } m, n& h% T
.text:10024C20 var_30 = dword ptr -30h" m* o! [: U; Y0 K8 k' C. N
.text:10024C20 some_var = dword ptr -2Ch9 a$ I9 Q# a9 m1 k4 t7 ?0 ~
.text:10024C20 var_28 = dword ptr -28h; s; p; e) Z8 }/ ^/ U) |* G
.text:10024C20 var_24 = byte ptr -24h
; d5 k' `! m1 K% W& @$ e, r.text:10024C20 var_5 = byte ptr -59 w( E1 T: F; ?: E0 b
.text:10024C20 var_4 = dword ptr -4& y* X X: r' I+ g& S+ w( [( S
.text:10024C20 ioctl = dword ptr 8: ^; f3 Q9 u9 ^! Q+ h
.text:10024C20 inbuff = dword ptr 0Ch
* D3 Z* m) l+ W/ J.text:10024C20 inbuff_size = dword ptr 10h/ e. i+ Z8 u; w* V
.text:10024C20 outbuff_size = dword ptr 14h5 g, R( J: m8 M, r% o
.text:10024C20 bytes_to_return = dword ptr 18h
! a- R* H: W2 @% K# k6 }.text:10024C20
( f+ z$ p; u( U q.text:10024C20 push ebp. `# Z. z$ {5 X# n
.text:10024C21 mov ebp, esp* F. }, m! b4 @: T2 o7 R/ q m) T
.text:10024C23 sub esp, 3Ch% V- ]$ v( U5 l) \5 Y
.text:10024C26 mov eax, BugCheckParameter29 X9 \; W1 }8 w, _1 S, f
.text:10024C2B xor eax, ebp
% o/ e$ J5 z! ^! `4 V# G l' h.text:10024C2D mov [ebp+var_4], eax
# A* z4 y0 P' k) T.text:10024C30 mov eax, [ebp+ioctl]. m0 h4 f; r/ o2 K
.text:10024C33 push ebx& Q( {& z$ G8 ^3 @# P: C% V* t8 s
.text:10024C34 mov ebx, [ebp+inbuff]
& {8 g' |1 W N' m. s+ N% ]" n, {.text:10024C37 push esi
5 q7 f4 N* Q3 A.text:10024C38 mov esi, [ebp+bytes_to_return]& C" }/ Y. o. {" i; Y" `, E
.text:10024C3B add eax, 7FFDDFD8h. w ]" N: {6 q
.text:10024C40 push edi4 u F0 b) [! Z6 Q2 {8 A4 |. @9 [
.text:10024C41 mov edi, ecx. j* v+ y5 s/ T; |7 b+ T
.text:10024C43 mov [ebp+some_var], esi
% b1 }/ |. L6 V# |3 ?.text:10024C46 mov [ebp+var_28], 0" Q; H( v$ B. c
.text:10024C4D cmp eax, 0A4h ; switch 165 cases
0 X1 {6 Q8 J, P.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case) a& E" U* B) C* r+ U# K
.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
# d# t$ A9 E/ u7 [' o.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump
; n. K8 l( N7 L* M3 C1 N
D* }" k/ P1 P" R( [2 T7 z[..]) E- s( p3 B( F* A2 c/ o
; h& g k, V5 f$ y% ~6 }
0x80022058 case: no check for outbuff_size == 0! <--- FLAW!
) X& G T0 Q9 u+ T: a! `; n1 @, e9 r |! J
.text:10024F5A lea ecx, [edi+958h]
3 C+ P9 b0 x- }. a, b7 n.text:10024F60 call sub_100237B0
! `+ f4 [" ]- O6 O8 n& [.text:10024F65 mov [ebp+some_var], eax& C$ L# c6 u u j+ {. Y; q
.text:10024F68 test eax, eax9 g3 t9 Y' q, L+ v0 A$ V4 U
.text:10024F6A jnz short loc_10024F7D
. R# }( o; {+ H5 A0 B.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh) z$ x) z. v# m. b, u
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer5 `3 O. X( a* l' Q+ k' y
# V+ J2 B; ^& I1 A. {! B/ K7 enext in IofComplete request will be rep movsd at pointer, that is under attacker's control4 ]0 m( q4 F0 _) `1 L, A
, \- I% s' a K# T! T
Due 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. ; u6 b! Z1 {1 j& u
* Y( i. ~; _& ?' A. Z0 ~ s% WSymantec表示在2月份的补丁包中修复该漏洞。7 _' }9 c2 b) w& u, w
6 O* h! p; X$ k+ |8 h; Y8 @
相关阅读:! D9 M5 A% _4 x8 n- {
' q$ P5 A& C0 e, q4 _7 k( _9 {
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。; I; s6 }: C; O
6 r1 d, o% Z2 h- S o5 B |