Smarty 2.6.19未満のregex_replaceは脆弱と言うよりは…

Security 3月 29, 2008
(Last Updated On: 2008年4月3日)

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オプション等、セキュリティに関連するオプションが無かったり適切でないアプリケーションは数えきれません。

投稿者: yohgaki