脆弱性についての対策・対応について

サムネイル

2025年3月21日に発覚した重大な脆弱性により、皆様には多大なるご迷惑をおかけしておりますことを、心よりお詫び申し上げます。

本記事では、この脆弱性を悪用した攻撃への対策および対応について、改めてまとめております。

対応バージョンへのアップデート

脆弱性対応バージョンへのアップデートを必ずお願いします。

影響を受けるバージョン

  • a-blog cms Ver. 3.1.37 未満のバージョン (Ver.3.1.x系)
  • a-blog cms Ver. 3.0.41 未満のバージョン (Ver.3.0.x系)
  • a-blog cms Ver. 2.11.70 未満のバージョン (Ver.2.11.x系)
  • a-blog cms Ver. 2.10.58 未満のバージョン (Ver.2.10.x系)
  • a-blog cms Ver. 2.9.46 未満のバージョン(Ver. 2.9.x系)
  • a-blog cms Ver. 2.8.80 未満のバージョン(Ver. 2.8.x系)
  • a-blog cms Ver. 2.7.x 以下全てのバージョン

3/25時点の各バージョン最新バージョン

  • Ver. 3.1.41(Ver. 3.1.x系)
  • Ver. 3.0.45(Ver. 3.0.x系)
  • Ver. 2.11.74(Ver. 2.11.x系)
  • Ver. 2.10.62(Ver. 2.10.x系)
  • Ver. 2.9.50(Ver. 2.9.x系)
  • Ver. 2.8.84(Ver. 2.8.x系)

Ver. 2.7系以下であっても脆弱性はあるため、大変お手数ですがVer. 2.8以上へのアップデートをお願いします。

現状確認されている範囲では、Ver. 2.8以上の場合のみ攻撃が成功しているようですが、念の為Ver. 2.7以下であってもバージョンアップをお願いします。

PHPのバージョンアップ

php7.0未満である場合、出来ればphp7.0以上へアップデートすることにより、よりセキュアにすることができます。

php公式でサポートされているバージョンも、php8.1以上になり、php8.0以下はサポートが切れております。

攻撃に利用されたファイルの削除

この対応により、本脆弱性の影響を軽減することができます。 CMSアップデート前提ですが、アップデートするまでの応急処置としてご対応ください。

以下ディレクトリ・ファイルを削除ください。

  • php/vendor/guzzlehttp/guzzle/src/Cookie
  • php/vendor/guzzlehttp/psr7/src/FnStream.php
  • php/vendor/phpseclib/phpseclib/phpseclib/File
  • php/vendor/phpseclib/phpseclib/phpseclib/Math
  • php/vendor/phpseclib/phpseclib/phpseclib/Net
  • php/vendor/phpseclib/phpseclib/phpseclib/System

不審なファイルの削除

すでに攻撃がされて悪意あるファイルが設置されている可能性があります。以下のようなコマンドで、悪意あるファイルが設置されていないか確認してください。 ファイルが設置されていましたら、パーミッションを「000」に設定してください。

CMSアップデート前の場合(コマンドで確認)

cacheを除いて、ここ10日間で作成・更新されたファイルを列挙する

$ cd /path/to/ドキュメントルート
$ find . -type d -name "cache" -prune -o -type f  -mtime -10 -print
$ find . -type d -name "cache" -prune -o -type f  -ctime -10 -print

cacheディレクトリを除いて検索していますので、念の為cacheディレクトリ内は「.htaccess」を残して全て削除ください。

CMSアップデート前の場合(ブラウザで確認)

SSHでサーバーに入るのが難しい場合は、以下内容のphpファイルを設置することで、ブラウザで確認することができます。

scan.php

<?php

// 何日前を対象にするか(変更可能)
$daysAgo = 10;

// 実行する find コマンド
$commands = [
    "find . -type d -name 'cache' -prune -o -type f -mtime -$daysAgo -print",
    "find . -type d -name 'cache' -prune -o -type f -ctime -$daysAgo -print"
];

// 結果を格納する配列
$results = [];

foreach ($commands as $cmd) {
    // コマンドの実行
    $output = shell_exec($cmd);

    if ($output) {
        // 出力を改行ごとに分割
        $results[$cmd] = explode("\n", trim($output));
    } else {
        $results[$cmd] = ["No results found"];
    }
}

// HTML出力
echo "<html><head><meta charset='UTF-8'><title>Find Command Results</title></head><body>";
echo "<h1>{$daysAgo}日前から更新されたファイル</h1>";

foreach ($results as $cmd => $files) {
    echo "<h2>Command: <code>$cmd</code></h2>";
    echo "<ul>";
    foreach ($files as $file) {
        echo "<li>" . htmlspecialchars($file) . "</li>";
    }
    echo "</ul>";
}

echo "</body></html>";

$daysAgo = 10; を調整することで、検索する日数を調整できます。2025年03月20日からの差分を確認ください。

phpファイルを設置したら、以下のようなURLで確認します。

https://example.com/scan.php

調査後は必ず、scan.phpはサーバーから削除ください。

CMSアップデート後の場合(コマンドで確認)

CMSアップデート後は、新しいバージョンで上書きされますので、以下箇所をご確認ください。

