PHPMailer  【解決済み】

質問全般・改善要望
kazuike
メンバー
メンバー
記事: 457
登録日時: 2009年8月12日(水) 12:53

PHPMailer

投稿記事by kazuike » 2016年12月27日(火) 17:39

PHPMailerのセキュリティ脆弱性が報告されていますが、
パッチは出される予定でしょうか?
例)http://www.itmedia.co.jp/enterprise/articles/1612/27/news058.html

PHPMailer本家
https://github.com/PHPMailer/PHPMailer
から最新版(5.2.19)を取って来て、
「manager/includes/controls/phpmailer/」内の
「class.phpmailer.php」ファイルを上書きすれば良い感じでしょうか?

このあたり、古いバージョンのMODXでの互換性はどうなんでしょう?
手持ちのMODXでソース内のコメントを見た限り、

MODX 1.0.12J ~ 1.0.18J は、
PHPMailer 5.2.6 を使っているようです。

MODX 1.0.11J は手持ちがありません。

MODX 1.0.10J 以前は、
場所が「manager/includes/controls/」で、

MODX 1.0.6J ~ 1.0.10J は、
PHPMailer 2.0.4 を使っているようです。

MODX 1.0.5J 以前は、
PHPMailerのコメントにバージョンの表記がありません。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 2848
登録日時: 2009年7月29日(水) 02:50

PHPMailer

投稿記事by yama » 2016年12月27日(火) 17:48

viewtopic.php?f=34&t=1724&p=9336#p9336
リリース予定の1.0.19Jは対策しておきました。過去バージョン用のパッチは今のところ出す予定はありません
kazuike
メンバー
メンバー
記事: 457
登録日時: 2009年8月12日(水) 12:53

PHPMailer

投稿記事by kazuike » 2016年12月27日(火) 18:10

ありがとうございます。
1.0.19Jが正式リリースされるまでは、
ベータ4「modx-1.0.19J-b4.zip」の、
manager/includes/controls/phpmailer/class.phpmailer.php
を使って上書きしておけば、応急措置になりそうですね。
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
アバター
yama
管理人
記事: 2848
登録日時: 2009年7月29日(水) 02:50

PHPMailer

投稿記事by yama » 2016年12月29日(木) 11:25

PHPMailerの件、まだ対応が続くみたいです。
https://github.com/PHPMailer/PHPMailer/ ... 1068-L1157
とりあえずMODXでは上記の関数を処理した上で危険なメアド文字列を弾くオーバーライドを施して対応することを検討します
アバター
yama
管理人
記事: 2848
登録日時: 2009年7月29日(水) 02:50

PHPMailer

投稿記事by yama » 2016年12月29日(木) 14:02

実際には結果的に脆弱性を持たないサイトが多いみたいです。私の解釈としては、今回の脆弱性は以下のようにして確認できると考えています。

まず、PHPMailerのファイルの存在自体には問題ありません。サイト上に実装した「問い合わせ主のメールアドレス」欄に入力したメールアドレスが、結果的に「差出人のメールアドレス」としてセットされた形でメールが届くような運用をしている場合に、脆弱性が発露する可能性があります。メールソフトの使い方として、受信したメールに対して返信ボタンをクリックするだけで返事を書けると便利なため、そのようにしているサイトは多いと思います。

コード: 全て選択

t'est@example.com 半角シングルクオート
t"est@example.com 半角ダブルクオート
t est@example.com 半角スペース
t\est@example.com バックスラッシュ

上記の4種類の文字を含むメールアドレスを、サイト上に実装した「問い合わせ主のメールアドレス」欄に入力して送信ボタンをクリックします。メールアドレス文字列として問題ないと判定されて、実際にメールを受け取ることができたら、脆弱性の存在を疑うことができます。

PHPMailerに限らず、これらのメールアドレス文字列を許容するスクリプトは危険ということのようです。MODXも数年前まではPHPMailerを使わず自前でメール送信を実装していました。調べていないので分かりませんが、当時の処理も危険だった可能性があります。
アバター
yama
管理人
記事: 2848
登録日時: 2009年7月29日(水) 02:50

PHPMailer

投稿記事by yama » 2016年12月29日(木) 21:42

コード: 全て選択

public static function validateAddress($address, $patternselect = null) {
   if    (strpos($address, ' ')!==false)  return false;
   elseif(strpos($address, '"')!==false)  return false;
   elseif(strpos($address, "'")!==false)  return false;
   elseif(strpos($address, '\\')!==false) return false;
   else
      return parent::validateAddress($address, $patternselect);
}

上記のようなコードをex_modxmailer.phpに追加すると脆弱性が解決することを確認しました。

http://qiita.com/dayone/items/b823aec07ed71bf26c7e
今回の件はfilter_varを使えばよいのではという意見もあるようですが、上記の記事のように、現実的にはちょっとどうかなということもあります。
アバター
yama
管理人
記事: 2848
登録日時: 2009年7月29日(水) 02:50

PHPMailer  【解決済み】

投稿記事by yama » 2016年12月30日(金) 16:42

http://jvn.jp/vu/JVNVU99931177/
上記の記事では「PHPMailer に OS コマンドインジェクションの脆弱性」ということになってますが、実際はPHPMailer固有の問題でもなくPHPのmail関数を用いるスクリプトに共通する問題のようですし、OSコマンドを自由に操れるわけではなくsendmailのパラメータでできる範囲に限定されるようです。試してみました。

MODXは実際にどうかというと、コア自体にはFromを外部ユーザが自由に指定してメールを送信できる機能はありませんし、同梱されているeFormスニペットをあえて脆弱な状態にしてフォームを設置しても、危険な文字列はエスケープされて無害な文字列としてFromにセットされてメールが配信されます。
というわけで、どうやっても無害ということになります。
コアに入っているPHPMailerを使って脆弱なスクリプトを自作することは可能ですが、それを言い出すともっと簡単に危険なスクリプトを作る方法はいくらでもあるし、残念ながら実際あるので、そこまでは考えなくてよいかなと思います。
というわけで、いちおう次のリリースでPHPMailerを最新版に差し替えることはしますが、現状でも問題ないということが言えると思います。

“質問全般・改善要望” へ戻る