脆弱性について


 JPCERTコーディネーションセンター(JPCERT/CC)より、Apsaly の 脆弱性に関する連絡がありました。勧告に従い、以下の通り、掲示します。

■外部プログラム集からのシステムアプリ実行に関する脆弱性

識別番号:JVN#71138390
公開日: 2010.10.21
該当版: Apsaly 3.70 〜 1.20
脅威:  偽装ファイルの実行の可能性
対策:  Apsaly 3.74 以降に更新等
●説明

 Apsaly のメニューバーの「ツール」下にある「外部プログラム集」内には、 いろいろな項目があります。そのうちの「エクスプローラ」を選ぶと、 Windows の「エクスプローラ」が起動されます。また、同様に、「電卓」を選ぶと、 Windows の「電卓」が起動されます。

 これらの起動では、それぞれ、explorer と calc という名前のファイルが 実行されるようになっています。この実行ファイルは、絶対パスで指定されていないので、 所定の幾つかのディレクトリーから検索されて、最初に見つかったものが採用されます。

 そもそも、「エクスプローラ」と「電卓」の実行ファイルは、Windows の システムディレクトリーに格納されています。ところが、この起動の際には、 その格納ディレクトリーよりも、カレントディレクトリーのほうが先に検索されます。 そのため、もし、カレントディレクトリーに、それと同じ名前の偽装ファイルがあると、 その偽装ファイルのほうが実行されてしまいます。 これが、今回指摘された脆弱性です。

 ちなみに、このような原理に基づく脆弱性は、Apsaly 以外でも、外部プログラムを 起動するソフトなら、充分に有り得ますので、ご注意ください。

 なお、カレントディレクトリーに偽装ファイルを、どのようにして忍ばせるかと いう問題もありますが、これは、Apsaly 側の不備ではないのと、悪意の利用を防ぐ ために、ここではその詳細に触れません。

●対策

 本脆弱性を解消するには、実行対象のファイルの指定を、絶対パスに変えます。 そうすれば、その場所が1箇所に限定されるので、もはや、 カレントディレクトリーから偽装ファイルが実行される余地はなくなります。

 この対策は、Apsaly 3.74 で行なわれています。 そのため、Apsaly をそれ以降のバージョンに更新して頂ければ、この脆弱性は解消されます。 なお、Apsaly 3.74 では、この脆弱性だけでなく、作者自身が発見した同種の別の脆弱性も 根本的に解消されています。これに関しては、後述します。

 現在お使いのバージョンをどうしても更新できない場合には、次のようにします。 但し、これは、この脆弱性を回避するだけものです。

 「外部プログラム集」から実行される項目は、Apsaly がインストールされている フォルダ内にある XcmdList.ctx という名前のテキストファイルに記述されています。 そのため、本脆弱性の解消は、このファイル内の下記の2行を書き換えるだけで済みます。

≪修正前≫
エクスプローラ  -D000SR  explorer /e,"$d"
電卓       -D000SR  calc
≪修正後≫
エクスプローラ  -D000SR  %SystemRoot%\explorer.exe /e,"$d"
電卓       -D000SR  %SystemRoot%\system32\calc.exe

なお、ここでは、各区切りの空白に、全角の空白を使っていますが、 実際には、TAB コードにする必要があります。また、 Windows98 では、環境変数の %SystemRoot% が使えないので、 この部分を、実際の絶対パスに置き換える必要があります。

●補足

 今回ご指定頂いた脆弱性に関連して、他にも同種の脆弱性がないか、作者自身でも調査しました ところ、次のような脆弱性が存在することが分かりました。

 カレントディレクトリーに、CMD.EXE( Windows98 では、COMMAND.COM )という名前の 偽装ファイルを置いて、「外部プログラム集」内の
  ・ファイル一覧(dir)
  ・選択部を昇順ソート
  ・選択部を降順ソート
のどれかを実行すると、この偽装ファイルが実行されてしまいます。

 この脆弱性を解消するには、Apsaly を最新版に更新するか、 または、XcmdList.ctx というテキストファイル内の下記の3行を書き換えます。

≪修正前≫
ファイル一覧(dir)   -C041SR  dir /o:gn
選択部を昇順ソート  -C120SR  sort
選択部を降順ソート  -C120SR  sort /r
≪修正後≫
ファイル一覧(dir)   -D041SR  %ComSpec% /C dir /o:gn
選択部を昇順ソート  -D120SR  %ComSpec% /C sort
選択部を降順ソート  -D120SR  %ComSpec% /C sort /r

なお、ここでは、各区切りの空白に、全角の空白を使っていますが、 実際には、TAB コードにする必要があります。