【重要】画像アップロード機能の深刻な脆弱性への対応について


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

a-blog cms の画像アップロード機能に脆弱性が発見されました。該当の状況に当てはまる場合は大変お手数ですが、以下のご対応をお願いいたします。

画像アップロード機能の拡張子検証の不備

内容

サイトへ改ざんしたリクエストを送信することにより、画像以外の拡張子のファイルがサーバー上に保存される可能性があります。

本脆弱性により想定される影響

  • 保存されたファイルの種類やサーバーの構成・設定によっては、サーバー上で意図しない処理が実行されるおそれがあります。

  • 設定ファイルに記載されたデータベース接続情報や外部サービスの連携情報など、重要情報が漏えいするおそれがあります。

  • Webサイトが改ざんされ、正常に表示できなくなるおそれがあります。

  • サーバーの構成や設定によっては、上記を足がかりにより深刻な不正操作へ発展するおそれがあります。

攻撃条件

  • ログイン不要で、サイトへ改ざんリクエストを送れる

  • 画像アップロード機能を使ったフォームがない場合も対象

  • 影響を受けるバージョンを利用している

影響を受けるバージョン

  • a-blog cms Ver. 3.2.40 未満のバージョン(Ver. 3.2.x系)

  • a-blog cms Ver. 3.1.81 未満のバージョン(Ver. 3.1.x系)

  • a-blog cms Ver. 3.0.70 未満のバージョン(Ver. 3.0.x系)

  • a-blog cms Ver. 2.11.x 以下全てのバージョン

ワークアラウンド(応急処置)

アップデートが完了するまでの間は、archives ディレクトリ配下のファイルがスクリプトとして実行されたり、外部から参照されたりしないよう、Webサーバー側で設定してください。

Apache の場合(.htaccess)

archives ディレクトリ直下に .htaccess を設置し、次の内容を記述します(すでに .htaccess がある場合は追記してください)。ファイル名の途中に実行可能な拡張子が含まれるもの(例:拡張子が二重になっているファイル)も対象になります。

Apache 2.4 以降の場合:

<FilesMatch "(?i)\.(php[0-9]?|phtml|pht|phps|phar|cgi|pl|py|sh|shtml)(\.|$)">
    Require all denied
</FilesMatch>

Apache 2.2 の場合:

<FilesMatch "(?i)\.(php[0-9]?|phtml|pht|phps|phar|cgi|pl|py|sh|shtml)(\.|$)">
    Order allow,deny
    Deny from all
</FilesMatch>

あわせて、.htaccess が有効でない(AllowOverride が許可されていない)サーバーでは、サーバー会社へご相談ください。

Nginx の場合

サーバー設定(server ブロック)で、archives 配下の該当ファイルへのアクセスを拒否します。この設定は、PHP を処理する location よりも前に評価されるよう記述してください。設定を変更したら、Nginx を再読み込みします。

location ~* ^/(?:.*/)?archives/.*\.(php[0-9]?|phtml|pht|phps|phar|cgi|pl|py|sh|shtml)(\.|$) {
    deny all;
}

設定後の確認

設定後は、archives ディレクトリに拡張子が .php の無害なテキストファイルを一時的に置き、ブラウザでアクセスして、内容が表示されず「403 Forbidden」などになることをご確認ください。確認後は、置いたファイルを必ず削除してください。

なお、本設定は応急処置です。画像以外のファイルが保存されること自体は防げませんので、お早めにバージョンアップをお願いいたします。

CMSバージョンアップによる対応

以下のフィックスバージョンをリリースいたします。「影響を受けるバージョン」をご利用の場合は、お使いの系列のフィックスバージョン以降へアップデートを行なってください。

  • a-blog cms Ver. 3.2.40 以降(Ver. 3.2.x系)

  • a-blog cms Ver. 3.1.81 以降(Ver. 3.1.x系)

  • a-blog cms Ver. 3.0.70 以降(Ver. 3.0.x系)

フィックスバージョンでは、ログインしていない人による画像のアップロードを、既定で禁止するようにしました。会員登録フォームなどで、ログインしていない人に画像をアップロードさせる機能を使っているサイトは、アップデート後に、private/config.system.yaml へ image_upload_prohibit_anonymous: off を追記して、禁止を解除してください。

上記以外の系列については、メンテナンスポリシーによりセキュリティ修正のご提供期間を終了しているため、フィックスバージョンのご提供はございません。大変お手数ですが Ver. 3.0.x 系以上へのアップグレードをご検討ください。


不審なファイルの削除

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

攻撃が確認されたのは、2026年11月11日以降になりますので、この期間が入るように検索ください。

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

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

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

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

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

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

scan.php

<?php

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

// 実行する 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 = 5; を調整することで、検索する日数を調整できます。2026年11月11日からの差分を確認ください。

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

https://example.com/scan.php

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

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

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

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

$ find . -maxdepth 1 -type f -ctime -5 -print
$ find archives  -type f  -ctime -5 -print
$ find archives_rev  -type f  -ctime -5 -print
$ find media  -type f  -ctime -5 -print
$ find storage  -type f  -ctime -5 -print
$ find cron  -type f  -ctime -5 -print
$ find extension  -type f  -ctime -5 -print
$ find private  -type f  -ctime -5 -print
$ find themes -type d -name "system" -prune -o -type f  -ctime -5 -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はサーバーから削除ください。


最後に

この度はご迷惑をおかけしてしまい大変申し訳ございません。お早めにバージョンアップのご検討をお願いいたします。

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

すでに影響を受けた可能性がある場合

archives ディレクトリ配下に、画像以外の拡張子のファイルが保存されていないかご確認ください。心当たりのないファイルがある場合や、悪用のおそれがある場合は、サーバーのアクセスログ等で痕跡をご確認のうえ、アップデートに加えて、データベース接続情報・各種APIキー・暗号化キー等の再発行(変更)をご検討ください。また、個人情報漏えいのおそれがある場合は、関係各所へのご報告もご検討ください。

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

本件についてご不明点などありましたら、お問い合わせフォームよりご連絡ください。

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