Vulnerability Research Advisory

FreeStyleWiki (FSWiki) における Session Cookie ディレクトリトラバーサルの脆弱性

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:

  1. Install FreeStyleWiki on a Windows system with Apache2 and ActiveState ActivePerl. Follow the instructions here.
  2. 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.
  3. 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.
  4. 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.
  5. Content to be copied into the page creation textbox:

    $D = {"_SESSION_ID" => "dba3e47eb81c94d0368ecfbbc12e9c9f","_SESSION_ETIME" => undef,"_SESSION_REMOTE_ADDR" => "","_SESSION_CTIME" => "2222222222","_SESSION_ATIME" => "2222222222","wiki_type" => 0,"wiki_path" => "","wiki_id" => "anynamewilldo","_SESSION_EXPIRE_LIST" => {}};

  6. Click on the "Save" button to save the content. This will create the file "C:\usr\Apache2\htdocs\data\" that contains the above contents.
  7. Run Paros and configure IE to use it as a proxy. Paros listens on port 8080. (see below)
  8. Enable "Trap Request" in Paros.
  9. 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).
  10. Change the value of the CGISESSID cookie to /../../data/ by replacing Cookie: CGISESSID= with Cookie: CGISESSID=/../../data/ and let the request continue by click on the "Continue" button (see below).
  11. Note that by changing the value of the CGISESSID cookie to /../../data/, CGI::Session will read session data from C:\usr\Apache2\htdocs\log\cgisess_/../../data/ This is the same as reading from C:\usr\Apache2\htdocs\data\ 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.
  12. 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日 - 本脆弱性の公開。

For further enquries, comments, suggestions or bug reports, simply email them to