日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。
# h+ p( [8 Z# R' q9 ]- x
! f# O6 w9 C! u9 M1 ~1 e5 x7 x) D5 D9 oSymantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
/ p+ R/ `/ v2 P2 [$ ?( A# O, O* |4 }$ y. y9 |
研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:
: n9 B Q! L. ^. s q' \: i
9 O" s4 s; O" f4 u! z$ F : M. w) C$ _; R0 ` {! A
3 ?5 q9 J3 e! D A: f
function at 0x10024C20 is responsible for dispatching ioctl codes:
' N0 ]! z# z: n4 U: C& Y7 s$ B9 ]% U+ u P
.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)
6 F/ J8 }: b( w: Q4 {$ d0 `3 h8 ].text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap
+ b9 N8 o' l+ R% R/ c, _1 ]' Y$ e.text:10024C20
. E0 b( ]$ y% P2 `9 b t9 I, _.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch
( F V$ l y! m2 y2 S0 `/ c& K.text:10024C20 var_31 = byte ptr -31h
0 C9 m8 T3 i) F- s. l.text:10024C20 var_30 = dword ptr -30h; x$ c; a: q% A( |- ~0 \
.text:10024C20 some_var = dword ptr -2Ch k2 }1 W! R9 d, B; @
.text:10024C20 var_28 = dword ptr -28h
+ @, B" I* s" `/ z! `# n( F( C.text:10024C20 var_24 = byte ptr -24h
( j. [2 c( ]) K* Z4 i) s6 {3 j.text:10024C20 var_5 = byte ptr -5
/ s+ e9 K9 v. y# t4 v.text:10024C20 var_4 = dword ptr -41 j) Q. V3 h# l0 ?. t9 J% l9 s
.text:10024C20 ioctl = dword ptr 8+ [) z2 J9 v- h5 [+ T% V" ?
.text:10024C20 inbuff = dword ptr 0Ch
) a$ ^% ?0 w7 {4 u5 ?# V.text:10024C20 inbuff_size = dword ptr 10h
7 ]* F) J9 H0 J- z.text:10024C20 outbuff_size = dword ptr 14h
; S( F! A; I# z. d$ \. d.text:10024C20 bytes_to_return = dword ptr 18h
1 E! i, q/ \" H* _.text:10024C20
6 t: M& I% r3 N P2 F+ ^- W) Z; ~.text:10024C20 push ebp
: {4 A% Z4 T( g+ I$ g Q" u.text:10024C21 mov ebp, esp
+ B S ]8 r( h2 k3 p. Z.text:10024C23 sub esp, 3Ch
# `( e$ R7 @# s3 p4 M0 U9 f" m# `.text:10024C26 mov eax, BugCheckParameter2
% a3 ?/ o/ x7 ~& L/ C, e.text:10024C2B xor eax, ebp
6 m" K7 `' y. _% L4 A/ U8 n.text:10024C2D mov [ebp+var_4], eax
* y: ]- L- V; l5 s1 ^/ _.text:10024C30 mov eax, [ebp+ioctl]0 w* }4 u# z, t
.text:10024C33 push ebx
! G- r5 r$ m1 S.text:10024C34 mov ebx, [ebp+inbuff]) j( }3 L4 L3 I: J% s* u
.text:10024C37 push esi& J5 ]0 Y% A7 S# E2 K& c) H
.text:10024C38 mov esi, [ebp+bytes_to_return]2 Z* b) S- I2 P( r) s
.text:10024C3B add eax, 7FFDDFD8h
" P$ W+ a+ \5 D, [.text:10024C40 push edi- K! r0 ~9 }" O) e" D1 d2 J
.text:10024C41 mov edi, ecx% c4 i9 p+ ?( x& Y1 B4 L
.text:10024C43 mov [ebp+some_var], esi
2 ]$ P( V& _- V( r.text:10024C46 mov [ebp+var_28], 0$ w0 u( y2 L4 x: E8 U& [% z6 @
.text:10024C4D cmp eax, 0A4h ; switch 165 cases
0 w4 p1 y* G8 ?, Z, M1 ]6 w.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
7 g+ m! y" |* N3 [/ v% E7 \.text:10024C58 movzx eax, ds:byte_10025BF0[eax]; w" L8 y- D6 \; ^1 n
.text:10024C5F jmp ds ff_10025B50[eax*4] ; switch jump* d# z3 q' O1 e
/ T6 {* E" l3 n1 i5 O ?7 S% e+ M[..]
& D5 h% o: p5 ~: |
) |, {' c. x; T- ]$ h: n0x80022058 case: no check for outbuff_size == 0! <--- FLAW!( H* \" H# f# T" J# U. b+ e
9 J S# a) i" C2 n9 A' a
.text:10024F5A lea ecx, [edi+958h]1 D4 Z0 ~) M8 n8 K
.text:10024F60 call sub_100237B0
. I/ Q+ E& ]0 j.text:10024F65 mov [ebp+some_var], eax/ f3 L' E. Q& A h& I" ], ^" b2 h
.text:10024F68 test eax, eax
! _' q u. J" `6 [6 G5 y.text:10024F6A jnz short loc_10024F7D- A X; K1 Z4 O1 Y2 o% C5 ^
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh
% L1 q2 D0 |- k ?/ Z- C4 {& Q) h.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer
$ w o7 F1 K( x
3 W* R$ R: s: Z% O% C/ Lnext in IofComplete request will be rep movsd at pointer, that is under attacker's control' ~6 E8 U+ s3 j/ V* [; U* X
: h [, m' _& d
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. ( E, M& t% U/ M; n; w* p
+ X1 S7 s- q& |' p/ j" E3 iSymantec表示在2月份的补丁包中修复该漏洞。3 ^5 {% s- k J' \( M7 `) W
0 J8 Q/ j3 K3 r8 U
相关阅读:
* W$ ~7 h, [7 S: M. T& S* I8 u& p. v3 P" P$ w1 x" h
赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。
5 v; d, M- F- g. H0 |! D7 s8 _. U
: g e- ?5 n. M1 E; D8 Q |