日本語 / English

 

2018/08/30 - ディレクトリトラバーサルの脆弱性追加修正

JVN#62121133
アタッシェケースにおける複数のディレクトリトラバーサルの脆弱性
https://jvn.jp/jp/JVN62121133/

※今回の修正は、2018/08/05に入れた修正が不十分だったため、その対処を改めて施したものです。

【再現手順】
アタッシェケースでは、ATCファイルという独自のフォーマットを用いており、それに直接細工を施します。 オープンソースである「アタッシェケース」の暗号化処理の部分を改ざんし、ビルドしたものから 暗号化ファイルに格納されるファイルリストに不正な文字列を挿入したデータを作成します。

展開するファイルリストに、
":\Windows\Temp\sample.txt"
":      \Windows\Temp\sample.txt"
"    :\Windows\Temp\sample.txt"
"z    :\Windows\Temp\sample.txt"
"     z:\Windows\Temp\sample.txt"
"1:\Windows\Temp\sample.txt"
"hoge:\Windows\Temp\sample.txt"

といったファイルパスを挿入したリストをアタッシェケースで作成し、暗号化した ファイル(*.atc)を展開したところ、 ユーザーの意図しない場所に暗号化ファイルが展開されました。

ただし、これは悪意ある第三者がそうした脆弱性を仕込むアプリケーションを 開発し、当該ファイルを生成しないといけないため、危険度はやや低めとは思われます。

【発生バージョン】
ver.3.3.0.0 以前で発生。
ver.2.8.4.0 以前で発生。

【回避・対応策】
ユーザーはすみやかに最新版へアップデートしてください。

前回の修正では、正規表現を使って不正な文字列が入り込まないように弾くブラックリスト的なアプローチでしたが、 これではどうしてもいろいろと抜け道を作られてしまうため、この脆弱性公表をコーディネートしていただいた、 JPCERT/CC様の ご提案により、復号時はいったんファイルパスの正規化を行い、ユーザーが意図する正しい保存先かどうか チェックするホワイトリスト方式で対処しました。この場にてご助言に感謝いたします。

アタッシェケース#3 アタッシェケース2


2018/08/30 - 動作設定ファイル(_AtcCase.ini)によって復号時に任意のスクリプトを実⾏可能な脆弱性

JVN#02037158
アタッシェケースにおいて任意のスクリプトを実行される脆弱性
https://jvn.jp/jp/JVN02037158/

【再現手順】
アタッシェケースには、実行ファイル、またはATCファイルと同⼀フォルダ内に細⼯された設定ファイル(_AtcCase.ini) が存在する場合、ATCファイルの復号時に任意のスクリプトを実⾏可能な脆弱性が存在します。

【発生バージョン】
ver.3.3.0.0 以前で発生。
ver.2.8.4.0 以前で発生。

【回避・対応策】
ユーザーはすみやかに最新版へアップデートしてください。

動作設定ファイル(_AtcCase.ini)が所定の位置にあり、読み込まれるときには、ユーザーに対して読み込んでも 問題ないか?といったダイアログメッセージを出し、注意を促すように修正いたしました。さらにver.3系では、 その脆弱性を考慮した上で、警告ダイアログメッセージを表示しないという設定も含まれています。


2018/08/05 - 複数のディレクトリトラバーサルの脆弱性

JVN#62121133
アタッシェケースにおける複数のディレクトリトラバーサルの脆弱性
https://jvn.jp/jp/JVN62121133/

※今回の脆弱性は、2017/01/16に報告された脆弱性をさらに派生させたものになっています。

【再現手順】
アタッシェケースでは、ATCファイルという独自のフォーマットを用いており、それに直接細工を施します。 オープンソースである「アタッシェケース」の暗号化処理の部分を改ざんし、ビルドしたものから 暗号化ファイルに格納されるファイルリストに不正な文字列を挿入したデータを作成します。

展開ファイル名に "..¥" や "../" を複数、または空白を混ぜたもの、存在しないドライブ名、"¥¥localhost" などを 含むファイルリストを作成し、アタッシェケースでATCファイルを展開したところ、ユーザーの意図しない場所に 暗号化ファイルが展開されました。

ただし、これは悪意ある第三者がそうした脆弱性を仕込むアプリケーションを 開発し、当該ファイルを生成しないといけないため、危険度はやや低めとは思われます。

【発生バージョン】
ver.3.2.3.0 以前で発生。
ver.2.8.3.0 以前で発生。

【回避・対応策】
ユーザーはすみやかに最新版へアップデートしてください。

こちらの具体的な修正としては、「復号処理」部分。不正な文字がパスに入ってきたら、この処理を中止するように修正。

アタッシェケース#3 アタッシェケース2


2017/07/13 - 自己実行形式ファイルにおける任意のDLL読み込み(DLLハイジャック、DLLプリロード)

