
Outil d'audit des trois vulnérabilités RAGFlow (CVE-2026-28797 / CVE-2026-24770 / CVE-2025-69286)
Outil d'audit RAGFlow de trois vulnérabilités (CVE-2026-28797 / CVE-2026-24770 / CVE-2025-69286)
Uniquement la bibliothèque standard Python, aucune dépendance tierce, fonctionne directement avec Python 3.8+.
python3 ragflow-audit.py [-h] {ssti,zipslip,apikey} ...
python3 ragflow-audit.py ssti --url http://TARGET:9380 --auth "AUTH_HEADER" [--component StringTransform|Message] [--newline]
--url : adresse Web de RAGFlow--auth : valeur complète de l'en-tête Authorization de la réponse de connexion--component : composant cible, par défaut StringTransform--newline : utiliser un saut de ligne pour contourner le payload (contourne la détection regex _is_jinjia2)Procédure : construction d'un canvas DSL malveillant -> POST /v1/canvas/set pour créer le canvas -> POST /v1/canvas/completion pour déclencher l'exécution -> vérification de la présence de uid= dans la sortie pour déterminer si la RCE a réussi.
python3 ragflow-audit.py zipslip --zip evil.zip [--extract-dir /tmp/out]
Vérification hors ligne des entrées zip, signalement de trois types de dangers : traversée de chemin (..), chemins absolus, liens symboliques.
python3 ragflow-audit.py apikey --beta "分享链接token" --node "攻击者user_id后12位"
À partir du token bêta d'un lien de partage public, récupère le sujet uuid1, énumère time_low et produit des jetons candidats. Lors d'une exploitation réelle, on appelle une à une les API nécessitant une authentification avec chaque jeton candidat (200 = succès / 401 = continuer).
Les identifiants de connexion de RAGFlow se trouvent dans l'en-tête Authorization de la réponse de connexion, pas dans le access_token du corps. Le access_token du corps n'est qu'un UUID ; appeler l'API renvoie 401.
curl -i -X POST http://TARGET:9380/v1/user/login \
-H 'Content-Type: application/json' \
-d '{"email":"[email protected]","password":"<RSA加密后的密码>"}'
Prenez la valeur de l'en-tête de réponse authorization: comme paramètre --auth.
Remarque : le mot de passe d'inscription/connexion doit d'abord être chiffré RSA (la clé publique se trouve dans /ragflow/conf/public.pem, PKCS1_v1_5, l'objet du chiffrement est le texte clair encodé en base64). Envoyer le mot de passe en clair provoque une erreur.
| CVE | Type | Versions affectées | Version corrigée |
|---|---|---|---|
| CVE-2026-28797 | SSTI (composants StringTransform/Message) | < 0.25.0 (NVD : 0.24.0 et versions antérieures) | 0.25.0 (correctif sandbox, fusionné le 2026-03-02) |
| CVE-2026-24770 | Zip Slip du parseur MinerU | < 0.23.1 | 0.23.1 |
| CVE-2025-69286 | Clé API déductible (uuid1 + clé tenant_id) | < 0.22.0 | 0.22.0 |
Cet outil est exclusivement destiné aux tests de sécurité autorisés et à la recherche de vulnérabilités. L'utilisation de cet outil sur des systèmes tiers sans autorisation engage la seule responsabilité de l'utilisateur.