$ cd /path/to/ドキュメントルート
$ find . -maxdepth 1 -type f -mtime -10 -print
$ find archives  -type f  -mtime -10 -print
$ find archives_rev  -type f  -mtime -10 -print
$ find media  -type f  -mtime -10 -print
$ find storage  -type f  -mtime -10 -print
$ find cron  -type f  -mtime -10 -print
$ find extension  -type f  -mtime -10 -print
$ find private  -type f  -mtime -10 -print
$ find themes -type d -name "system" -prune -o -type f  -mtime -10 -print

$ find . -maxdepth 1 -type f -ctime -10 -print
$ find archives  -type f  -ctime -10 -print
$ find archives_rev  -type f  -ctime -10 -print
$ find media  -type f  -ctime -10 -print
$ find storage  -type f  -ctime -10 -print
$ find cron  -type f  -ctime -10 -print
$ find extension  -type f  -ctime -10 -print
$ find private  -type f  -ctime -10 -print
$ find themes -type d -name "system" -prune -o -type f  -ctime -10 -print

CMSアップデート後の場合(ブラウザで確認)

SSHでサーバーに入るのが難しい場合は、「scan.php」の内容を変更してファイルを設置することで、ブラウザで確認することができます。

// 実行する find コマンド
$commands = [
    "find . -maxdepth 1 -type f -mtime -$daysAgo -print",
    "find archives  -type f  -mtime -$daysAgo -print",
    "find archives_rev  -type f  -mtime -$daysAgo -print",
    "find media  -type f  -mtime -$daysAgo -print",
    "find storage  -type f  -mtime -$daysAgo -print",
    "find cron  -type f  -mtime -$daysAgo -print",
    "find extension  -type f  -mtime -$daysAgo -print",
    "find private  -type f  -mtime -$daysAgo -print",
    "find themes -type d -name 'system' -prune -o -type f  -mtime -$daysAgo -print",

    "find . -maxdepth 1 -type f -ctime -$daysAgo -print",
    "find archives  -type f  -ctime -$daysAgo -print",
    "find archives_rev  -type f  -ctime -$daysAgo -print",
    "find media  -type f  -ctime -$daysAgo -print",
    "find storage  -type f  -ctime -$daysAgo -print",
    "find cron  -type f  -ctime -$daysAgo -print",
    "find extension  -type f  -ctime -$daysAgo -print",
    "find private  -type f  -ctime -$daysAgo -print",
    "find themes -type d -name 'system' -prune -o -type f  -ctime -$daysAgo -print"
];

調査後は必ず、scan.phpはサーバーから削除ください。

.htaccess で PHP の実行を制限

.htaccessで、index.php以外のphpの実行を制限します。以下コードを.htaccessの上部に設置ください。

<IfModule mod_version.c>
    <IfVersion < 2.4>
        <FilesMatch "\.php$">
            Order Allow,Deny
            Deny from all
        </FilesMatch>
        <Files "index.php">
            Order Allow,Deny
            Allow from all
        </Files>
    </IfVersion>
    <IfVersion >= 2.4>
        <FilesMatch "\.php$">
            Require all denied
        </FilesMatch>
        <Files "index.php">
            Require all granted
        </Files>
    </IfVersion>
</IfModule>

もし独自のphpを動作させたい場合は、以下のように修正ください。

<IfModule mod_version.c>
    <IfVersion < 2.4>
        <FilesMatch "\.php$">
            Order Allow,Deny
            Deny from all
        </FilesMatch>
        <Files "index.php">
            Order Allow,Deny
            Allow from all
        </Files>
        <Files "xxxx.php">
          Order Allow,Deny
          Allow from all
      </Files>
    </IfVersion>
    <IfVersion >= 2.4>
        <FilesMatch "\.php$">
            Require all denied
        </FilesMatch>
        <Files "index.php">
            Require all granted
        </Files>
        <Files "xxxx.php">
          Require all granted
      </Files>
    </IfVersion>
</IfModule>

「xxxx.php」に独自のphpファイル名を指定ください。

.htaccessで攻撃元のIPアドレスを制限

.htaccessで、攻撃元のIPアドレスを制限します。

攻撃元IPアドレスの確認方法

Ver. 3.1 系であれば監査ログで攻撃されたログが確認できます。以下のメッセージのものが攻撃されたアクセスの可能性が高いです。

  • 「takeover」が復元できません
  • POSTデータの「takeover」が復元できません

攻撃ログ

攻撃ログ

監査ログから接続元のIPアドレスを確認し、.htaccessでこのIPアドレスからの接続を拒否するように設定ください。

# 特定のIPアドレスをブロック
Order allow,deny
Deny from xxx.xxx.xxx.xxx
Deny from xxx.xxx.xxx.xxx
Allow from all

最後に

この度はご迷惑をおかけしてしまい大変申し訳ございません。
重大の問題になりますので、お早めにご対応をお願いいたします。

今後もご報告いただいた内容に対して真摯に受け止め修正と改善を行ってまいります。

本件に関するお問い合わせ先

本件についてご不明点などありましたら以下のお問い合わせよりご連絡ください。

有限会社アップルップル
メールアドレス:info@a-blogcms.jp
お問い合わせフォーム:https://www.a-blogcms.jp/contact/

同じタグ付けがされている記事