【再現手順】
アタッシェケースで作成した自己実行可能形式の暗号化ファイルには、 DLL を読み込む際の検索パスに問題があり、意図しない DLL を 読み込んでしまう脆弱性が存在します。

  1. Windows (32bit / 64bit) で攻撃者の用意したトロイの木馬として偽装した 「DWMAPI.DLL」や「DWrite.dll」などをディレクトリに置きます。
  2. アタッシェケースで暗号化された自己実行可能形式ファイルをそのディレクトリに置きます。
  3. 当該EXEを実行すると、意図せずトロイの木馬が読み込まれ、実行されます。

なお、Windows 10 (64bit) で再現したその他ファイル名は次の通りです。

  • WTSAPI32.DLL
  • PROPSYS.DLL
  • MSIMG32.DLL
  • INDOWSCODECS.DLL
  • WINSTA.dll

【発生バージョン】
現行バージョンで発生。

【回避・対応策】
現状、この問題を回避するには、以下の点を注意しながらの運用をお願いいたします。

  • 自己解凍書庫ファイルは新たに作成したディレクトリに保存し、他の無関係なファイルが存在しない状態で実行する。
  • 自己解凍書庫ファイルを実行するディレクトリに信用できないファイルが存在しないことを確認する。
  • 自己解凍書庫ファイルを共有ディレクトリに置き、実行させるような運用を行っている場合は、当該ディレクトリを読み取り専用にする。
  • 自己解凍書庫ファイルは管理者権限を持たない標準ユーザアカウントで操作することを原則とし、必要なときのみ管理者アカウントで操作する。


 実証コード(VS Express for Desktop 2015 動作検証済み)

実証コード内にある、「Debug」「Release」ディレクトリ内の「DWMAPI.DLL」「DWrite.dll」は、 DLLプリロードを仕組んだDLLです。実際のソースコードは、

#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
  MessageBox(NULL,
      "This program is vulnerable to DLL Hijacking.",
      "DLL Hijacked",
       MB_OK);
   return TRUE;
 }

と、なっています。

DLL プリロード攻撃を防止するためのライブラリの安全な読み込み を読んでみたところで、SetDllDirectory("");を施してはみますが、 いずれもDLLは、エントリーポイントの前に読み込まれてしまい、DLLは実行されてしまいます。

ウェブサイトを回ってみても、.NET Framework C# 上ではできない、とか、中間言語レベルでやるしかない、 という、情報も散見され、実際の解決に至る解答をいまだ得ておりません。

また、旧バージョン(ver.2)でも同様の現象が起きており、こちらはC++ということもあり、 対応策もあるだろうと、いろいろ調べ回りましたが、やはりそういった対応策は見つからず。

こちらも同様に、エントリーポイントよりも先に、仕掛けを施したDLLを配置すると、読み込まれてしまいます。 こちらについても、どなたか対応策をご存知であればご教授いただけると助かります。

いずれについての問い合わせも、以下までお願いいたします。

ひばら みつひろ

2017/01/16 - ディレクトリトラバーサルの脆弱性

【再現手順】
アタッシェケースでは、ATCファイルという独自のフォーマットを 用いており、展開ファイル名をATCファイルに保存。

試しに展開ファイル名の先頭に"..¥"を付け加えたATCファイルを作 成し、アタッシェケースでATCファイルを展開したところ、 展開先ディレクトリの親ディレクトリにファイルが展開された。

ただし、これは悪意ある第三者がそうした脆弱性を仕込むアプリケーションを 開発し、当該ファイルを生成しないといけないため、危険度はやや低めか。

【発生バージョン】
ver.3.0.1.5 以前で発生。
ver.2.8.2.8 以前で発生。

【回避・対応策】
ユーザーはすみやかに最新版へアップデートしてください。
"..¥"が入ってきたら、この処理を中止するように修正。

JVN#83917769
アタッシェケースにおけるディレクトリトラバーサルの脆弱性
https://jvn.jp/jp/JVN83917769/


2010/12/17 - 任意の実行ファイル読み込み(バイナリ・プランティング)

【再現手順】
アタッシェケースで、フォルダを復号したあとに、自動でフォルダを開くという動作設定を行う。 任意の圧縮ファイルと「explorer.exe」という名前の任意の実行 ファイルを同じフォルダに保存しておき、対象ソフトウェアでそ の圧縮ファイルを展開した場合、同じフォルダにある任意の実行 ファイルが読み込まれてしまう。USB メモリやネットワーク フォルダを介した攻撃に悪用される恐れがある。

【発生バージョン】
ver.2.69 以前で発生。

【回避・対応策】
ユーザーはすみやかに最新版へアップデートしてください。
ShellExecuteAPIの5番目の引数が、”NULL”になっていたものを、 きちんと既定ディレクトリへ指定してあげることでした。

JVN#02175694
アタッシェケースにおける任意の実行ファイル読み込み
https://jvn.jp/jp/JVN02175694/


以上、脆弱性に関して何かある場合は、以下のメールアドレスまでお願いいたします。

ひばら みつひろ