jscript9.dllを使用するように変更する

Microsoft Internet Explorer の未修正の脆弱性 (CVE-2020-0674) に関する注意喚起の話。

MSから提示されている回避策は、everyoneからjscript.dllへのアクセス権を奪うこと。

Restrict access to JScript.dll

For 32-bit systems, enter the following command at an administrative command prompt:

    takeown /f %windir%\system32\jscript.dll
    cacls %windir%\system32\jscript.dll /E /P everyone:N

For 64-bit systems, enter the following command at an administrative command prompt:

    takeown /f %windir%\syswow64\jscript.dll
    cacls %windir%\syswow64\jscript.dll /E /P everyone:N
    takeown /f %windir%\system32\jscript.dll
    cacls %windir%\system32\jscript.dll /E /P everyone:N

How to undo the workaround

For 32-bit systems, enter the following command at an administrative command prompt:

    cacls %windir%\system32\jscript.dll /E /R everyone  

For 64-bit systems, enter the following command at an administrative command prompt:

    cacls %windir%\system32\jscript.dll /E /R everyone
    cacls %windir%\syswow64\jscript.dll /E /R everyone

適用すると、JScriptの実行にjscript.dllを使用しているWSHではJScriptが実行できなくなってしまう。 個人的にとても困る。

jscript.dllをアクセス禁止にした場合

なので、WSHがJScriptを実行する際に参照するレジストリを書き換えて、今回の脆弱性の対象にはなっていないjscript9.dllを利用するように変更してみる。

レジストリの書き換えは自己責任で!※おまじない

それにはHKEY_LOCAL_MACHINE\SOFTWARE\Classes\JScript\CLSID(既定)に指定するCLSIDを{16d51579-a30b-4c8b-a276-0ff4dc41e755}へ書き換える。regファイル的には以下の通り。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\JScript\CLSID]
@="{16d51579-a30b-4c8b-a276-0ff4dc41e755}"

これで上記回避策を適用した後でもJScriptを実行できるようになる。

jscript9.dllに変更すると

WScript.Echo(ScriptEngine() + '/' + [ScriptEngineMajorVersion(), ScriptEngineMinorVersion(), ScriptEngineBuildVersion()].join('.'));

ちなみにレジストリ書き換え前にjscript.dllで表示されるバージョンは5.8.16384だった。

もし不都合がありjscript.dllへ戻すときはCLSIDを元に戻せばよい。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\JScript\CLSID]
@="{f414c260-6ac0-11cf-b6d1-00aa00bbbb58}"