Skip to content

Conversation

@kanji-n
Copy link
Contributor

@kanji-n kanji-n commented Jul 25, 2019

#1
脆弱性対応

クエリパラメータに action と plugin が存在したらどのページであってもCSVに書き出される
しかも値がそのまま書き込まれる。しかも値がそのまま書き込まれる。

<script> タグで囲まれたJavascriptコードをクエリパラメータに入れるとダッシュボードで実行されてしまいます。

・プラグインページのみログの書き込みを行うようにする
・エスケープ関数を追加
・カッコが含まれていた場合、ログの書き込みを行わないようにする

ブラウザから <サーバーのドメイン>/wp-content/plugins/wp-plugin-confirm/logs/yyyy-mm.csv にアクセスするとファイルが閲覧できてしまう

・home_urlにリダイレクトされるようにする
対処法が無いか調査中

@kanji-n kanji-n added the bug Something isn't working label Jul 25, 2019
@kanji-n kanji-n requested a review from pm-yosuke July 25, 2019 10:20
@kanji-n kanji-n self-assigned this Jul 25, 2019
@kazunao-anahara
Copy link

ブラウザから <サーバーのドメイン>/wp-content/plugins/wp-plugin-confirm/logs/yyyy-mm.csv にアクセスするとファイルが閲覧できてしまう

これ直ってないと思うんですがいかがでしょう。
ってより直せない気もしてますが。

@kanji-n
Copy link
Contributor Author

kanji-n commented Jul 26, 2019

ブラウザから <サーバーのドメイン>/wp-content/plugins/wp-plugin-confirm/logs/yyyy-mm.csv にアクセスするとファイルが閲覧できてしまう

上記、治ってませんでした。
テスト時、ディレクトリ名「logs」でアクセスしていたため、気が付きませんでした。
正しくは、ディレクトリ名「log」です。

間違い:<サーバーのドメイン>/wp-content/plugins/wp-plugin-confirm/logs/yyyy-mm.csv
正しい:<サーバーのドメイン>/wp-content/plugins/wp-plugin-confirm/log/yyyy-mm.csv

対処法が思いつかないので、調べてみます。

@pm-yosuke
Copy link

対処法が思いつかない

ファイルへの書き出し自体がナンセンスかなと思っています。本プラグイン無効化時にログファイルを削除するという後始末処理も無いですし。
要するに設計レベルで見直しが必要かと。
具体的には保存先をwp_optionsテーブルにするとか。

ちなみに

・カッコが含まれていた場合、ログの書き込みを行わないようにする

CSVをExcelで開いたときに関数が実行されるのを防ぐための対処だと思いますが、

  • プラグインのファイル名に括弧がついていると記録されなくなる
    → 存在するのかは知らんけど
  • =A1 とかってやると別セルの値を参照するようになってしまう
    → 脆弱性ではないけど利用者の意図しない動きになるんで防ぐべき

まあ、CSVへの出力をやめれば考える必要無いんですが。

@kazunao-anahara
Copy link

WP-DBManagerはデフォルトはwp-contetntの中に出力されてしまいますが、オプションページで好きな箇所に書き出しできるように設定できるようにして回避しています。

ただWP-DBManagerはファイル書き出しが必須なプラグインですが、今作は「プラグイン有効化/無効化の誤作動を防止する」というプラグインだと思うので、その観点ではログの出力は無理につける必要無いと思います。

やったとして、hookだけ準備して誰がどのプラグインを有効/無効にしたか取得できるようにしておくだけでもいいのかなと。

@kanji-n
Copy link
Contributor Author

kanji-n commented Jul 31, 2019

指摘、提案ありがとうございます。

CSVへのログ記録を廃止することとします。
代わりにログをwp_optionsにarray形式で保存させる方法で進める。
ログの記録は、plugin有効・無効時のhookを利用する。
過去verの利用者向けに、ログcsvファイルからwp_optionsに移行する対応も検討する必要あり。
本plugin削除時に、関係するデータをwp_optionsから削除ことも考慮する。

実装前に設計を箇条書きで書き、共有したいと思います。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants