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

【緊急リリース】OpenPNE 3.6.13, 3.8.9 以下の「次回から自動ログイン」機能に存在する PHP Object Injection 脆弱性対応のお知らせ (OPSA-2014-001)

01 / 20 月曜日 2014

OpenPNE 3.6.13, 3.8.9 のメンバーのログイン画面にて利用可能な「次回から自動ログイン」という機能には、PHP Object Injection 脆弱性が存在します。
この脆弱性を悪用することで、OpenPNEでは任意の PHP コードの実行が可能となっており、極めて重大な問題です。

本日 (2014/01/20)、この問題の対策版として OpenPNE 3.6.13.1, 3.8.9.1 のリリースをおこないましたので、内容を確認の上、バージョンアップまたはパッチの適用をお願いいたします。

本問題について

影響を受けるシステム

以下のバージョンの OpenPNE (メンバーのログイン画面の「次回から自動ログイン」機能を有するバージョン) を使用しているすべてのサイト

  • OpenPNE 3.6.13 以下
  • OpenPNE 3.8.9 以下

※OpenPNE 3.4系列、OpenPNE 3.2 系列、OpenPNE 3.0 系列は問題となる機能を有していないため、本脆弱性の影響を受けません。

脆弱性の説明

OpenPNE 3.6 から追加された「次回から自動ログイン」の機構は、自動ログイン対象となるメンバー ID と、自動ログイン毎に発行された認証用の ID の組をバイナリデータとしてシリアライズし、 base64 エンコードを施した文字列を格納した cookie をやり取りすることによって実現されています。
この認証に必要な cookie の情報をシリアライズ、アンシリアライズする手段に実装上の不備があるため、任意の PHP コードを実行されてしまうといった重大な問題が発生する可能性があります。

想定される影響

以下のような深刻な影響が考えられます。

  • 任意の PHP コード実行
  • Web サーバからアクセス可能な任意のファイルの削除

対策方法・回避方法

対応方法については、本エントリの「本問題への対応方法」をご覧ください。
この問題に対する回避方法はありません。

本問題への対応方法

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

OpenPNE 3

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

OpenPNE 3.8.9.1
[.zip 版ダウンロード] [修正パッチ]
OpenPNE 3.6.13.1
[.zip 版ダウンロード] [修正パッチ]
マイナーバージョンアップ手順

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

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

パッチ適用手順

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

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

バージョンアップ、パッチ適用後の注意点

本問題の対応を実施すると、「次回から自動ログイン」を設定していたユーザでも再度ログイン操作を行う必要があります。

謝辞

本脆弱性は、Secunia Research の Egidio Romano 氏よりご報告を頂きました。
報告者の方、および、本問題の解決にあたられた関係者各位に対して厚く御礼申し上げます。

This vulnerability is reported by Egidio Romano of Secunia Research.
We really appreciate him and all persons who worked very hard to release this advisory.

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

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 はクローズドなメーリングリストであり、このメーリングリストでおこなわれた脆弱性の詳細情報などのやり取りがそのまま公開されることはありません。

コメント:14

よーすけ 14-01-27 (月) 13:27

いつもお世話になっております。
OpenPNE3.8.9を利用させていただいてます。

修正パッチを適用しようと考えているのですが
その方法がよく分からないので教えていただければ嬉しいです。

特に、修正パッチはリンク先のソースコードを
メモ帳などにただコピペすればいいのか、
ファイル名と拡張子はどうすればいいのか、
この2点です。

よろしくお願いします。orz

いりやっく 14-01-29 (水) 11:58

> ※OpenPNE 3.4系列、OpenPNE 3.2 系列、OpenPNE 3.0 系列は問題となる機能を有していないため、本脆弱性の影響を受けません。

明確化の質問です。OpenPNE 2 系列 (2.12.6) も問題となる機能を有していないため、本脆弱性の影響を受けない、と理解してよろしいでしょうか。

imamura 14-01-29 (水) 13:23

よーすけさん

お世話になっております。
パッチの作成方法はメモ帳にコピペでも構いませんし、ブラウザのページを保存する機能で取得する方法でも構いません。
拡張子は任意で構いませんが、「.patch」や「.diff」とするのが一般的かと思います。

いりやっくさん
コメントありがとうございます。
仰るとおりです。
OpenPNE2と3とでは「次回から自動ログイン」の仕組みが異なるため、今回の脆弱性は発生しません。

だむ 14-01-29 (水) 14:27

お世話になっております。
現在、OpenPNE 3.6.4を利用させて頂いています。
この脆弱性問題に含まれるのかわからなくなってしまいました。
もし含まれるのであれば対策を施したく考えています。

いりやっく 14-01-29 (水) 18:36

imamuraさん、

ご回答感謝します。N/A ということで理解しました。

