BLOGTIMES
2010/10/19

「安全でないライブラリのロード」とは具体的にどういうことなのか

  PoC  archiver 
このエントリーをはてなブックマークに追加

先日からLhaplusなどのアーカイバのセキュリティFixが続々と出ている問題については、8月の下旬くらいから「マイクロソフト セキュリティ アドバイザリ (2269637): 安全でないライブラリのロードにより、リモートでコードが実行される」や「JVNVU#707943: Windows プログラムの DLL 読み込みに脆弱性」などのアドバイザリが発表されていて、当初からこれらにはいちおう目を通してはいました。しかしながら、具体的にどのような脆弱性があって、どの程度危険なのかいまひとつ理解できていなくて、それがずっと引っかかっていたのですが、下記の解説を読んでやっと具体的にどのような脆弱性なのかということを理解することができました

複数のアーカイブソフトにおけるバイナリ・プランティング問題

今回発覚した一連のアーカイブソフトの脆弱性は、カレントディレクトリに存在する「explorer.exe」を実行してしまうというものです。バイナリ・プランティングというとDLLファイルが対象となる場合が多いのですが、EXEファイルについても同様の問題が発生するので注意が必要とされます。例えばLhaplusやLhasaは、圧縮ファイルを特定のディレクトリに展開すると同時にエクスプローラでその内容を表示しますが、その際に、

WinExec("explorer フォルダ名", ..)

という関数呼び出しを行います。WinExecはコマンドラインに指定されたプログラム「explorer」を探すときに、仕様にしたがって、

1. アプリケーションがロードされたディレクトリ
2. カレントディレクトリ
3. Windowsのシステムディレクトリ
4. Windowsディレクトリ
5. 環境変数PATHに記述されている各ディレクトリ

の順に探します[5]。つまり本来explorer.exeが存在するWindowsディレクトリよりも先にカレントディレクトリを探してしまうわけですね。ですので、カレントディレクトリに攻撃者が用意した不正なexplorer.exeがあった場合、それが代わりに起動してしまいます。

確かに上記のような問題があれば、任意のプログラムを実行させることが出来ますね。なんとなくUnix系でいうところのLD_LIBRARY_PATHとかLD_PRELOADに細工するような問題なのかなくらいの認識だったのですが、それ以外にExecで呼び出すプログラムの指定方法が関係してくるとは思いませんでした。


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/3857
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン