WordPress脆弱性 CVE-2017-6514

5/22に CVE-2017-6514の情報が公開されています。2年ほど間に登録されておりWordPress4.7.2に脆弱性があるとされています。JVNのほうにはまだ情報がないようです。 最新のWordPressでもまだ修正されていないのではないでしょうか?感触では、5.2.2で修正されそうな気がします。現時点のWordPress5.2.1.5.2.2の修正内容には該当するものはなさそうです。これから5.2.2向けにコミットされるじゃないでしょうか?

バージョンアップ情報、脆弱性情報の自動チェックを正式運用開始

先に書いた「Webページの更新内容自体が、動的更新によるものかどうかを自動チェックして、通知するかどうかを切り分けるように強化」の完了し、うまく機能することが確認できたので、正式に運用を開始しました。また、「日本語でのメール送信」機能も組み込んだので見やすく、作業効率が改善しました。今後、新たなソフトウェアのチェックが必要になったときにチェックルールをメンテナンスしていきます。

WordPress5.2.1リリース、5.2.2も近いうちにリリース

脆弱性の情報は公開されていませんが、重大な修正が行われていると思われます。WordPress5.2にバージョンアップ済みの場合はすぐに5.2.1にアップグレードしたほうが良いでしょう。 立て続けにリリースしようとしているということは、5.2.2のリリースを待っている場合ではないと思います。 5.2より前のバージョンに影響があるとは書かれていないので、とりあえず静観します。

仮に、これらの修正に脆弱性の修正が含まれているなら、その脆弱性情報の公開は5.2.2のリリースの後になると推測しています。

移行先、 次期クラウド環境選定

 事実関係の確認ができおりませんが、利用しているクラウドサービスがサービス終了するという情報が出てきております。仮にサービス終了となると以降に数か月単位の準備と移行作業が発生するため事前に検討しておきます。一番良いのは、このクラウドサービスのサービス内容やレベルが向上することです。

 まず、この利用している機能・必要な機能・欲しい機能を整理します。

■現在利用していて、今後も必須の機能

  • 全般: 独自ドメイン 24年ほど継続して利用している独自ドメインを継続して使用したい。 容量:できるだけ多く、高速なものが良い。現状はバックアップ領域も含めて 150GB 利用可能です。
  • メール:メールアカウントの管理 →独自ドメインのメールアドレスを引き続き利用したい。 アドレス数の制限なく利用したい。
  • Web: Apacheサーバ
  • 言語:PHP5、Python2.6、シェル
  • DB:MySQL5
  • 定期実行:CRONでの定期実行、日次、定時実行。

■欲しい機能

・Python3

以上の機能について、各クラウドサービスを調査比較します。そして、「クラウドサーバサービスの比較」として、固定ページにて公開していきます。

Pythonで日本語メール送信

定期実行タスクの機能を使ってメール送信していましたが、content-typeを次のようにcharsetを指定したいのに、

Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 8bit
Content-Language: en-US

つぎのように指定されています。
Content-Type: text/plain; charset=ANSI_X3.4-1968

このcharset指定のメールでは、日本語の文面が文字化けしてしまいます。受信したメーラーで明示的に文字コードを指定することで文字化けは解消しますが、いちいち指定する手間が大変です。そこで定期実行タスクのメール送信機能は使わずに、Pythonから直接送信するように変更します。

Python2.6で使用するので、 Uchida さんのコードを参考にさせていただきました。

参考のための補足情報:

・デバック方法
smtp = smtplib.SMTP(c[‘host’], c[‘port’])
の次の行に 「 smtp.set_debuglevel(True) 」を追加することで、メールサーバとの通信内容を確認できます。

・ユーザー名、パスワードの指定にはダブルクオーテーションでくくるのはNGです。ダブルクオーテーションもユーザー名、パスワードとして送信されます。

user = <アカウント名>
password = <パスワード>

このPython実装でのメールでは、charsetは次のように設定されます。

Content-Type: text/plain; charset="iso-2022-jp"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit

以上の設定により 、メールの日本語文面を文字化けせずに参照することができます。 これをベースに、脆弱性情報の通知メールに送信機能を組み込みます。

脆弱性情報の通知メールの仕掛けの更新

結構、動的に更新されるのか、頻繁に脆弱性ページが更新されています。
このため、先に作成した(5/9)、バージョンアップ情報や脆弱性対処を含むパッチの提供情報の通知メールが2,3日おきに飛んできます。WordPress5.3の作業も始まって、この更新分もあります。デイリーなのか更新頻度がどの程度なのかで、チェック方法を検討しなおします。
とりあえずメール文面を強化して簡単に更新内容をチェックできるようにしました。
今後、Webページの更新内容自体が、動的更新によるものかどうかを自動チェックして、通知するかどうかを切り分けるように強化します。※

