[OPSA-2016-002] OpenPNEおよび一部ブラグインに存在する複数の脆弱性に対する修正
11 / 10 木曜日 2016
本日 (2016/11/10)、OpenPNE, opTimelinePlugin, opDiaryPlugin, opFavoritePlugin および opWebAPIPlugin に対して次の通りセキュリティリリースを行いました。内容を確認のうえバージョンアップまたはパッチの適用をお願いいたします。
- OpenPNE 3.8.21.1, OpenPNE 3.6.24.1
- opTimelinePlugin 1.2.6.1
- opDiaryPlugin 1.4.1.1, opDiaryPlugin 1.5.1.1
- opFavoritePlugin 1.0.1.1
- opWebAPIPlugin 0.5.1.2
これらのバージョンは、OpenPNE, opTimelinePlugin, opDiaryPlugin, opFavoritePlugin および opWebAPIPlugin に存在する下記の脆弱性に対する修正を含んでいます。
- SNSメンバー間におけるアクセス制限を回避する脆弱性
- ログイン可能なセッションCookieがOAuthを使用するサードパーティアプリに流出する脆弱性
- IPアドレスに基づくWeb APIへのアクセス制限を回避する脆弱性
- HTTPヘッダインジェクション脆弱性
各脆弱性の詳細については以下を参照して下さい。
1. SNSメンバー間におけるアクセス制限を回避する脆弱性
OpenPNE, opTimelinePlugin, opDiaryPlugin および opFavoritePlugin について、公開範囲設定やコミュニティ参加状態に基づくアクセス制限を回避する脆弱性が発見されました。
想定される影響
SNSに登録しているユーザーによって、下記のような操作を行われる可能性があります。
- JSON API を経由して、自身の参加していないコミュニティにアクティビティを投稿される可能性があります
- 「日記コメント記入履歴」機能を経由して、非公開に設定されている日記のタイトルを閲覧される可能性があります
- 「お気に入り」機能を経由して、アクセスブロック機能でアクセスが制限されているメンバーの日記およびブログのタイトルを閲覧される可能性があります
- アクセスブロック機能でアクセスが制限されているメンバーを「お気に入り」に追加される可能性があります
影響を受けるバージョン
- OpenPNE 3.8.21 以下
- opTimelinePlugin 1.2.6 以下
- opDiaryPlugin 1.4.1 以下 または opDiaryPlugin 1.5.1 以下
- opFavoritePlugin 1.0.1 以下
OpenPNE 3.6.x を使用している場合、上記のバージョンのうちopDiaryPlugin 1.4.1 以下 または opFavoritePlugin 1.0.1 以下 を使用している場合には当脆弱性の影響を受けます。
(opTimelinePlugin および opDiaryPlugin 1.5.x は OpenPNE 3.8.x でのみサポートされています)
対策方法
今回提供されるアップデートを適用して下さい。この脆弱性についてアップデートを行わずに回避する方法はありません。
2. ログイン可能なセッションCookie がOAuth を使用するサードパーティアプリに流出する脆弱性
(OpenPNE に標準で備わる OAuth 機能は https://redmine.openpne.jp/issues/2775 の不具合により使用できない状態となっています。当脆弱性は、独自にパッチを当てる等によりこの不具合を回避している SNS でのみ起こりうるものです。)
OpenPNE には OAuth 1.0a に基づいてサードパーティアプリの認可を行う機構が存在し、opWebAPIPlugin や opOpenSocialPlugin で使用されています。この機構を使用することで、サードパーティアプリが必要とするリソース (メンバーリストや日記など) および権限 (読み込みのみ, 読み書き両方) を SNS ユーザーに呈示し、その範囲内での操作を認可するアクセストークンをサードパーティアプリに発行することができます。
当脆弱性では、サードパーティアプリにアクセストークンを受け渡す際に、認可を行った SNS ユーザーとしてログイン可能なセッション Cookie が意図せず送信されていました。これにより、サードパーティアプリは受け取ったセッション Cookie の値を使用してセッションハイジャックを行うことが可能となり、ユーザーが認可する権限を越えた操作を行われる可能性があります。
想定される影響
第三者によって、流出したセッション Cookie の値を使用してユーザーになりすまされる可能性があります。
影響を受けるバージョン
- OpenPNE 3.6.24 以下 または OpenPNE 3.8.21 以下 (かつ、 https://redmine.openpne.jp/issues/2775 の不具合を独自に回避する修正をしたもの)
対策方法
この脆弱性は下記のいずれかの方法で対策が可能です。
アップデートを適用する (推奨)
今回提供されるアップデートによって修正が行われているため、アップデートを適用することで対策が可能です。
新規アプリケーションの登録を無効化し、既に登録されたアプリケーションを削除する
この手順によって脆弱性を回避する場合、既にSNSに登録されているサードパーティアプリは全て使用できない状態になります。
管理画面のSNS設定 (/pc_backend.php/sns/config?category=general) から「外部サービスとの接続設定の使用設定」を「使用しない」に設定することで、新規のサードパーティアプリの登録を禁止することができます。
さらに、既に登録されているアプリケーションは引き続きアクセストークンの発行が可能な状態となっているため、管理画面の「連携済みアプリケーション一覧」(/pc_backend.php/connection/list) から全てのアプリケーションを削除して下さい。
これらの手順によりアクセストークンの発行自体が行われなくなるため、当脆弱性は生じなくなります。
3. IPアドレスに基づくWeb APIへのアクセス制限を回避する脆弱性
管理画面の「API設定」(/pc_backend.php/opWebAPIPlugin) にて Auth type を IP address に設定している SNS で、許可された IP アドレスから Web API へのアクセスを行った際に意図せずセッション Cookie が発行されていました。
当脆弱性では、そのセッション Cookie の値を使用することで管理者が許可していない IP アドレスからも Web API にアクセスされる可能性があります。
想定される影響
第三者によって、許可されていない IP アドレスから Web API にアクセスされる可能性があります。
影響を受けるバージョン
以下のバージョンを両方とも満たす環境で影響を受けます。
- OpenPNE 3.6.24 以下 または OpenPNE 3.8.21 以下
- opWebAPIPlugin 0.5.1.1 以下
ただし、「API設定」(/pc_backend.php/opWebAPIPlugin) の Auth type に OAuth を選択している SNS、または Auth type に IP address を選択しているが Ip list が空欄となっている SNS は影響を受けません。
対策方法
この脆弱性は下記のいずれかの方法で対策することが可能です。
アップデートを適用する (推奨)
今回提供されるアップデートによって修正が行われているため、アップデートを適用することで対策が可能です。
また、今回のアップデートでは API アクセスにおいて本来発行する必要のないセッション Cookie を抑制するための修正を OpenPNE 本体に対して行っているため、opWebAPIPlugin を使用していない SNS であっても当アップデートを適用することが推奨されます。
opWebAPIPlugin を削除する
opWebAPIPlugin による Web API 機能を使用していない SNS では、opWebAPIPlugin を削除することでも当脆弱性を回避することが可能です。
4. HTTPヘッダインジェクション脆弱性
OpenPNE について、細工された HTTP リクエストを受け取ることで HTTP ヘッダインジェクションを引き起こす脆弱性が発見されました。
当脆弱性は、HTTP リクエストのプロトコルバージョンを表す部分に細工した文字列を含めることによって引き起こされるものです。例として、通常であればリクエストの最初の一行に GET / HTTP/1.1 といった内容が送られるところを GET / Set-Cookie: foo=bar; HTTP/1.1 のように細工した文字列を送ることで任意のヘッダを出力させることが可能となります。
想定される影響
第三者によって、レスポンスヘッダに任意のヘッダを追加される可能性があります。
ただし、上記に記載した GET / Set-Cookie: foo=bar; HTTP/1.1 のような不正な形式のリクエストを Web ブラウザ上で送信させる現実的な手段は確認されておらず、当脆弱性を悪用することは困難であると考えています。
影響を受けるバージョン
- OpenPNE 3.6.24 以下 または OpenPNE 3.8.21 以下
ただし、Lighttpd など一部の HTTP サーバーではプロトコルバージョンに不正な文字列が含まれる場合に 400 Bad Request のレスポンスを返すため、そのような環境においては影響を受けない可能性があります。
対策方法
今回提供されるアップデートを適用して下さい。この脆弱性についてアップデートを行わずに回避する方法はありません。
アップデート方法
OpenPNE 3
対策版へのマイナーバージョンアップもしくは修正パッチの適用を実施してください。
- OpenPNE 3.8.21.1
- [.zip 版ダウンロード] [修正パッチ]
- OpenPNE 3.6.24.1
- [.zip 版ダウンロード] [修正パッチ]
マイナーバージョンアップ手順
パッケージに同梱されているバージョンアップ手順書に記載されている通りに作業を実施してください。
各バージョンのマイナーバージョンアップ手順書は以下からも確認することができます。
パッチ適用手順
1. OpenPNEを設置しているディレクトリにパッチファイルをアップロードします
2. SSHでログインし、1 のディレクトリに移動します
3. 以下のコマンドを実行します
$ patch -p1 < パッチファイル名
4. 以下のコマンドを実行します
$ ./symfony openpne:migrate
OpenPNE プラグイン
OpenPNE 3.6 をご利用の場合は、OpenPNE 3 本体のマイナーバージョンアップをおこなうと opWebAPIPlugin、opFavoritePlugin、opDiaryPlugin のバージョンアップも自動的におこなわれます。
そのため、バンドルプラグインについては個別にバージョンアップする必要はありません。
OpenPNE 3.8 をご利用の場合やバンドルされていないバージョンを利用しているなどの理由により、自動的にバージョンアップがおこなわれない場合、プラグインのリリース情報を参考に更新をおこなってください。
-
opTimelinePlugin
- opTimelinePlugin 1.2.6.1
- [.zip 版ダウンロード] [修正パッチ]
-
opDiaryPlugin
- opDiaryPlugin 1.4.1.1
- [.zip 版ダウンロード] [修正パッチ]
- opDiaryPlugin 1.5.1.1
- [.zip 版ダウンロード] [修正パッチ]
-
opFavoritePlugin
- opFavoritePlugin 1.0.1.1
- [.zip 版ダウンロード] [修正パッチ]
-
opWebAPIPlugin
- opWebAPIPlugin 0.5.1.2
- [.zip 版ダウンロード] [修正パッチ]
セキュリティ上の問題の報告手順について
OpenPNE プロジェクトでは、以下に案内している通り、セキュリティ上の問題の報告を受け付ける窓口 (security@openpne.jp) を用意しています。
セキュリティ上の問題を発見した場合は、通常の公開されたバグ報告の手順を踏むのではなく、 security@openpne.jp に連絡してください。 security@openpne.jp はクローズドなメーリングリストであり、このメーリングリストでおこなわれた脆弱性の詳細情報などのやり取りがそのまま公開されることはありません。