Smarty 2.6.19未満のregex_replaceは脆弱だったと言うよりは、今でも脆弱と言った方が良いと思います。
Smarty 2.6.19は2008/2/11にリリースされました。ちょっと古い話ですが、Smarty 2.6.19より前のバージョンのregex_replaceは脆弱、とアナウンスされています。
subversionを見てみると
if (($pos = strpos($search,"\0")) !== false) $search = substr($search,0,$pos);
が追加されています。
ヌルバイトアタックに脆弱、と言う話です。
しかし、それ以前にマルチバイト環境では2.6.19でも話になりません。幾つかのプロジェクトでSmartyを取り扱った事がありますが、当然マルチバイト対応して使っていました。パッチを送ってもmbstringはデフォルトモジュールではないからとか、色々面倒なのでしませんでした。日本語環境でSmartyを使われている方は、この辺りは使う前に確認し、修正して使っていると思います。脆弱性をレポートすべき?
perlの正規表現を使っているアプリの安全性は大丈夫なのか、といつも心配になってしまいます。PHPに限った事ではなく、PCREでなく、本家perl正規表現を含めて安全でない物が多いと思います。
PerlのModifierオプション
http://search.cpan.org/dist/perl/pod/perlre.pod#Modifiers
PCREのModifierオプション
http://jp.php.net/manual/en/reference.pcre.pattern.modifiers.php
PCREはマルチバイト文字エンコーディングはUTF-8しかサポートせず、明示的に指定しなければなりません。sとかm、u、Dオプション等、セキュリティに関連するオプションが無かったり適切でないアプリケーションは数えきれません。
Leave a Comment