-オープンソースのSNSエンジン OpenPNEプロジェクト-

【緊急リリース】すべてのバージョンの OpenPNE 3、 opOpenSocialPlugin、 opWebAPIPlugin における XML 外部実体参照に関する脆弱性対応のお知らせ (OPSA-2013-003)

09 / 10 火曜日 2013

すべてのバージョンの OpenPNE 3 および opOpenSocialPlugin、 opWebAPIPlugin には、 XML 外部実体参照に関する脆弱性が存在します。この脆弱性をインターネット上の第三者に悪用されることで、たとえば、サーバ上の情報の漏洩や、サーバのリソースを過度に消費される可能性があります。

本日 (09/10)、この問題の対策版リリースをおこないましたので、内容を確認のうえバージョンアップまたはパッチの適用を、どちらも難しい場合は回避策の実施をお願いいたします。

本問題について

影響を受けるシステム

※以下に示す条件を満たしていたとしても、「PHP が依存する libxml2 のバージョンが 2.9.0 以上である場合」は本脆弱性の影響を受けないため、対応の必要はありません。お使いの PHP がどのバージョンの libxml2 に依存しているかどうかは、 phpinfo() の情報から確認することができます。

以下のバージョンの OpenPNE を使用しているすべてのサイト

  • OpenPNE 3.8.7
  • OpenPNE 3.6.11
  • OpenPNE 3.4.21.1
  • OpenPNE 3.2.7.6
  • OpenPNE 3.0.8.5

以下のバージョンの opOpenSocialPlugin を使用しているすべてのサイト

  • opOpenSocialPlugin 1.2.6
  • opOpenSocialPlugin 0.9.13
  • opOpenSocialPlugin 0.9.9.2
  • opOpenSocialPlugin 0.8.2.2

以下のバージョンの opWebAPIPlugin を使用しているすべてのサイト

  • opWebAPIPlugin 0.5.1
  • opWebAPIPlugin 0.4.0
  • opWebAPIPlugin 0.1.0

脆弱性の説明

XML パーサに存在する XML 外部実体参照の機能を悪用し、特定の形式の XML を OpenPNE やバンドルプラグインに読み込ませることで、サーバ上の情報の漏洩、サーバのリソースの過度な消費などの問題を引き起こされる可能性があります。

脆弱性の生じる機能は以下に示すとおりです。

  • OpenPNE 3 の複数の XML パース部分に存在する XXE 脆弱性 (CVE-2013-4333)
    • OpenPNE プラグインセットアップ関連機能
    • opAuthOpenIDPlugin による OpenID 関連機能
      ※OpenPNE 3 コアに同梱された PHP OpenID Library の脆弱性 が原因であるため、 opAuthOpenIDPlugin に対する修正ではなく、 OpenPNE 3 コアに対する修正が必要となります
  • opWebAPIPlugin による HTTP リクエスト処理部分に存在する XXE 脆弱性 (CVE-2013-4334)
  • opOpenSocialPlugin による OpenSocial 関連機能に存在する XXE 脆弱性 (CVE-2013-4335)

対策方法・回避方法

ソースコード上での対応方法については、本エントリの「本問題への対応方法」をご覧ください。

libxml2 側での対応方法

PHP の依存する libxml2 を 2.9.0 以上のものに置き換えることで、本問題への対策となります。

この作業が難しい場合は、後述する「ソースコード上での対方法」もしくは「回避方法」の手順を実施してください。

回避方法

後述の根本対応がすぐにおこなえない場合、以下のすべての対策を実施してください。

  • opWebAPIPlugin を無効にする
  • opOpenSocialPlugin を無効にする
  • opAuthOpenIDPlugin を無効にする
  • 信頼できないプラグインをインストールしない (ただし、これは本脆弱性の有無にかかわらずもともと必須です)

本問題への対応方法

「影響をうけるシステム」で示した条件を満たすすべてのサイトは、以下の対応を実施してください。

OpenPNE 3

対策版へのマイナーバージョンアップもしくは修正パッチの適用を実施してください。

OpenPNE 3.8.7.1
[.zip 版ダウンロード] [修正パッチ]
OpenPNE 3.6.11.1
[.zip 版ダウンロード] [修正パッチ]
OpenPNE 3.4.21.2
[.zip 版ダウンロード] [修正パッチ]
OpenPNE 3.2.7.7
[.zip 版ダウンロード] [修正パッチ]
OpenPNE 3.0.8.6
[.zip 版ダウンロード] [修正パッチ]
マイナーバージョンアップ手順

