Jira ICT wint MKB Beste Choice Award - Magento Workshops 2010
Feb
24

Beveiligingsfouten in Magento 1.2

In de nieuwste Magento-versies (versie 1.2) blijken verschillende beveiligingsfouten te zitten, waarbij de waarden zoals ingevuld door een gebruiker in verschillende formulieren onvoldoende worden gecontroleerd. De fouten hebben in principe geen direct effect op de Magento website zelf, maar opent wel mogelijkheden om vanuit Magento aanvallen op andere websites (of andere onderdelen van Magento) uit te voeren.

Het is bijvoorbeeld mogelijk om in het loginformulier van de Magento Admin omgeving een stukje JavaScript-code in te vullen, waarbij dit JavaScript na het versturen van het formulier wordt uitgevoerd. De JavaScript-code kan vervolgens zodanig in elkaar worden gezet dat er een complete aanval mee kan worden uitgevoerd. Een dergelijke aanval wordt ook wel een Cross Site Scripting aanval genaamd - afgekort XSS.

Aanval vanuit het loginformulier

In het loginformulier wordt er gevraagd om een gebruikersnaam en een wachtwoord. Deze waarden kunnen vooraf worden ingevuld door gebruik te maken van de variabelen login[username] en login[password] welke in een URL meegegeven kunnen worden:

http://MAGENTO/index.php/admin/?login[username]=admin

Een hacker kan deze weblink manipuleren door de login[username] te vervangen met een stukje JavaScript. Zodra een gebruiker vervolgens verleid kan worden om op de weblink te klikken, zal de gebruiker de JavaScript-aanval beginnen terwijl de hacker zelf veilig buiten schot blijft.

Problemen doen zich niet alleen voor in het loginformulier, maar ook op het formulier voor vergeten wachtwoorden en de Magento Connect Manager. De laatste geeft ook nog eens rare resultaten omdat de gemanipuleerde variabele "return" direct in de gebruikerssessie wordt opgeslagen. Een JavaScript-aanval zal dus bij iedere verversing van de browser herhaald worden, totdat de browser opnieuw wordt opgestart.

Een betere controle is nodig

De oplossing voor deze problemen kan als vrij generiek gezien worden, aangezien vrijwel alle PHP webapplicaties last hebben van vergelijkbare problemen. De ingevoerde variabelen moeten door de verantwoordelijke Magento-module worden gefilterd (htmlspecialchars()) voordat ze in de browser worden getoond. Aangezien een gebruikersnaam nooit HTML-code mag bevatten, kan ook de PHP-functie strip_tags() op de ingevoerde waarde losgelaten worden.

Details

De meldingen zijn op 24 februari 2009 aangekaart door Loukas Kalenderidis, een Australische security expert werkzaam voor het bedrijf Sense of Security. De fouten lijken zich al voor te doen in versie 1.2.0.1, terwijl ook de nieuwste Magento-versie 1.2.1.1 welke op 24 februari 2009 uitkwam de problemen niet oplost. Vreemd genoeg is in de Magento Release Notes terug te vinden dat versie 1.2.1 (begin februari 2009 uitgekomen) al security issues met het loginformulier oploste. Klaarblijkelijk waren de bovenstaande problemen op dat moment nog steeds niet bekend.

In het kader van de veiligheid is de daadwerkelijke aanvalscode niet vermeld.

Home Blog Beveiligingsfouten in Magento 1.2