by Tan Chew Keong タン チュー ケオン
Release Date: 2008-07-16
[en] [jp]
概要
FreeStyleWiki
に使われる CGI::Session
には、ディレクトリトラバーサルの脆弱性が存在します。悪意のある人は、この脆弱性を利用し FSWiki の管理者のパスワードを知らないで、
FSWiki にログインすることができます。FSWiki は、Windows のシステム上で使えば、その脆弱性に影響されます。Linux
のシステム上でインストールすれば、この脆弱性に影響されません。
問題を確認したバージョン
問題
FreeStyleWiki に使われる CGI::Session
の "File" Driver は、CGISESSID
のクッキーを適切に検査しないから、ディレクトリトラバーサルの脆弱性が存在します。悪意のある人は、この脆弱性を利用し FSWiki
の管理者のパスワードを知らないで、
FSWiki にログインすることができます。
FSWiki は、Windows のシステム上で使えば、その脆弱性に影響されます。Linux
のシステム上でインストールすれば、この脆弱性に影響されません。攻撃者が、FSWiki
で悪意のある Wiki ページを製作して、ディレクトリトラバーサルの脆弱性を利用し、そのページの内容は、悪意のある Session Data
のように使えます。悪意のある
Session Data
の内容には、"wiki-type=>0" があると、攻撃者が管理者の権限で FSWiki にログインすることができます。
脆弱性のテスト
脆弱性の確かめる方法は下記です。
Instructions for testing FreeStyleWiki on
a Windows sytem:
- Install FreeStyleWiki on a Windows
system with Apache2 and ActiveState ActivePerl. Follow the instructions
here.
- Download and install Paros
proxy on the system that you'll be using the browser on. If you do not
have JRE 1.4.2 or later, please install it first. Paros allows you to
intercept requests so you can manipulate the session cookie.
- Using a browser, visit the FSWiki page, click
on the "Create New Page" link and type in TestPage
as the name of the new page (see below). Then click on the "Create"
button.
- Copy-and-Paste the content below into the
textbox that allows you to specify the page content. The content below
are the session variables that we want to use to gain administrative
access.
IMPORTANT: Before this, you must change the
_SESSION_REMOTE_ADDR IP address below to the IP address of the system
that you are accessing FSWiki from. Please copy-and-paste
into the textbox as a single-line. Do not put any
line-breaks in it. It is OK if the textbox automatically wrap the
lines, but you must not add any line-breaks in it
yourself.
Content to be copied into the page creation
textbox:
$D = {"_SESSION_ID" =>
"dba3e47eb81c94d0368ecfbbc12e9c9f","_SESSION_ETIME" =>
undef,"_SESSION_REMOTE_ADDR" => "192.168.179.1","_SESSION_CTIME"
=> "2222222222","_SESSION_ATIME" =>
"2222222222","wiki_type" => 0,"wiki_path" => "","wiki_id"
=> "anynamewilldo","_SESSION_EXPIRE_LIST" => {}};
|
- Click on the "Save" button to save the content.
This will create the file "C:\usr\Apache2\htdocs\data\TestPage.wiki"
that contains the above contents.
- Run Paros and configure IE to use it as a
proxy. Paros listens on 127.0.0.1 port 8080. (see below)
- Enable "Trap Request" in Paros.
- Using IE, try to visit one of the admin pages.
For example, "http://fswikiHostName/wiki.cgi?action=ADMINCONFIG". Note
that Paro will stop the request. Observe that there is no value for the
CGISESSID cookie (see below).
- Change the value of the CGISESSID cookie to /../../data/TestPage.wiki
by replacing Cookie: CGISESSID= with Cookie:
CGISESSID=/../../data/TestPage.wiki and let the request
continue by click on the "Continue" button (see
below).
- Note that by changing the value of the
CGISESSID cookie to /../../data/TestPage.wiki,
CGI::Session will read session data from C:\usr\Apache2\htdocs\log\cgisess_/../../data/TestPage.wiki.
This is the same as reading from C:\usr\Apache2\htdocs\data\TestPage.wiki.
And since we have placed our desired session variables into that file
by creating a new page in step 4, we now
effectively have control over all session variables.
- After that, you should see the Admin
Configuration page being displayed. Change some configuration settings
on that page and save it to confirm that you have full administrator
access to the Wiki.
対策
FreeStyleWiki の開発者にリリースされたパッチをインストールしてください。パッチのダウンロード。
発見と報告の経緯
2008年07月10日 - 脆弱性の発見。
2008年07月11日 - FreeStyleWiki の開発者に報告しました。
2008年07月11日 - FreeStyleWiki の開発者から答えを受け取りました。
2008年07月11日 - CGI::Session の開発者に報告しました。
2008年07月12日 - FreeStyleWiki の開発者に提案されたパッチをメールします。
2008年07月12日 - FreeStyleWiki の開発者によると、パッチをリリースする予定です。
2008年07月13日 - CGI::Session の開発者は修正版のバージョン 4.34 をリリースしました。
2008年07月16日 - 本脆弱性の公開。