本来ありえない名前のページが作成できる

  • ページ: BugTrack
  • 投稿者: hirofummy?
  • 優先順位: 緊急
  • 状態: 完了
  • カテゴリー: 本体バグ
  • 投稿日: 2003-02-28 (金) 17:22:01
  • バージョン: 1.3.3/1.4pre5

メッセージ

POSTリクエストの内容をチェックしていないために本来ありえない名前のページが作成できます。 私がこの脆弱性の存在を確認したのは以下のファイルです。

  • edit.inc.php(ページの編集、書き込み)
  • freeze.inc.php(凍結、凍結解除)
  • article.inc.php(articleプラグイン)
  • bugtrack.inc.php(BugTrackプラグイン)
  • comment.inc.php(コメントプラグイン)
  • insert.inc.php(insertプラグイン)
  • memo.inc.php(メモプラグイン)
  • paint.inc.php(お絵かきプラグイン)
  • vote.inc.php(投票プラグイン)

このリストは1.4pre5のものですが、1.3.3でもほぼ同様と思われます。

対策案

file_write関数(file.php)の先頭に以下の処理を追加することで一応の回避策になります。

  global $_title_invalidwn,$_msg_invalidiwn;

  if (!is_pagename($page)) {
    die_message(
      str_replace(
        '$1',
        htmlspecialchars($page),
        str_replace('$2','WikiName',$_msg_invalidiwn)
      )
    );
  }

各プラグインの関数先頭にも適宜以下のような処理を加えた方がいいかもしれません。

  global $_title_invalidwn,$_msg_invalidiwn;

  if (!is_pagename($post['page'])) {
    return array(
      'msg'  => $_title_invalidwn,
      'body' => str_replace('$1',htmlspecialchars($post['page']),str_replace('$2','WikiName',$_msg_invalidiwn))
    );
  }

file_write関数で対処しているため必要ないとも言えますが、file_writeの対策だけでは「<><><><>で更新の衝突が起きました。」のような画面には辿り着けてしまうので、精神衛生上対策した方がよいかと思います。 1.3.3ならば以下のような感じでしょうか。

  // pukiwiki.php195行目付近(else if($post["write"])の直前)
  // ページ名が正当であるときのみ書き込みを許す
  else if($post["write"] && !preg_match("/^(($BracketName)|($WikiName))$/",$post["page"]))
  {
    $title = str_replace('$1',htmlspecialchars(strip_bracket($post["page"])),$_title_invalidwn);
    $body = $page = str_replace('$1',make_search($post["page"]), str_replace('$2','WikiName',$_msg_invalidiwn));
    $template = '';
  }

追記

$post['page']、$post['refer']などページ作成絡みのパラメータしか確認していませんが、ひょっとしたら他のパラメータにもチェックが甘い/ないものがあるかもしれません。


  • あ、1.3.3にはis_pagenameはないんでしたっけか。定義するなりpreg_matchに置き換えるなりしないといけないですね。 -- hirofummy? 2003-02-28 (金) 17:36:45
  • む、怪しい注釈が…。 -- hirofummy? 2003-02-28 (金) 17:40:06
  • コメント追加時の注釈処理の挙動がおかしいようです。 -- hirofummy? 2003-02-28 (金) 17:42:40
  • 注釈が二重になるのはlinks.inc.phpの問題でした。直しました。 -- ぱんだ 2003-03-01 (土) 01:31:47
  • とりあえずfile_write()内でのページ名のチェック部分をcvsに投入しました。 -- ぱんだ 2003-03-02 (日) 17:34:14
  • template プラグインでも発生します。1.3.3で確認しました。 -- にぶんのに 2003-03-02 (日) 23:11:09

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2003-03-02 (日) 23:11:09
Site admin: PukiWiki Development Team

PukiWiki 1.5.2+ © 2001-2019 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u7. HTML convert time: 0.154 sec.

OSDN