以前に頻発していたWordPressのXMLRPC不正ログイン攻撃がまた始ってしまった。なぜかユーザー名がわかってて攻撃しているようだ。前回もなんでユーザー名がわかるんだろうと不思議に思っていたが調べてみると投稿者のリンク先にユーザー名が含まれていることを発見する。しかも、リンク先なので普通にカーソルを当てるだけでブラウザに表示されてしまう...orz
こんな単純な方法でユーザー名がわかってしまうWordPressってどうなの?とも一瞬思ったが今更変更するのも大変だし、そもそもテーマに依存する問題であるようなので共通対策というのもないようである。さらに...たまたま使ってしまったtwentyseventeenテーマの場合、設定では対策不可能なので直接PHPを修正して対処するしかないようだ。
ブラウザで投稿ページのソースを表示しユーザー名を検索すると2か所あった。そのうちのひとつはログイン名なので問題なさそう。もうひとつが問題の投稿者のリンク先らしい。どこのPHPでリンク先を生成しているのか調べるために次のコマンドにより投稿者のリンク先付近のhtmlタグ情報から関連しそうな部分を探してみた。
$ find . -type f -name “*.php” | xargs grep ‘author vcard’ -n
で、特定したPHPの問題であるhref部分を削除してみたところ表示はされなくなったが、これで本当に攻撃が回避できるかどうかもわからないしテーマを更新した場合は再度修正する必要もあるが対策の一つとして有効であることは間違いないだろう。
[インストール先]/wordpress/wp-content/themes/[テーマ]/inc/template-tags.php
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | if ( ! function_exists( 'twentyseventeen_posted_on' ) ) :                                                                                                                                                                         /**                                                                                                                                                                                                                        * Prints HTML with meta information for the current post-date/time and author.                                                                                                                                            */                                                                                                                                                                                                                       function twentyseventeen_posted_on() {                                                                                                                                                                                            // Get the author name; wrap it in a link.                                                                                                                                                                                $byline = sprintf(                                                                                                                                                                                                                /* translators: %s: post author */                                                                                                                                                                                        __( 'by %s', 'twentyseventeen' ),                                                                                                                                                                 ★修正前★                        // '<span class="author vcard"><a class="url fn n" href="' . esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ) . '">' . get_the_author() . '</a></span>'                             ★修正後★                        '<span class="author vcard"><a class="url fn n">' . get_the_author() . '</a></span>'                                                                                                                              );                                                                                                                                                                                                                        // Finally, let's write all of this to the page.                                                                                                                                                                          echo '<span class="posted-on">' . twentyseventeen_time_link() . '</span><span class="byline"> ' . $byline . '</span>';                                                                                            }                                                                                                                                                                                                                 endif;           | 
