*%00の含まれるGETリクエストによって引き起こされる問題 *%00の含まれるGETリクエストによって引き起こされる問題 [#f644adf1] -ページ: BugTrack -投稿者: [[hirofummy]] -優先順位: 緊急 -状態: 完了 -カテゴリー: 本体バグ -投稿日: 2003-02-23 (日) 01:15:30 -バージョン: **メッセージ **メッセージ [#a1eb7349] GETリクエスト中に%00を含めることで本来出来ないはずのことができるようになってしまいます。 私が確認しただけで、凍結ページの編集(さらに編集後は凍結が解除された状態になってしまいます)、不正な名前のページの作成が可能です。 PukiWiki1.4でこの問題を確認しましたが、ソースを見る限り1.3.x系列でも可能であり、早急に対策を施す必要があります。 **参考 **参考 [#ua3efa1e] http://ns1.php.gr.jp/pipermail/php-users/2003-January/012742.html **対策案 **対策案 [#wa803846] まず以下の関数をfunc.phpあたり((どのファイルに追加するのが適切か分からなかったので…))に追加します。 function sanitize_null_character($param) { if(is_array($param)) { $result = array(); foreach($param as $key => $value) { $key = sanitize_null_character($key); $result[$key] = sanitize_null_character($value); } } else { $result = preg_replace('/\x00/','',$param); } return $result; } その上で1.4であれば152行目、1.3.3であれば45行目(magic_quotes_gpc対策処理の直後)に以下のコードを挿入します。 $get = sanitize_null_character($get); $post = sanitize_null_character($post); $cookie = sanitize_null_character($cookie); さらに、1.4なら191行目、1.3.3なら58行目(上記の挿入を行った後だと実際にはもう少し後ろになります。$argへの代入処理の直後の部分です。)に以下のコードを挿入します。 $arg = preg_replace('/\x00/','',$arg); 以上で完了ですが、今後のサニタイズ漏れを防ぐ意味で、QUERY_STRINGを処理して$argへの代入処理を行っている部分を $arg = ""; if(sizeof($_GET)==1) { reset($get); list($arg,) = each($get); reset($get); } 以上のように書き換える方が適切でしょう。 この書き換えを行った場合、$arg = preg_~の挿入は必要ありません。 ---- -POSTやCOOKIEを利用して同様の攻撃が可能かどうかは私はよく分からないのですが、できそうな気もする((ただの勘です))のでサニタイズしておきました。して損ということもないでしょうし。 -- [[hirofummy]] SIZE(10){2003-02-23 (日) 01:22:16} -cvsに投入しました。確認をお願いします。 -- [[ぱんだ]] SIZE(10){2003-02-23 (日) 14:34:58} -確認しました。preg_replace('/\x00/','',$arg)じゃなくてsanitize_null_characterすればいいんですよね…私って頭のネジが足りないのかも X( -- [[hirofummy]] SIZE(10){2003-02-23 (日) 15:14:57} -「サニタイズ漏れ」を防ぐ、という意味では$HTTP_SERVER_VARSもGPC((GET,POST,COOKIE))と同じように$serverのような変数にサニタイズしたものを代入しておいてプログラム内ではそちらを使うようにする、というのが一番いいかもしれません。 -- [[hirofummy]] SIZE(10){2003-02-23 (日) 15:25:21} -この問題に対処した版を1.3.4 としてリリースしたりするんでしょか?$BracketName 修正漏れ同様、修正告知に留めるかな? -- SIZE(10){2003-02-23 (日) 16:35:49} -セキュリティに関係するfixなので、リリースしたほうがいいでしょうね。 -- [[reimy]] SIZE(10){2003-02-23 (日) 21:30:58} -[[開発日記/2003-02-23]]でリリース内容の検討中です。 -- [[ぱんだ]] SIZE(10){2003-02-24 (月) 20:38:24} #comment //#comment