2 {, o3 z. F. y' i5 ~[..] $ u7 T2 ~% A0 x3 i* A" S0 e5 E0 T5 m; s9 ^: o, d% v" L4 }
0x80022058 case: no check for outbuff_size == 0! <--- FLAW! ! k7 X4 R0 n8 \ f0 y9 ^0 G4 ~3 Z 6 k, \, _" P& y! N l+ D.text:10024F5A lea ecx, [edi+958h]4 s3 p4 D I9 |, k
.text:10024F60 call sub_100237B0 9 H& U% y$ U$ A/ O+ i.text:10024F65 mov [ebp+some_var], eax 0 I1 t7 P4 _% g8 X8 t. m9 ^, Y1 m.text:10024F68 test eax, eax & C2 R; P" ~2 f3 Q6 s0 [+ K1 ~5 F.text:10024F6A jnz short loc_10024F7D% v) t- I' w Z4 _/ o
.text:10024F6C mov dword ptr [ebx], 0FFFFCFFAh/ b$ b( o3 @1 R+ ~5 G
.text:10024F72 mov dword ptr [esi], 10h <--- bytes to copy to output buffer) z' Q* v9 n& v1 q6 S
) f& j$ Y3 T, `, Z8 `2 Tnext in IofComplete request will be rep movsd at pointer, that is under attacker's control 3 ^7 @! A& x2 L; L4 @( [" x; ^2 M! T8 _& q$ N6 l7 s
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. ' Y5 L9 u/ N/ Y0 C2 G# F& g