Înapoi la Noutăți
Amenințări

Trebuia să asculte doar pe localhost

Vite ascultă implicit pe 127.0.0.1. Fiecare server recoltat acum e expus pentru că cineva a adăugat --host ca să testeze pe telefon și nu l-a mai scos.

Trebuia să asculte doar pe localhost

Senzorii de tip honeypot ai F5 au înregistrat 1.732 de evenimente de citire de fișiere legate de Vite, pe parcursul a trei luni. Numai în august au înregistrat aproximativ 32.000, în 807 atacuri distincte.

Așa arată, în cifre, momentul în care o vulnerabilitate de framework intră în lanțul automat de scanare.

Ce face vulnerabilitatea

CVE-2026-39364 e o citire de fișiere fără autentificare și o ocolire a listei de acces din serverul de dezvoltare Vite, publicată în aprilie.

Adăugarea anumitor parametri de interogare la o cerere GET obișnuită — ?raw, ?import&raw, ?import&url&inline — face ca serverul să sară peste filtrarea server.fs.deny pe care ar trebui s-o aplice. În loc de 403, fișierul se întoarce în clar, cu un răspuns HTTP 200.

Afectate Vite 7.x pana la 7.3.1 si 8.0.0 - 8.0.4 Corectate 7.3.2 si 8.0.5

Relatările diferă ușor în privința versiunii 7.3.2, așa că actualizează la versiunea curentă, nu la un minim anume.

Campania înlănțuie și ocoliri mai vechi de control al accesului în Vite — CVE-2025-30208, CVE-2025-31125 (în catalogul CISA KEV din ianuarie) și CVE-2024-45811 — iar o parte din aceeași infrastructură sondează CVE-2025-29927, o ocolire de middleware în Next.js. Nu e o campanie împotriva Vite. E o campanie împotriva serverelor de dezvoltare, cu o bibliotecă de exploatare pentru mai multe framework-uri.

Expunerea e subiectul, nu eroarea

Vite ascultă implicit pe 127.0.0.1. E o unealtă locală de build. Nu are autentificare, pentru că nu a fost niciodată gândită să fie accesibilă altcuiva decât dezvoltatorului care o rulează.

Fiecare instanță recoltată acum e în internet dintr-unul din trei motive, toate banale:

  • Cineva a pasat --host ca să testeze site-ul pe telefon.
  • Cineva a setat server.host în configurație și a fost comis în repository.
  • O mapare de porturi Docker a publicat 5173 către gazdă, iar gazda e publică.

Niciuna nu e o greșeală în sensul de neglijență. Sunt decizii de cinci secunde, luate ca să rezolve o problemă reală, care apoi supraviețuiesc problemei cu luni de zile.

Vulnerabilitatea nu a creat expunerea. A făcut ca o situație deja greșită să devină recoltabilă la scară.

Ce iau, de fapt

Lista de cuvinte observată de F5 e cea mai clară declarație de intenție disponibilă. Atacatorii nu sunt interesați de codul sursă.

Mediu .env, .env.local, .env.production, .env.staging AWS fisiere de credentiale din directoarele home obisnuite, fisiere de configurare, cache-uri SSO, chei de rezerva, rootkey.csv, aws-exports.js, configuratie Amplify Azure credentiale si token-uri de acces IaC stare si variabile Terraform, configuratie si stare serverless Proces /proc/self/environ, /proc/1/environ, /proc/self/cwd/.env Sistem /etc/passwd

Starea Terraform merită o notă separată. Conține frecvent secrete în clar și descrie, totodată, infrastructura — deci e simultan un fișier de credențiale și o hartă a ce deschid acele credențiale.

Cererile combinau endpointul @fs cu ocoliri prin șirul de interogare, traversare de cale și separatori dublu codificați, inclusiv căi cu %2f codificat în adâncime. Dubla codificare e acolo ca să treacă de proxy-uri inverse și de firewall-uri de aplicație care normalizează căile altfel decât backendul.

De unde vine și de ce contează

Statele Unite au produs 17.297 de evenimente, apoi Belgia cu 4.407, Olanda cu 4.011, Singapore cu 2.842, Taiwan cu 1.994 și Japonia cu 1.353.

Sursele sunt găzduiri de cloud, concentrate în intervalele 34.x și 35.x ale Google Cloud. Cele mai active adrese individuale au fost 34.14.15.105, 34.16.200.129 și 34.11.196.206.

E o alegere deliberată. Traficul din spațiul de adrese al unui mare furnizor de cloud nu declanșează filtrarea după reputația IP-ului, pentru că blocarea acelor intervale în bloc ar rupe prea mult trafic legitim.

E a treia oară în două săptămâni când scriem despre aceeași idee, din alt unghi — o platformă de phishing cu proxy-uri rezidențiale potrivite cu țara victimei, politici de Conditional Access bazate pe geografie, iar acum asta. IP-ul sursă nu e un semnal de identitate și nu mai e de ceva vreme.

Ce faci azi

  1. Scanează-ți propriile intervale externe pentru portul 5173. Și 5174, 3000, 8080. Durează câteva minute, iar rezultatul e binar. Dacă răspunde ceva, l-ai găsit înaintea scanerelor, ceea ce e tot scopul.
  2. Caută în fișierele Docker și compose porturi de dezvoltare publicate. 5173:5173 într-un fișier care ajunge pe o gazdă publică e cea mai frecventă cale spre problema asta.
  3. Actualizează Vite la versiunea curentă în toate proiectele, inclusiv în repository-urile pe care nu le-a mai atins nimeni de la finalul ultimului contract.
  4. Blochează cererile /@fs/ la margine și nu te baza pe șirurile User-Agent ale crawlerelor ca semnal de filtrare — scanerele le setează.
  5. Dacă un server Vite nepatchuit a fost accesibil din exterior în august, rotește. Variabilele .env locale, credențialele AWS, token-urile de acces Azure, secretele din starea Terraform. Recomandarea F5 e explicită aici, iar patchuirea ulterioară nu face nimic unei chei deja citite.
  6. Dacă trebuie să dai acces la un server de dezvoltare, folosește un tunel cu autentificare, nu --host. Uneltele pentru asta sunt mature și se configurează cam în același timp.

Pentru cine conduce dezvoltatori, nu scrie cod

Două întrebări merită puse, și niciuna nu cere cunoștințe tehnice ca s-o evaluezi:

Dezvoltatorii noștri au pe mașinile locale credențiale de cloud care ajung în producție? Foarte des răspunsul e da, moștenite dintr-un pas de configurare de acum câțiva ani, cu drepturi mult mai largi decât cere munca.

Există ceva care ne-ar spune dacă un serviciu de dezvoltare a devenit accesibil public? Pentru majoritatea organizațiilor, nu. Monitorizarea suprafeței externe de atac acoperă exact asta, iar valoarea ei aici nu stă în sofisticare — stă în a observa un port care s-a deschis marțea trecută.

E a doua poveste din săptămâna asta în care credențialele pentru producție stăteau pe infrastructura de dezvoltare. Traversarea de cale din GitLab, despre care am scris mai devreme, avea aceeași formă. Tiparul merită spus pe șleau: mediile de dezvoltare dețin cheile de producție și sunt guvernate ca medii de dezvoltare.


4Tify monitorizează suprafața externă de atac, inclusiv serviciile de dezvoltare care devin accesibile din greșeală și rămân așa. Dacă vrei să știi ce răspunde pe intervalele tale, scrie-ne.

DISTRIBUIE
4Tify — Vite CVE-2026-39364: servere de dezvoltare care pierd chei de cloud