De kwetsbaarheid BatBadBut, die betrekking heeft op de standaardbibliotheken van verschillende programmeertalen

Toepassingen die scripts in bat- en cmd-formaat uitvoeren op het Windows-platform met behulp van standaardfuncties voor processtarten, zijn vatbaar voor een kwetsbaarheid die het mogelijk maakt om eigen code uit te voeren wanneer speciale tekens niet apart worden geescaped bij het doorgeven van argumenten tijdens de opstart. De kwetsbaarheid heeft de codenaam BatBadBut gekregen en manifesteert zich in applicaties die gebruikmaken van standaardbibliotheken van programmeertalen zoals Rust, PHP, Node.js, Python, Ruby, Go, Erlang en Haskell.

Het probleem wordt gemarkeerd als een kwetsbaarheid omdat het functies van de bibliotheek raakt, zoals Command::arg en Command::args in Rust, die zijn ontworpen voor het direct doorgeven van argumenten aan een proces, zonder deze door de opdrachtinterpretator te laten verwerken. Het wordt verondersteld dat de ontwikkelaar van de applicatie de argumenten mogelijk niet controleert, aangezien deze rechtstreeks naar het opstartproces worden doorgegeven. Terwijl argumenten in Unix-systemen afzonderlijk aan het proces worden doorgegeven in een array, worden in Windows, bij het gebruik van de API CreateProcess, de argumenten als één enkele tekenreeks gepresenteerd, waarvan de parsing op de schouders van het opstartproces ligt.

Bij het starten van bat- en cmd-scripts op het Windows-platform roept de functie CreateProcess() impliciet het uitvoerbare bestand cmd.exe aan, zelfs als de applicatie dit niet vermeldt bij de oproep. Het programma cmd.exe bevat zijn eigen complexe logica voor het splitsen van argumenten om eigen argumenten, het opgestarte script en de argumenten van dat script te scheiden. Ter bescherming tegen argumentsubstitutie op het Windows-platform worden in standaardbibliotheken van programmeertalen aparte escape-handlers gebruikt, die blijken te omzeilen via manipulatie van dubbele aanhalingstekens.

Bijvoorbeeld, in een programma dat het script ‘.\/test.bat’ aanroept met een argument op basis van gegevens van de gebruiker, kan een aanvaller de waarde ‘»&calc.exe’ doorgeven, welke bij het starten van het script zal worden uitgepakt in de tekenreeks ‘C:\Windows\System32\cmd.exe \/c .\test.bat «»&calc.exe’ en zal leiden tot de start van het proces calc.exe. Deze methode werkt ook bij impliciete scriptuitvoering, waarbij het uitvoerbare bestand met de naam ‘test’ wordt gestart zonder dat een extensie wordt opgegeven, en er in een van de mappen die in de omgevingsvariabele PATH zijn genoemd, een bestand ‘test.bat’ aanwezig is.

Momenteel is er een patch vrijgegeven (CVE-2024-24576) voor de standaardbibliotheek van de programmeertaal Rust, en dit is opgenomen in de update Rust 1.77.2. Updates voor Node.js en PHP zijn in voorbereiding om de kwetsbaarheid te verhelpen (de versies 8.2.18 en 8.3.5 zijn al gemarkeerd, maar de releases zijn nog niet aangekondigd). Projecten zoals Python, Ruby, Go, Erlang en Haskell hebben voorlopig alleen een waarschuwing in de documentatie opgenomen over de kwetsbaarheid bij gebrekkige ontsnapping van speciale tekens.

In Rust 1.77.2 is er een extra controle toegevoegd aan de standaardbibliotheek die een fout retourneert wanneer in de argumenten van het uit te voeren script speciale tekens aanwezig zijn die niet veilig kunnen worden ontsnapt. Voor ontwikkelaars die zelf ontsnappingslogica implementeren, is er een methode CommandExt::raw_arg beschikbaar, die het ontsnappen aan bibliotheekaanroepen volledig uitschakelt.

Het toevoegen van bescherming wordt bemoeilijkt door het feit dat eenvoudige ontsnapping van dubbele aanhalingstekens niet voldoende is, aangezien de opdracht interpreter ook variabelen zoals "%PATH%" verwerkt en onthult. Een aanhalingsteken kan bijvoorbeeld worden ingevoegd door te manipuleren met de omgevingsvariabele "%CMDCMDLINE%", door in plaats van '"&calc.exe' - '%CMDCMDLINE:~-1%&calc.exe' op te geven.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster