CVE-2026-93352: Kritisk fejl i Laravel-Mediable filupload
Ufuldstændig sikkerhedsopdatering i Laravel-Mediable lader angribere uploade .pht-filer og køre kode på serveren. Opdatér til 7.0.2.
Hvad er det?
CVE-2026-93352 er en sårbarhed i Laravel-Mediable, et udbredt PHP-bibliotek til håndtering af filuploads i Laravel-applikationer. Sårbarheden er en ufuldstændig rettelse af en tidligere fejl, CVE-2026-49972. Dengang blev filtypen .phpt tilføjet til listen over forbudte filendelser, men filtypen .pht blev glemt. På Debian- og Ubuntu-servere med standardopsætning af Apache bliver .pht-filer kørt som PHP-kode. En angriber kan derfor uploade en fil med endelsen .pht, som slipper igennem alle kontroller i biblioteket, og få den udført som programkode på serveren.
Hvem rammer det?
Sårbarheden rammer alle virksomheder, der bruger Laravel-Mediable version 7.0.0 eller 7.0.1 til at håndtere filuploads, for eksempel billeder, dokumenter eller vedhæftninger på en hjemmeside eller i en kundeportal. Risikoen er størst for servere, der kører Debian eller Ubuntu med Apache i standardkonfiguration, da det er her .pht-filer automatisk bliver kørt som PHP-kode.
Hvad kan ske?
En angriber uploader en fil med endelsen .pht, forklædt som for eksempel et billede, gennem en almindelig uploadfunktion på hjemmesiden. Filen bliver gemt på serveren og kan derefter tilgås direkte, hvorved serveren kører den som PHP-kode. Angriberen får dermed adgang til at køre vilkårlige kommandoer med samme rettigheder som webserveren, hvilket typisk betyder adgang til databaser, kundedata og mulighed for at placere yderligere skadelig kode.
Hvor alvorligt er det?
CVSS-score er 9,8 ud af 10, kritisk. Angrebet kræver ikke login og ingen handling fra en bruger, det kan udføres af hvem som helst over internettet mod en sårbar uploadfunktion. Konsekvensen er fuld kompromittering af fortrolighed, integritet og tilgængelighed på den ramte server. Der er ikke oplyst om aktiv udnyttelse på offentliggørelsesdatoen, men sårbarheden er let at udnytte, og detaljerne er offentligt tilgængelige.
Hvad gør jeg nu?
Sårbarheden lukkes med en opdatering af biblioteket. Følg trinene nedenfor:
- Opdatér Laravel-Mediable til version 7.0.2 eller nyere, hvor .pht er tilføjet til den forbudte liste.
- Kan opdateringen ikke ske straks, så tilføj manuelt .pht til forbidden_extensions i config/mediable.php som en midlertidig løsning.
- Gennemgå eksisterende uploadmapper for filer med endelsen .pht eller andre uventede PHP-lignende filtyper, og fjern dem.
- Overvej at fjerne eller begrænse Apache’s FilesMatch-regel, så .pht-filer ikke kan køres som PHP, uafhængigt af applikationen.
- Gennemgå logfiler for uploads og adgang til uploadmapper i perioden op til opdateringen for tegn på misbrug.
- Kontakt en sikkerhedsrådgiver, hvis I ikke selv kan verificere, om jeres opsætning er sårbar, eller hvis I finder tegn på kompromittering.
Opdatér inden for 24 timer
Vi anbefaler, at I opdaterer Laravel-Mediable til version 7.0.2 så hurtigt som muligt, da sårbarheden kan udnyttes uden login og uden brugerinteraktion. Det er kun forsvarligt at vente, hvis jeres applikation slet ikke bruger Mediable til filupload, eller hvis serveren ikke kører Apache på Debian eller Ubuntu. I alle andre tilfælde bør opdateringen prioriteres samme dag, den bliver kendt.
Tidslinje
Konkrete eksempler
Kundeportal med filupload hos en dansk håndværksvirksomhed
En mindre håndværksvirksomhed lader kunder uploade billeder af skadesager gennem en kundeportal bygget i Laravel med Mediable-biblioteket. En angriber uploader en fil kaldet skade.pht, som ser ud som et billede, men indeholder PHP-kode. Serveren, der kører Ubuntu og Apache, udfører filen som programkode, og angriberen får adgang til databasen med kundedata og virksomhedens interne systemer.
Ofte stillede spørgsmål
Hvordan finder vi ud af, om vi bruger den sårbare version?
Kør composer show laravel-mediable/laravel-mediable i jeres Laravel-projekt, eller undersøg composer.lock filen for versionsnummeret. Er versionen 7.0.0 eller 7.0.1, er I sårbare.
Er vi ramt, hvis vi ikke bruger Apache?
Sårbarheden opstår, fordi Apache i standardopsætning kører .pht-filer som PHP. Bruger I Nginx eller en anden webserver uden lignende regel, er den konkrete udnyttelsesmetode ikke aktuel, men vi anbefaler stadig at opdatere biblioteket og tilføje filendelsen til blokeringslisten som en generel forholdsregel.
Kan vi vente til den næste planlagte opdateringsrunde?
Nej. Sårbarheden kræver ikke login og kan udnyttes automatisk af scanninger på internettet. Vi anbefaler at rette den samme dag, den bliver kendt, hvis jeres uploadfunktion er offentligt tilgængelig.
Hvordan tjekker vi, om vi allerede er blevet udnyttet?
Gennemgå jeres uploadmapper for filer med endelsen .pht eller filer, der ikke matcher det forventede indhold, for eksempel et billede uden gyldig billeddata. Tjek også webserverens adgangslog for anmodninger mod uploadmapper efterfulgt af usædvanlig serveraktivitet.
Skal vi anmelde dette som et sikkerhedsbrud?
Hvis I finder konkrete tegn på, at en angriber har uploadet og kørt en fil, skal I vurdere anmeldelsespligten efter databeskyttelsesreglerne, hvis persondata er involveret. Er der ingen tegn på misbrug, og I opdaterer biblioteket i tide, er der ikke grundlag for en anmeldelse.
Er en midlertidig løsning uden opdatering nok?
At tilføje .pht manuelt til blokeringslisten lukker det konkrete hul, men vi anbefaler stadig at opdatere til 7.0.2, da det sikrer, at fremtidige rettelser i biblioteket automatisk følger med.
CVSS-detaljer
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWE-svaghedstyper
Original NVD-beskrivelse (engelsk)
Laravel-Mediable 7.0.0 before 7.0.2 contains an incomplete patch for CVE-2026-49972 in which the .pht extension is absent from the forbidden_extensions blocklist in config/mediable.php. The blocklist introduced to address CVE-2026-49972 includes phpt but omits pht, which Apache executes as PHP via the default FilesMatch directive on Debian and Ubuntu systems. An attacker can upload a .pht file that passes all validation in MediaUploader::verifyExtension() and File::sanitizeFileName() because pht is not present in the blocklist, causing the file to be written to disk and executed as PHP when requested, enabling remote code execution with the privileges of the web server process.
Referencer & kilder
Eksterne kilder
Brug for hjælp med jeres sikkerhed?
Vi hjælper SMV’er med at omsætte trusler som denne til konkrete handlingsplaner.