yuzo related posts から学ぶ脆弱性を含むプラグインやテーマの特徴
4/10 ごろから yuzo related posts というプラグインが原因でJavaScriptが注入され、閲覧者が詐欺サイトへ飛ばされるという事例が多く発生しています。
公式ディレクトリに登録されていても安全とは限りません。
公式ディレクトリへの登録は最初に一度レビューされるだけで、そのあとはどんな変更もやり放題です。
プラグインやテーマの利用はGPLなので基本的に自己責任ですが、それによって閲覧者が攻撃にさらされる事態になるのは非常によろしくありません。
ここでは脆弱性を含む可能性のあるプラグインやテーマの使用を避けるために確認すべき点をいくつか挙げておきます。
1.コードが汚い
- インデントや空白が適切ではない
- スネークケースとキャメルケースが混ざっている
- ディレクトリ構造が適切ではない
- error や warning が1つ以上放置されている
- 一つ一つのメソッドの処理が異様に長い
- ロジックとレンダリングが混ざっている
- PHPDoc がない または 実装とあっていない
どれかひとつでも当てはまっている場合はプログラミングに不慣れな可能性が非常に高く、使用には注意が必要です。
このプラグインはすべてを満たしています。
2.通常あるべき処理の不足
- アンインストール時の処理がない (プラグインで追加した設定の削除など)
- タイムゾーンを考慮した日付処理になっていない
- 必要なページだけで js や css を読み込むようになっていない
- PHPファイルに直接アクセスされていないかどうかのチェックを行っていない
どれかひとつでも当てはまっている場合はWordPressの開発に不慣れな可能性が高く、使用する際はソースコードを確認して問題ないことを確かめるべきです。
このプラグインはすべて満たしています。
3.必要な処理の不足
- 権限のチェックがない (current_user_can などのチェックがない)
- nonceチェックがない (wp_verify_nonce 、check_admin_referer 、 check_ajax_referer などのチェックがない)
- 値の検証やエスケープ処理なしで echo が使用されている
- $_GET や $_POST はもちろんですが 保存された値も意図しない書き換えの可能性があるのでエスケープが必要です。
- SQLで変数を使用する際にプレースホルダーを使用していない
どれかひとつでも当てはまっている場合はセキュリティに関する考慮がされていません。
絶対に使用してはいけません。
このプラグインはこれもすべて満たしています。
4.不適切な情報送信
- ユーザの同意なしに以下のような情報を送信している
- 管理者の表示名
- 管理者のメールアドレス
- サーバIPから導出された以下の情報
- 緯度経度
- 国名コード
- 地域など
このプラグインは有効化時にこれらを送信する仕組みになっています。
別の関連記事プラグインでも同じようなことがあるのですが、この手のプラグインではよくあることなのでしょうか?
それとも海外製のプラグインでは普通なのでしょうか?
ただ今回はIPなどだけでなくメールアドレスまで勝手に取得しており、非常にまずいのではないかと思います。
まとめ
yuzo related posts は60000以上のサイトでアクティブだったにもかかわらず、誰も脆弱性や不審な動作などに気が付かなかったようです。
以前紹介したようにクラウドソーシングでは発注者は機能さえ動いていれば満足で裏で致命的な脆弱性が埋め込まれていても高評価を付けていることは知っていましたが、割と気を使ってそうな企業でも結局同じような意識だとわかり少し残念な気持ちになりました。