MS16-087 のコード解析
プリンタスプーラーの脆弱性
L74C00E15: push [L74C3C2D4] call SUB_L74C00DAA mov esi,[KERNEL32.dll!DeleteCriticalSection] push L74C3C340 call esi push L74C3C880 call esi call SUB_L74C00E3B jmp L74BFE7F3 |
追加コード1
SUB_L74C07FB9: push 00000060h push L74C07FD0 call SUB_L74BF2E7F xor eax,eax mov [ebp-20h],eax mov [ebp-2Ch],eax mov [ebp-44h],eax mov [ebp-1Ch],eax mov [ebp-54h],eax mov [ebp-4Ch],eax mov [ebp-24h],eax mov ebx,[ebp+18h] push ebx call SUB_L74C209DB mov [ebp-58h],eax mov edi,L74C3C880 push edi mov esi,[KERNEL32.dll!EnterCriticalSection] call esi cmp dword ptr [ebp-58h],00000001h jnz L74C1645E L74C1643D: cmp word ptr [L74C3F154],0000h jbe L74C1645E push edi call [KERNEL32.dll!LeaveCriticalSection] push 000001F4h call [KERNEL32.dll!Sleep] push edi call esi jmp L74C1643D L74C1645E: xor eax,eax mov ax,[L74C3F154] inc eax mov [L74C3F154],ax push edi call [KERNEL32.dll!LeaveCriticalSection] jmp L74C07FDC L74C16479: test eax,00020000h jz L74C07FEA test byte ptr [ebp+15h],10h jnz L74C07FEA mov dword ptr [ebp-38h],00000001h ;************ jmp L74C07FEE L74C07FDC: L74C1666A: |
コード2
SUB_L74C23AB3: mov edi,edi push ebp mov ebp,esp push esi   ; mov esi,[KERNEL32.dll!CreateFileW] push edi push [ebp+20h] push [ebp+1Ch] push [ebp+18h] push [ebp+14h] push [ebp+10h] push [ebp+0Ch] push [ebp+08h] call esi mov edi,eax cmp edi,FFFFFFFFh jnz L74C23B0F call [KERNEL32.dll!GetLastError] cmp eax,00000050h jnz L74C23B0F push [ebp+08h] call [KERNEL32.dll!DeleteFileW] test eax,eax jz L74C23B0F push [ebp+20h] push [ebp+1Ch] push [ebp+18h] push [ebp+14h] push [ebp+10h] push [ebp+0Ch] push [ebp+08h] call esi mov edi,eax L74C23B0F: mov eax,edi pop edi pop esi pop ebp retn 001Ch |
コード3 call CreateFileW が丸々置き換わっている
脆弱性の修正は3つのファイルに及んでいるのだけど、これはそのうちの一つ
localsp.dll の変更点の解析
操作が失敗すると同時に複数のプリンター キューをアップグレードすると、Windows Server 2003 または Windows XP を実行しているプリンター クライアント プリンター ドライバーのアップグレードします。
新しいバージョンは SerializeDriverInstallsAndUpgrades キーを参照してるから、このアップデートも適用されてる模様。
ちょっとややこしい・ω・
Comments