[Codeigniter-users] 【注意喚起】CodeIgniter 1.7.2 Formヘルパーの脆弱性

アーカイブの一覧に戻る

溝口 令雄 mizog****@gmail*****
2010年 4月 6日 (火) 21:41:22 JST


お世話になっております。溝口です。

kunitsuji <tsuji****@m-s*****> さんwrote:

> これって、FORMで配列で値を受け取った時、ということですか。

いえ、set_value() を複数回呼んでいるのは、配列を受け取っている画面では
ありません。別の機能です。

このスレッドの最初に、

Kenji Suzuki <kenji****@gmail*****> さんwrote:

> このバグに当たるような実装をすることは少ないと思いますが、

とKenji様がおっしゃっているとおり、同じフィールドに対して set_value() 
を複数回呼ぶという実装がまずいのかもしれません。

・同一フィールド(パラメータ)に対するset_value()の呼び出しは1回のみ

とルールを決め、パッチは適用せずに元のまま使い、必要であれば、

----------
$value = set_value('field_name', $default_value);
----------

と一旦変数に入れて、それを複数回出力するようにした方が安全なのかもしれ
ないです。
ほぼ初めてCodeIgniterを使用しているので、これがCodeIgniter的に正しい作
法なのかどうなのかいまいちよく分からないのですが…

よろしくお願いいたします。

                                          __________________________
_________________________________________/   Original Message
Subj: Re: [Codeigniter-users] 【注意喚起】CodeIgniter 1.7.2 Formヘルパー
の脆弱性
From: kunitsuji <tsuji****@m-s*****>
To  : codei****@lists*****
Cc  : --
Date: 2010/04/06 18:49:52

>  kunitsujiです。
> 
> これって、FORMで配列で値を受け取った時、ということですか。
> 
> 
> >お世話になっております。溝口です。
> >
> >Kenji Suzuki <kenji****@gmail*****> さんwrote:
> >
> >> となると、この if文自体を削除した方がいいでしょうかね。
> >> 
> >>       if (isset($prepped_fields[$field_name]))
> >>       {
> >>           return $str;
> >>       }
> >
> >ここを削除すると確かに前の値は残らなくなりますが、
> >set_value() を2度呼び出した場合、& が
> >1度目では $amp;
> >2度目では &amp;amp;
> >と変換されるようになります(※)。
> >
> >パッチ適用時には、※の問題は起こりません。
> >
> >よろしくお願いいたします。
> >
> >
> >                                          _________________________
> >                                          _
> >_________________________________________/   Original Message
> >Subj: Re: [Codeigniter-users] 【注意喚起】CodeIgniter 1.7.2 Formヘル
> >パー
> >の脆弱性
> >From: Kenji Suzuki <kenji****@gmail*****>
> >To  : codei****@lists*****
> >Cc  : --
> >Date: 2010/04/06 17:09:36
> >
> >> Kenji です。
> >> 
> >> 
> >> On Tue, 06 Apr 2010 15:12:43 +0900
> >> 溝口 令雄 <mizog****@gmail*****> wrote:
> >> 
> >> > Kenji 様
> >> > 
> >> > お世話になっております。溝口です。
> >> > 
> >> > Kenji Suzuki <kenji****@gmail*****> さんwrote:
> >> > 
> >> > > CodeIgniter 1.7.2 の Formヘルパー の set_value() で同じフィー
> >> > > ルド
> >> > > を 
> >> > > 2回目以上表示すると 2回目以降は文字参照に変換されず XSS脆弱性
> >> > > にな
> >> > > る
> >> > > 可能性があります。
> >> > > 
> >> > > 詳細
> >> > > http://d.hatena.ne.jp/Kenji_s/20100316/1268701194
> >> > 
> >> > 上記ページに記載して頂いたパッチを当てたところ、たとえば
> >> > 
> >> > ----------
> >> > <?php foreach ($rows as $idx => $row): ?>
> >> > ...(中略)...
> >> > <?= form_input(array(
> >> >     'name' => F_SORT . '[]',
> >> >     'value' => $row[DBC_SORT], // (A)
> >> >     'size' => '2',
> >> >     'tabindex' => $idx + 1
> >> > )) . LF  ?>
> >> > ...(中略)...
> >> > <?php endforeach; ?>
> >> > ----------
> >> > 
> >> > のようにform_input()関数をループ中で繰り返し呼び出している箇所で、
> >> > value属性に指定している(A)の値($row[DBC_SORT]の値)が常に$
> >> > rowsの
> >> > 1番目の要素の値になってしまいました。
> >> > パッチを元に戻すとこの現象は起こりません。
> >> > 
> >> > これはどのように対処すべきでしょうか?
> >> 
> >> なるほど。そうですか。
> >> 
> >> となると、この if文自体を削除した方がいいでしょうかね。
> >> 
> >>       if (isset($prepped_fields[$field_name]))
> >>       {
> >>           return $str;
> >>       }
> >> 
> >> 
> >> // Kenji
> >> 
> >>  
> >> > よろしくお願いいたします。
> >> > 
> >> > 
> >> >                                           _____________________
> >> >                                           ___
> >> >                                           __
> >> > _________________________________________/   Original Message
> >> > Subj: [Codeigniter-users] 【注意喚起】CodeIgniter 1.7.2 Formヘル
> >> > パー
> >> > の
> >> > 脆弱性
> >> > From: Kenji Suzuki <kenji****@gmail*****>
> >> > To  : codei****@lists*****
> >> > Cc  : --
> >> > Date: 2010/03/16 10:07:28
> >> > 
> >> > > Kenji です。
> >> > > 
> >> > > 
> >> > > CodeIgniter 1.7.2 の Formヘルパー の set_value() で同じフィー
> >> > > ルド
> >> > > を 
> >> > > 2回目以上表示すると 2回目以降は文字参照に変換されず XSS脆弱性
> >> > > にな
> >> > > る
> >> > > 可能性があります。
> >> > > 
> >> > > 詳細
> >> > > http://d.hatena.ne.jp/Kenji_s/20100316/1268701194
> >> > > 
> >> > > これ、なかなか修正されないのでバグでないのかも知れませんが。
> >> > > このバグに当たるような実装をすることは少ないと思いますが、知ら
> >> > > ず
> >> > > に
> >> > > やってしまうと危険ですので、注意喚起しておきます。
> >> > > 
> >> > > 
> >> > > 本家では、以下に書き込みがあります。バグだと思われる方は、「バ
> >> > > グ
> >> > > なの
> >> > > で
> >> > > 直してくれ」みたいなことを書き込んでもらえるといいかもしれませ
> >> > > ん。
> >> > > 
> >> > >     * http://codeigniter.com/bug_tracker/bug/11284/
> >> > >     * http://codeigniter.com/forums/viewthread/139112/
> >> > > 
> >> > > 
> >> > > // Kenji
> >> > > 
> >> > > _______________________________________________
> >> > > Codeigniter-users mailing list
> >> > > Codei****@lists*****
> >> > > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >> > _______________________________________________________________
> >> > ___
> >> > __
> >> > 
> >> > _______________________________________________
> >> > Codeigniter-users mailing list
> >> > Codei****@lists*****
> >> > http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >> 
> >> _______________________________________________
> >> Codeigniter-users mailing list
> >> Codei****@lists*****
> >> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> >___________________________________________________________________
> >_
> >
> >_______________________________________________
> >Codeigniter-users mailing list
> >Codei****@lists*****
> >http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
> 
> _______________________________________________
> Codeigniter-users mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users
____________________________________________________________________




Codeigniter-users メーリングリストの案内
アーカイブの一覧に戻る