Check Copy Contents(CCC) の脆弱性

WordPress

Check Copy Contents(CCC)はブログをコピーされたときに通知を行うことのできるプラグインです。

このプラグインには最新のバージョン(v1.4.1)にCSRFの脆弱性があるため使用には注意が必要です。

想定される攻撃

脆弱性を利用することでCCCの設定はすべて変更することが可能です。

したがって通知先のメールアドレスを適当な企業などに、通知メールの件名を脅迫めいたものにそれぞれ変更され、なりすましの犯罪予告に利用される可能性があります。

フロント側はCSRF対策がされていますが、コピーされた文章だけではなくURLやIP、リファラなどの情報もAjaxで送られたものをそのまま使用する仕様になっているため、これらも容易に書き換えることが可能であり、そのリスクはさらに高くなります。

見てわかる通り、メールの内容のほとんどの箇所を偽装することが可能です。
定型文が入りますが、書き換えられた文章の量を増やしたり文章を工夫することでごまかすことは可能です。

また送信元は変わらずブログに設定されたメールアドレスのままです。

対策

このプラグインを使い続けることを希望する場合は少なくとも2か所プログラムを書き換える必要があります。

views/admin.php 22行目 を修正

if (isset($_POST['mail'], $_POST['subject'], $_POST['reply'], $_POST['letters'])){

以下のように修正します。

if (isset($_POST['ccc_nonce']) && wp_verify_nonce($_POST['ccc_nonce'], 'ccc_nonce') && isset($_POST['mail'], $_POST['subject'], $_POST['reply'], $_POST['letters'])){

views/admin.php 103行目 の後ろに追記

<form action="" method="post">
<table class="type01">

の箇所にnonce生成のコードを追加します。

<form action="" method="post">
<?php wp_nonce_field('ccc_nonce', 'ccc_nonce');?>
<table class="type01">

補足

送信元の情報としてAjaxでPOSTされた値を使用していることも問題です。

IP情報に関しては以下の修正で改善されます。

check-copy-contents.php 169行目 を修正

$remote_addr = $_POST['remote_addr'];

以下のように修正します。

$remote_addr = $_SERVER["REMOTE_ADDR"];

 

この脆弱性は自作のCSRF検出プラグインによって発見されました。

CSRF検出プラグインを作成しました
GitHub機能SQLの実行 及び nonceのチェック を監視します。nonceのチェック が行われる前に create insert update delete などの SQLコマンドが実行 されたときに...

コメント

タイトルとURLをコピーしました