日前,国外安全研究组织Nikita Tarakanov称在Symantec PGP Whole Disk Encryption(完整磁盘加密软件)中发现0day漏洞,该软件的内核驱动程序pgpwded.sys包含一个覆盖任意内存的漏洞,可执行任意代码,受影响的软件版本是Symantec PGP Desktop 10.2.0 Build 2599。7 j* [3 R, [1 L: D# U8 ~
4 U2 j0 ?. x7 f' y9 k) _. m: u
Symantec通过博客文章证实该版本软件确实存在安全问题,但是利用起来比较繁琐,并且仅限于运行在Windows XP和Windows 2003的系统,成功利用该漏洞需要有计算机本地访问权限。
, k! a( ^* Q/ r- ~& g/ S4 }6 a
5 e C7 r2 n2 Z7 B- j研究员Kelvin Kwan称“该漏洞触发场景非常困难,成功利用必须进入一些错误状态,但是成功利用的话可能允许攻击者执行任意代码,获取更高级别的权限”。该漏洞详细细节如下:
' M; _2 e& w. R D
5 f: M4 b6 S; b9 I) n3 E / e( s. \. R- e% ~+ z
" k' ~* b7 O$ v5 h
function at 0x10024C20 is responsible for dispatching ioctl codes:
8 Z4 |) M- y' w( @3 ?8 }
5 _1 R6 d2 j0 ^* u# x3 b) F.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)+ C' ^' g2 q: b. N4 n
.text:10024C20 ioctl_handler_deep proc near ; CODE XREF: sub_10007520+6Ap7 _- R3 v9 e( Z3 Q0 i
.text:10024C20; }4 f0 Y5 H' t) R$ x% h
.text:10024C20 DestinationString= UNICODE_STRING ptr -3Ch4 x' @/ s# N* D' X
.text:10024C20 var_31 = byte ptr -31h
' p& ?3 ?6 B2 K6 ].text:10024C20 var_30 = dword ptr -30h
6 c$ B" E- F2 ~8 E+ g- p. m.text:10024C20 some_var = dword ptr -2Ch% I. ], J5 U9 y
.text:10024C20 var_28 = dword ptr -28h" o0 Q7 y) V& O
.text:10024C20 var_24 = byte ptr -24h7 S3 w0 M3 f" D4 y
.text:10024C20 var_5 = byte ptr -5
) Y9 }5 a0 {. \7 W9 ^) b8 ?) s- c6 N.text:10024C20 var_4 = dword ptr -4
# ^# d$ v( C5 C# j7 h' z! o6 S.text:10024C20 ioctl = dword ptr 8; H: N4 `% p, e x4 G: ~
.text:10024C20 inbuff = dword ptr 0Ch6 J4 r+ ] Q$ T p7 r; F
.text:10024C20 inbuff_size = dword ptr 10h
" ]9 j0 M8 k+ ~$ b2 r' t. e) Q.text:10024C20 outbuff_size = dword ptr 14h4 ~( e. m$ E& ^$ p6 C/ I8 z
.text:10024C20 bytes_to_return = dword ptr 18h
0 d% ~8 J( u& p! Q/ A6 w" g( h.text:10024C201 \: D- n1 t2 J' h% G- X
.text:10024C20 push ebp
/ S3 c! c0 |$ ?9 t9 C8 R- B.text:10024C21 mov ebp, esp
, E* l6 {, f( F) P# B/ S+ L. k/ a.text:10024C23 sub esp, 3Ch
' I# \0 b8 @% o% V" E) W9 J; x: P" ?( w.text:10024C26 mov eax, BugCheckParameter2
3 v- S8 g/ ?4 E4 a' ~.text:10024C2B xor eax, ebp
8 t, S+ S& ^, m: B.text:10024C2D mov [ebp+var_4], eax- r, Z7 E3 }; j" a5 x6 z5 I! S1 h% v
.text:10024C30 mov eax, [ebp+ioctl]* f2 \4 y% e: k* I3 R
.text:10024C33 push ebx
0 d! c( a- k0 [ U7 y.text:10024C34 mov ebx, [ebp+inbuff]
$ b- t- @5 W) C; }& _.text:10024C37 push esi
$ H* z6 U( R8 f; T& a7 S.text:10024C38 mov esi, [ebp+bytes_to_return]
" z5 W4 Z: b% Y9 F5 u.text:10024C3B add eax, 7FFDDFD8h8 }/ f2 l, h# ^+ S$ a
.text:10024C40 push edi) }7 w/ s2 Z3 C
.text:10024C41 mov edi, ecx3 C: f; r2 N5 l7 Z/ n3 K5 B
.text:10024C43 mov [ebp+some_var], esi, o. z& M l8 W( p5 I
.text:10024C46 mov [ebp+var_28], 0
/ A! g- X% U, { t9 z- G! h7 {$ U.text:10024C4D cmp eax, 0A4h ; switch 165 cases
3 w. r! P& r( k, D.text:10024C52 ja loc_10025B18 ; jumptable 10024C5F default case
5 I- l* r1 D& j8 G.text:10024C58 movzx eax, ds:byte_10025BF0[eax]
/ A8 |! y% N8 f* Q: l! T: { F.text:10024C5F jmp dsff_10025B50[eax*4] ; switch jump5 G* y' V1 I" p! t
2 ^. [5 l2 p1 g; o4 x$ K
[..]5 `0 G) C8 N" ?$ m; t d9 D" L6 z4 H
, T& [+ W! X9 R, s. }/ \; q
0x80022058 case: no check for outbuff_size == 0! <--- FLAW!; Z% J& d3 U0 x# v- v+ v
. a8 U+ @; k) J3 ^' B
.text:10024F5A lea ecx, [edi+958h]7 n0 Y3 Z3 C, Q5 z
.text:10024F60 call sub_100237B01 f7 g) v3 U4 I
.text:10024F65 mov [ebp+some_var], eax1 V& z/ z5 l! e$ `/ @, m' D$ r1 T
.text:10024F68 test eax, eax6 S# f# ~* `# Q' y; v
.text:10024F6A jnz short loc_10024F7D
9 [# D# h# j) A1 S.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh
7 h2 T1 r5 Q9 S2 J% @: ^" N/ m.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer* \/ G- `; F# {7 W6 {2 X" _7 l
- h3 V& j5 C; H) ^6 R: c# Wnext in IofComplete request will be rep movsd at pointer, that is under attacker's control7 I' ^6 u5 u `4 K8 A7 e
1 L1 k% e5 A: ^8 X7 i: p0 SDue 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. $ {( j3 X0 d- L3 f
# |& H2 Z, @/ n" N1 x; vSymantec表示在2月份的补丁包中修复该漏洞。
3 \7 R7 h$ I+ g- L+ K4 u2 R9 [! L* U) \! n
相关阅读:
" t3 I6 d; A8 ^" r1 x
0 b. S0 Q1 H3 m j# _/ R6 L赛门铁克的 PGP Whole Disk Encryption 为企业提供了全面的高性能完整磁盘加密功能,可对台式机、笔记本电脑和可移动介质上的所有数据(用户文件、交换文件、系统文件、隐藏文件等)进行完整磁盘加密。该完整磁盘加密软件可让数据免遭未经授权的访问,从而为知识产权、客户和合作伙伴数据提供强大的安全防护。受保护的系统可由 PGP Universal Server 集中管理,这就简化了部署、策略创建、分发和报告过程。
7 ?7 k C, D' g# r' l
4 S" c4 M. `$ H0 T1 K- D |