Code-injectie is een kritieke kwetsbaarheid die een derde partij in staat stelt code uit te voeren op de serversoftware. Expression language injection is een soort uitvoering van code op afstand die gevoelige data van de server openbaar maakt. De externe code voert variabelen, wachtwoorden, functies of code uit en geeft deze weer. In het ergste geval kan het een aanvaller de afstandsbediening van de server geven.
Wat is Expression Language Injection?
Expression language injection is een kwetsbaarheid die JavaServer Pages (JSP), Active Server Pages (ASP) en andere expressietalen die op een webserver worden gehost, treft. Deze talen zijn geïnterpreteerde talen, dus elke code die naar de server wordt verzonden, wordt tijdens de runtime van de applicatie gecompileerd, in tegenstelling tot standaard gecompileerde talen met binaire uitvoerbare bestanden. In een geïnterpreteerde taal wordt de code op de server verzameld wanneer een gebruiker een verzoek om een pagina indient.
Wanneer een expressietaaltoepassing (EL) kwetsbaar is voor expressietaalinjectie, stuurt een aanvaller de gemaakte code naar de toepassing als invoer, hetzij in de querystring of in een formulierobject. De code wordt verzameld tijdens runtime, en de code kan dan variabelen, wachtwoorden en andere gevoelige informatie weergeven. EL-kwetsbaarheden komen vaak voor in verouderde versies van geïnterpreteerde talen, dus Legacy-applicaties moeten worden getest op penetratie voordat ze in productie worden genomen. Na een kritieke gebeurtenis hebben organisaties noodherstelplannen nodig om de openbaarmaking en exploits van data te verhelpen.
Hoe Expression Language Injection werkt
Elke applicatie die een geïnterpreteerde taal gebruikt, moet code en speciale tekens uit de invoer halen. Zonder de input te schrobben, accepteert de applicatie code en voert deze uit op de server. De meeste kwetsbaarheden voor EL-injecties hebben betrekking op JSP, dus we gebruiken JSP-code in het volgende voorbeeld. Het onderstaande fragment is een voorbeeld van een enkele regel code die kwetsbaar is voor EL-injectie:
<spring:message code="${param['message']}" text=""/>
In dit voorbeeld neemt het codeattribuut een parameter die een string bevat. Als een aanvaller code in de parameter injecteert, wordt deze op de server verzameld en uitgevoerd. Gebruikers zien deze code niet op hun lokale webpagina, dus aanvallers gebruiken veelgebruikte scripts om kwetsbaarheden van EL-injecties te vinden.
Veelvoorkomende kwetsbaarheden die leiden tot expressietaalinjectie
Net als bij elke injectiekwetsbaarheid komt de EL-injectiekwetsbaarheid voort uit het niet valideren van de input op de serverapplicatie. Met hetzelfde voorbeeld als hierboven kan de berichtstring een onschuldige reeks tekens zijn, maar het kan ook een code zijn. In plaats van een onschuldige string te verzenden, moet u aannemen dat de gebruiker het volgende heeft verzonden:
${"aaaa".toString().concat(T(java.lang.Runtime).getRuntime().exec('ls -l'))}
De bovenstaande invoer probeert de systeemopdracht "ls -l" op de server uit te voeren. Deze opdracht geeft een overzicht van de bestanden en mappen in de huidige map. Met een lijst met bestanden kan een aanvaller vervolgens proberen een andere opdracht te sturen om de inhoud van een bestand te openen en weer te geven in hun venster. Een bestand kan gevoelige data bevatten, zoals wachtwoorden. Van daaruit kan de aanvaller mogelijk toegang krijgen tot de server en aanvullende kwaadaardige acties uitvoeren.
Expressietaalinjectie detecteren
Penetratietests - zowel white box als black box - zullen kwetsbaarheden van EL-injecties detecteren. White box-tests zijn een methode waarbij beveiligingsprofessionals de code controleren op kwetsbaarheden. Bedrijven leveren de code aan beveiligingsbeoordelaars en beoordelaars identificeren alle codekwetsbaarheden in een rapport. Het is een gemeenschappelijke proactieve benadering van dataprotectie.
Black box-penetratietests maken gebruik van dezelfde vorm van scans en kwetsbaarheidsdetectie als een aanvaller. Beveiligingsprofessionals vallen de applicatie aan zonder de code te kennen, zodat elke validatie of verdediging kan worden getest. Grijze boxtesten zijn een mix van black box- en white box-testen en zijn vaak een gekozen methode voor het testen van penetratie van webapplicaties.
Expressietaalinjectie voorkomen
De beste manier om EL-injectieaanvallen te detecteren is door code te valideren en invoer met specifieke tekens te verwijderen. Invoer voor een naamveld mag bijvoorbeeld geen "<” or “>"-tekens bevatten. Ontwikkelaars moeten bibliotheken gebruiken die zijn gebouwd om deze tekens te detecteren en te verwijderen of de invoer te laten vallen en een fout aan de gebruiker weer te geven.
Andere tekens kunnen ook kwaadaardig zijn. Op een JSP-pagina beginnen codefragmenten met de "<%” characters and end with the “%>"-tekens. Deze tekens samen moeten uit de invoer worden verwijderd. Aanvallers voeren talrijke combinaties van kwaadaardige code uit om de detectie te omzeilen, dus de beste manier om deze te detecteren is door een bibliotheek te gebruiken die is gebouwd voor invoervalidatie. SIEM-applicaties kunnen ook exploits detecteren en analyses leveren als uw applicatie een doelwit is.
Conclusie
Kwetsbaarheden in EL-injecties moeten worden behandeld als kritieke beveiligingsproblemen. Laat uw taalapplicaties altijd testen op kwetsbaarheden bij injecties en andere die gevoelige data kunnen onthullen. Ontwikkelaars moeten validatietools gebruiken om EL-injectie te detecteren en te stoppen, en Legacy-applicaties die JSP en ASP gebruiken, moeten nauwlettend worden gecontroleerd op aanvallen.
Pure Storage heeft de beveiligingsinfrastructuur en bedreigingsmonitoring om uw applicaties te beschermen tegen beveiligingsaanvallen.