パッケージに同梱されているバージョンアップ手順書に記載されている通りに作業を実施してください。

各バージョンのマイナーバージョンアップ手順書は以下からも確認することができます。

パッチ適用手順

1. OpenPNEを設置しているディレクトリにパッチファイルをアップロードします
2. SSHでログインし、1 のディレクトリに移動します
3. 以下のコマンドを実行します

$ patch -p1 < パッチファイル名

4. 以下のコマンドを実行します

$ ./symfony openpne:migrate

OpenPNE プラグイン

OpenPNE 3 本体のマイナーバージョンアップをおこなうと opWebAPIPlugin や opOpenSocialPlugin のバージョンアップも自動的におこなわれます。

そのため、バンドルプラグインについては個別にバージョンアップする必要はありません。

バンドルされていないバージョンを利用しているなどの理由により、自動的にバージョンアップがおこなわれない場合、プラグインのリリース情報を参考に更新をおこなってください。

opWebAPIPlugin
opWebAPIPlugin-0.5.1.1
opWebAPIPlugin-0.4.0.1
opWebAPIPlugin-0.1.0.1
opOpenSocialPlugin
opOpenSocialPlugin-1.2.6.1
opOpenSocialPlugin-0.9.13.1
opOpenSocialPlugin-0.9.9.3
opOpenSocialPlugin-0.8.2.3

謝辞

本脆弱性は、海老原昂輔 (co3k) 氏よりご報告いただきました。厚く御礼申し上げます。

なお、 海老原氏によれば、本件のような XML パース処理に関わる脆弱性の概要やプログラム側での対応方法について、 PHP カンファレンス 2013 にて講演する予定とのこと です。

セキュリティ上の問題の報告手順について

OpenPNE プロジェクトでは、以下に案内している通り、セキュリティ上の問題の報告を受け付ける窓口 (security@openpne.jp) を用意しています。

https://redmine.openpne.jp/projects/op3/wiki/How_To_Report_Issue_%28ja%29#%E3%82%BB%E3%82%AD%E3%83%A5%E3%83%AA%E3%83%86%E3%82%A3%E4%B8%8A%E3%81%AE%E5%95%8F%E9%A1%8C%E3%82%92%E5%A0%B1%E5%91%8A%E3%81%99%E3%82%8B

セキュリティ上の問題を発見した場合は、通常の公開されたバグ報告の手順を踏むのではなく、 security@openpne.jp に連絡してください。 security@openpne.jp はクローズドなメーリングリストであり、このメーリングリストでおこなわれた脆弱性の詳細情報などのやり取りがそのまま公開されることはありません。

コメント:11

ぽっと 13-09-11 (水) 10:50

OpenPNE3.8.1も対象となりますか?
その場合、3.8.7用のパッチをそのまま適用しても
大丈夫でしょうか?

Kousuke Ebihara 13-09-12 (木) 17:32

はい、 OpenPNE 3.8.1 も対象となりますが、修正内容は同一です。カスタマイズの有無にもよると思いますが、特に問題なく適用できるのではないかと思います。

3.8.7 用のパッチを用いた場合、 data/version.php で失敗すると思いますが、そこは無視していただいて問題ないです。

ぽっと 13-09-13 (金) 9:32

ご回答ありがとうございました!
適用を行ってみます

まゆぼ 13-09-16 (月) 14:07

現在OpenPNE3.9.0を使ってます。
これも対策が必要でしょうか?
•opOpenSocialPlugin と•opWebAPIPluginは使用しておりません。

Kousuke Ebihara 13-09-16 (月) 19:27

opOpenSocialPlugin と opWebAPIPlugin を使用していない場合、影響を受けるのは以下の機能です。

* OpenPNE プラグインセットアップ関連機能
* opAuthOpenIDPlugin による OpenID 関連機能

この機能において本脆弱性が存在することによるリスクを受容できるのであれば、対策を適用する必要はありません。

なお、本脆弱性への修正は master ブランチに既に適用されています。
小さな差分ですし、修正内容的に副作用等もまずないでしょう。開発版である(しかもリリース版が現状存在しない) OpenPNE 3.9.x 系列を使用されているということですし、おそらく普段運用していただいているように、都合のよいタイミングで、他の修正と一緒に適宜取り込んでいただければ問題ないのかなと思います。

