[OPSA-2017-002] APIリクエストに含まれる制御文字が適切に除去されない不具合に対する修正
11 / 09 木曜日 2017
本日 (2017/11/09)、OpenPNE に対して次の通りセキュリティリリースを行いました。内容を確認のうえバージョンアップまたはパッチの適用をお願いいたします。
- OpenPNE 3.8.25.1
- OpenPNE 3.6.28.1
これらのバージョンは、OpenPNE に存在する次の脆弱性に対する修正を含んでいます。
- APIリクエストに含まれる制御文字が適切に除去されない不具合
詳細については以下を参照して下さい。
1. APIリクエストに含まれる制御文字が適切に除去されない不具合
OpenPNE について、API リクエストに含まれる制御文字が適切に除去されない不具合が発見されました。
通常 OpenPNE ではリクエストに含まれる制御文字を事前に除去する処理を行っています。
これは以下のような問題を防ぐための予防的な対策に当たります。
-
PHP には Null バイトを含む文字列によって意図しない挙動を示す関数(バイナリセーフでない関数)が存在することが知られています。この挙動を利用して入力値の検査をすり抜ける攻撃 (Null Byte Attack) は、事前に Null バイトを除去することで防ぐことが可能です。
※ 参考: https://github.com/openpne/OpenPNE3-doc/blob/e955f2ac/secure-coding-guideline/secure-coding-guideline.ja.rst#null-byte-attack -
必須項目であるパラメータに制御文字のみを含む文字列を渡すことによって、通常発生する必須項目のエラーを回避される場合があります。
※ 参考: http://trac.openpne.jp/ticket/1566
これらの対策は、ユーザ画面・管理画面におけるリクエストに対しては既に行われております。
当リリースにおける修正が適用されていない OpenPNE では、API へのリクエストについてのみ上述の対策が適用されない状態となっておりました。
対象となる API:
- opWebAPIPlugin によって提供される API
- JSON API (OpenPNE 3.8 以上)
- その他、URL に /api.php を含む API
想定される影響
現時点で OpenPNE の API リクエストに Null バイト等の制御文字を含めることで脆弱性に繋がる問題は確認されていません。
しかし、通常 OpenPNE では事前に Null バイト等がパラメータから除去されている前提で実装されており、このフィルタが機能しない場合に予期しない影響を及ぼす可能性があります。
そのため、上記の「対象となる API」が有効な SNS においては当リリースにおける修正を適用することを推奨します。
影響を受けるバージョン
- OpenPNE 3.8.25 以下
- OpenPNE 3.6.28 以下
対策方法
今回提供されるアップデートを適用して下さい。この脆弱性についてアップデートを行わずに回避する方法はありません。
アップデート方法
対策版へのマイナーバージョンアップもしくは修正パッチの適用を実施してください。
- OpenPNE 3.8.25.1
- [.zip 版ダウンロード] [修正パッチ]
- OpenPNE 3.6.28.1
- [.zip 版ダウンロード] [修正パッチ]
マイナーバージョンアップ手順
パッケージに同梱されているバージョンアップ手順書に記載されている通りに作業を実施してください。
各バージョンのマイナーバージョンアップ手順書は以下からも確認することができます。
パッチ適用手順
1. OpenPNEを設置しているディレクトリにパッチファイルをアップロードします
2. SSHでログインし、1 のディレクトリに移動します
3. 以下のコマンドを実行します
$ patch -p1 < パッチファイル名
4. 以下のコマンドを実行します
$ ./symfony openpne:migrate
セキュリティ上の問題の報告手順について
OpenPNE プロジェクトでは、以下に案内している通り、セキュリティ上の問題の報告を受け付ける窓口 (security@openpne.jp) を用意しています。
セキュリティ上の問題を発見した場合は、通常の公開されたバグ報告の手順を踏むのではなく、 security@openpne.jp に連絡してください。 security@openpne.jp はクローズドなメーリングリストであり、このメーリングリストでおこなわれた脆弱性の詳細情報などのやり取りがそのまま公開されることはありません。