Yuzo Related PostsプラグインのSQLインジェクションゼロデイ脆弱性を退治した時の手順です。やられた後の症状は、被害を受けた独自ドメインにアクセスすると、マルウェア復旧サービスのWEBサイトなど、不特定のWEBサイトにランダムに勝手にリダイレクトされてしまうという状況になります。リダイレクト先は毎回異なります。ダッシュボードへのログインは可能で、ダッシュボードがリダイレクトされてしまうことは無かったです。
原因は、Yuzo Related Postsプラグインがassets/ilenframework/core.php でis_admin()関数の使い方を誤り、非ログイン状態でも$wpdbのinsertやupdateなどデータベースのDML的な操作をhttp/httpsのPOSTリクエストで簡単に出来てしまうことです。結構シビアな脆弱性です。
以下画像は、埋め込まれたマルウェア実物です。Unicodeの文字コード化され、見た目はカンマ区切りのただの数字の羅列です。 カンマ区切りのただの数字の羅列をDBからそのまま出力した後、String.fromCharCodeによってブラウザにjavascriptとして解釈させており、人間的にjsのlocation.replaceやphpのheader('Location: '.$URL);などをファイルgrepやDB検索して、怪しいjavascriptやphpのマルウェアを見つけることはできません。ソースコード目視では探せないです。
Yuzo Related Postsプラグイン経由のhttp/httpsのPOSTリクエストでjavascriptのマルウェアを埋め込まれてしまいます。尚、Yuzo Related Postsプラグインを無効化していてもやられてしまいます。 私が緊急受託したレスキューケースでは、ダッシュボードでプラグインを削除しても、サーバ側のプラグインディレクトリではYuzo Related Postsプラグインが以下の様に丸ごと残っていました。コードは追っていませんがUninstall Methodsをしっかり実装できていないためだと考えられます。
ダッシュボードのプラグイン画面ではYuzo Related Postsプラグインは表示されない!というわかりにくい状況でした。原因調査中にWordpressのオーナーさんに聞いても、Yuzo Related Postsプラグインをインストールして、削除した記憶すら無い、「そんなプラグイン使ってません」と、忘れ去られている状況でした。
2019/4/10にゼロデイ脆弱性がwordfenceの記事でリリースされていたときには、Yuzo Related PostsプラグインはWordPress公式から即除名されていました。かなり有名なプラグインなので、対処法がわからず泣き寝入りした被害者は日本のみならず、世界規模で多いのではないでしょうか。
以下は、アクセスログを絞り込み、Yuzo Related Posts プラグインに懐疑の的を絞るに至ったときのものです。
脆弱性情報ってホントに大事だなぁ!としみじみ思いました。悪のボットの周期はおそらく、1日2回か3回くらいでインジェクションを仕掛けていたんじゃないかと思います。そして、ログ大事です、超大事、ログ無いと何もできません。尚、被害者の方は犯罪の被害者となりますので、そのことをお忘れなく。Thank you!!