この脆弱性のリスクを受容できない場合は速やかに修正を取り込む必要がありますが、未リリース版を利用いただいているということで、運用方法によっては本脆弱性の修正「だけ」を取り込むことが今後の master への追従の妨げとなるかもしれません。
今回の脆弱性については PHP から libxml 2.9 を用いることで対策となりますが、今後ソースコード上の修正が必須な脆弱性が出てくるかもしれず、そのときに master への追従が遅れていると困ったことになるかもしれません。

もちろん適切にパッチ管理をおこなったうえで運用されているのであればまったく問題ないのですが、この機会に、安定版の利用についてもご検討いただければと思います。

まゆぼ 13-09-29 (日) 14:13

丁寧な回答ありがとうございました。

導入時に3.8を使用しましたら、タイムラインの表示がエラーになり、対策をwebで検索したところ、masterブランチが修正済みとの寺田屋さまからの回答を見つけてダウンロードして使用してました。
3.8系列のほうが安心であればそちらに切り替えて使用したいと思います。

Akane 13-10-08 (火) 12:01

こんにちは!
OpenPNE3.8.1を使っていますが
opOpenSocialPlugin
opWebAPIPlugin
opAuthOpenIDPlugin
は使用していません。

OpenPNE プラグインセットアップ関連機能が関係あるかと思っています。
カストマイズをしている関係で最小限の適用にしたいと思っているのですが
配布されているパッチのプラグインセットアップ関連
(lib\plugin配下)の更新を行えばよいのでしょうか?

Kousuke Ebihara 13-10-08 (火) 14:02

影響を受けるプラグインを使用していないのであれば、修正対象となる差分は lib/plugin/opPearRest.class.php, lib/plugin/opPlugin.class.php, lib/task/opPluginArchiveTask.class.php, lib/util/opToolkit.class.php になるかと思います。 OpenID 関連部分やドキュメント、テスト、バージョンの更新の追加を除いたほぼすべての差分を適用することになります。

カスタマイズされているということで、これらのファイルの差分のみを抽出した上で適用するのも悪いアイディアではありませんが、一度すべての差分を適用してみて失敗しないかどうかを確認してみるのも手かもしれませんのでご一考ください。今回の修正内容自体に副作用はない(ように修正しています)ので、カスタマイズしている環境下で検討するべき事項となるのは、パッチの適用に失敗する箇所がないかどうかの一点のみになるのかなと思います。
もしかすると data/version.php などのファイルの更新で失敗するかもしれませんが、そのあたりは無視していただいて構わないかと思います。

Akane 13-10-08 (火) 16:01

ご丁寧で早い回答、ありがとうございます。
本当に助かります!
差分について、とても参考になりました
ありがとうございました。

実は、パッチを当てようとしたところ、自作のプラグインのテーブルについて
SQLSTATE[HY000]: General error: 1005 Can’t create table
のエラーが発生して、途中で停止してしまうのです。

2つのテスト環境の片方では上記のエラーで止まり、片方では最後まで動いているように見えます。
schema.ymlの内容もDBの構造も同じなので
このまま本番に適用するのをためらっております…

そこで、今回テーブルの変更などもないはずだし、
最低限の適用はできない物かと思い、質問させていただきました。

Kousuke Ebihara 13-10-08 (火) 16:18

> SQLSTATE[HY000]: General error: 1005 Can’t create table

なるほど、そういった状況なのですね。

パッチによるテーブル定義の変更等も一切発生しないため、その問題はもともと貴サイトに潜在していたものではないかと推察します。ですので、パッチの適用範囲を狭めても問題は解決しない可能性が高いです。

今回はソースコードの変更のみで修正が完了するため、ひとまずパッチによってソースコードを変更した後、問題のエラーの解決とするのがよさそうに思います(が、脆弱性によって被るリスクを一定期間受容できるのであれば、パッチの適用をあえて後回しにするのも一案ではあります)。

Akane 13-10-08 (火) 17:21

分りやすいご説明 ありがとうございます!
リスクを先送りするのもよくないかと考えておりますので
取り急ぎ、ソースコードの変更で一時対応したいと思います。

本当に本当に助かりました!
ありがとうございました!!

ページの先頭に戻る