次期クラウドサーバーの選定準備

 Pythonコードをクラウドサーバー上への移行で、本来不要であってほしい手間が発生しています。これも関連して、別のクラウド環境への移行を検討します。この検討状況を公開する固定ページを作成していく予定です。
 上述の”本来、不要であってほしい手間”とは環境移行の手間です。この環境はPythonのバージョンが古く、Python 2.6は使えるが、Python3が使えません。このため、ローカルで実装しているPythonコードを移行するとエラーが発生することがあります。原因はPythonのバージョンの際のほかライブラリがないなどの環境の差です。OSが異なることが原因もこともあります。
今後の移行時の参考のために、この移行時に発生したエラーと、その原因、対処をまとめたページを作成しました。

概略は次の通りです。
・Pythonのバージョンが古くPython3が使えないため、requestなどのコードをPython2.6用に書き換える必要がある。
・BeautifulSoupがない?など、 使いたいライブラリがないので、どうするか対処が必要。

トップページ更新

トップページを更新しました。
リンクページに、太陽光発電、MysTilesのアイコンを追加し、ロゴを更新しています。 また、サブページにも太陽光発電、MysTilesを追加しました。MysTilesはタイル型ポータルページであるMyS’Tileのサブセット版です。MyS’Tileは個人ごとのカスタマイズを想定したJavaScriptベースのポータルページです。 phpで書いたものではありません。これを、クラウドサーバに移行して、個別カスタマイズ部分を削除し、一部をphp化しました。何か良いphpで書かれたポータルアプリケーションもあれば、切り替えたいと思います。何か良いものがあればコメントください。

WordPress5.2リリース

以前、脆弱性に関連して取り上げたWordPress5.2が5月8日にリリースされています。

・管理者アカウントでログインすれば新しいバージョンが提供されていることが左上の更新と赤に白抜きの数字で示されます。また、ダッシュボードや更新画面から最新バージョンに更新することができます。更新の前にバックアップするように案内されます。
・投稿者アカウントでログインした場合は、ダッシュボード上部に「WordPress 5.2 が利用可能です。サイト管理者にお知らせください。」と表示されます。
機能強化を行うメジャーバージョンアップやマイナーバージョンアップの場合、不具合が含まれているケースが多々ある。新たに提供されて機能を使いたいなら話は別だが、 必要がない機能しか提供されていないので、バージョンアップは急がなくてもよいでしょう。そこで、1か月程度は保留することにします。あまり放置するとほかの実行基盤のバージョンとの組み合わせで不具合が発生することがあります。そこで、1年以内にはバージョンアップを適用することにします。通常は、1年経過する前にセキュリティパッチが提供されて、セキュリティパッチを適用する必要が発生します。
WordPressの場合、Security Category Archiveのページ
https://wordpress.org/news/category/security/ をチェックしていれば、脆弱性対処を含むパッチが提供されているか確認できる。ざっと見て、2か月に1回程度の頻度で脆弱性対処パッチが提供されていることがわかります。

これにより、WordPressの更新頻度が頻繁であれば、特別な方法で通知されなくても気づくことができます。逆にWordPressの更新頻度が低い場合、脆弱性対策パッチ未適用状態で長期間運用される可能性が高くなりそうです。このパターンは対応できるようにしたほうがよさそうです。

ということで、バージョンアップ情報や脆弱性対処を含むパッチの提供情報をメールで通知する仕掛けを用意しました。今回の公開には間に合わなかったが次回の公開時には、実際に通知されることを確認します。

脆弱性情報の収集

脆弱性関連情報を「定期的に自動チェックしてメール通知するとか、検討してみよう。」ということで、とりあえずクラウドサーバ上にpythonコードを移行し、定期実行の手順を検証します。
 phpから呼び出したところで、エラー。このクラウド環境は、Python2が動いていて、python3には対応していない。いまどきのクラウド環境ならPython3に対応しているのだろう。つぎの引っ越し先はPython3にも対応していることを条件に入れよう。その選定作業は別途行うことにします。※
Python2用にコードを書き換えて、チェック対象のコンテンツをダウンロードできることを確認できました。

つぎに、クラウド環境のコントロールパネルで定期実行タスクを設定します。
定期実行で、「with open(saveFilePath, ‘wb’) as saveFile:
IOError: [Errno 13] Permission denied: 」のエラーメールが送られてくる。
phpから呼び出した時とは実行ユーザが異なることが原因だろう。
ということで、パス指定を修正して、定期実行によりチェック対象のコンテンツをダウンロードできることを確認できました。
 
次は、脆弱性関連情報をチェックするPythonコードを用意します。