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

Back to archive index

Kenji Suzuki kenji****@gmail*****
2010年 4月 6日 (火) 22:56:36 JST


Kenji です。


On Tue, 06 Apr 2010 21:41:22 +0900
溝口 令雄 <mizog****@gmail*****> wrote:

> お世話になっております。溝口です。
> 
> 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的に正しい作
> 法なのかどうなのかいまいちよく分からないのですが…

バグっているので、CodeIgniter的に正しいもなにもないと思います。
こういうコーディングルールは単なるバグの回避策ですね。

バグが深いみたいですので、修正するには、バグを再現できるサンプルと、
きちんとしたデバッグ作業が必要ですね。


// Kenji

 
> よろしくお願いいたします。
> 
>                                           __________________________
> _________________________________________/   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 mailing list
> Codei****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/codeigniter-users




Codeigniter-users メーリングリストの案内
Back to archive index