imamura 14-01-30 (木) 10:45

だむさん

お世話になっております。
OpenPNE3.6.4は本脆弱性の問題に含まれます。

よーすけ 14-01-30 (木) 13:54

imamura様、いつもお世話になっております。

言われた通り、パッチファイルに one.patch と名前を付けてOpenPNEフォルダと同じ階層にアップロードしました。

SSHでログインし $ls でOpenPNEフォルダと、one.pathc の両方が表示される階層にて 「$ patch -p1 < パッチファイル名」を実行致しました。

すると、「Hmmm… そのようなファイルは見当たりません」と表示されます。なぜでしょうか?

よろしくお願いいたします。

imamura 14-01-30 (木) 14:12

よーすけさん

お世話になっております。
下記の様にOpenPNEのディレクトリ内にパッチファイルを設置されてますでしょうか?
パッチコマンドの実行もOpenPNEのディレクトリ内でお願いします。

OpenPNE_dir
├── LICENSE
├── NOTICE
├── README
├── apps
├── bin
├── cache
├── config
├── data
├── doc
├── i18n
├── lib
├── log
├── plugins
├── symfony
├── tags
├── templates
├── test
├── web
└── OpenPNE_3_8_9_to_OpenPNE_3_8_9_1.patch

よーすけ 14-01-30 (木) 22:16

imamura様。
夜分遅くに失礼致します。。。

ご指摘の通りに致しまして再度挑戦してみました。
ところが、相変わらずうまくいきません。orz
SSH(Macターミナル)でのやり取りをそのままコピペしますね。

ご指導の方よろしくお願い致します。↓

%pwd
/home/myAcount
%cd OpenPNE3
%ls
LICENSE bin doc one.patch←コレ test
NOTICE cache i18n plugins web
README config lib symfony
apps data log templates
%pwd
/home/myAcount/OpenPNE3
%patch -p1 < one.patch
Hmm… I can't seem to find a patch in there anywhere.

よーすけ 14-01-30 (木) 22:26

できました!

先ほどはパッチファイルをHTML文書として
保存していたのが問題だったようです。

下記のような文字列が表示されましたが、
無事にパッチファイルが適用されたということでしょうか?

%patch -p1 < one.diff
Hmm… Looks like a unified diff to me…
The text leading up to this was:
————————–
|diff –git a/data/version.php b/data/version.php
|index 7b7a345..823672d 100644
|— a/data/version.php
|+++ b/data/version.php
————————–
Patching file data/version.php using Plan A…
Hunk #1 succeeded at 10.
Hmm… The next patch looks like a unified diff to me…
The text leading up to this was:
————————–
|diff –git a/lib/user/opSecurityUser.class.php b/lib/user/opSecurityUser.class.php
|index 367edcd..73236b9 100644
|— a/lib/user/opSecurityUser.class.php
|+++ b/lib/user/opSecurityUser.class.php
————————–
Patching file lib/user/opSecurityUser.class.php using Plan A…
Hunk #1 succeeded at 145.
Hunk #2 succeeded at 187.
done

p.s. コメント欄をソースだらけにしてしまい恐縮です。orz

imamura 14-01-31 (金) 11:01

よーすけさん

おつかれさまです。
succeeded となっていますので問題無いと思います。

よーすけ 14-01-31 (金) 14:30

imamura様へ

ご丁寧に対応して下さり感謝致します。
無事に、パッチを適用することができました。

今後ともよろしくお願い致します。^^

k 14-02-01 (土) 12:31

下記のような出力となりましたが
問題ないでしょうか?
途中でFAILEDとなっているので心配です。

[abc@localhost]# patch -p1 < OpenPNE_3_6_13_to_OpenPNE_3_6_13_1.patch
patching file data/version.php
Hunk #1 FAILED at 10.
1 out of 1 hunk FAILED — saving rejects to file data/version.php.rej
patching file lib/user/opSecurityUser.class.php
Hunk #1 succeeded at 145 (offset -2 lines).

たかゆき 14-02-09 (日) 23:27

patch -p1 < OpenPNE_3_8_9_to_OpenPNE_3_8_9_1.patch
を実行したのですが、patch: command not foundとなってしまいます

素人ですいませんが、解決方法があれば教えていただければと思います

トラックバック:1

ピンバック from SNS構築ソフトウェア「Open PNE」に脆弱性。利用者はセキュリティパッチの適用を! | Infini Security Blog 14-01-28 (火) 2:01

[…] en PNA事務局 手嶋屋「【緊急リリース】OpenPNE 3.6.13, 3.8.9 以下の「次回から自動ログイン」機能に存在する PHP Object Injection 脆弱性対応のお知らせ (OPSA-2014-001)」 https://www.openpne.jp/archives/12293/ […]

ページの先頭に戻る