Dit is de vertaling van een artikel dat Marc-Alexandre Montpas plaatste bij Sucuri.net.

SQL Injection Vulnerability in Joomla! 3.7

Tijdens een standaard onderzoek-audit voor Sucuri Firewall (WAF), ontdekten we een SQL Injection vulnerability dat betrekking had op Joomla! 3.7 – CVE-2017-8917. De kwetsbaarheid is makkelijk uit te buiten en heeft geen speciaal account nodig op de site van het doelwit.

Loopt u gevaar?

De kwetsbaarheid wordt veroorzaakt door een nieuwe component, com_fields (de extra velden), dat toegevoegd werd in versie 3.7.0. Als u deze versie gebruikt, dan bent u getroffen en zou u zo snel mogelijk moeten updaten. Deze kwetsbare component is openbaar toegankelijk, wat inhoud dat dit probleem uitgevoerd kan worden door iedere kwaadaardige persoon die uw site bezoekt.
Gezien de aard van SQL Injection aanvallen, zijn er veel manieren waarop een aanvaller kwaad kan doen – de voorbeelden bevatten 'wachtwoord hash lekken' en 'het kapen van ingelogde gebruikerssessies' (het laatste resulteert in een volledig in opspraak geraakte site als een beheerderssessie wordt gestolen).

 

Technische details

De openbare com_fields component leent enkele views van de beheerders component met dezelfde naam. Hoewel dit vreemd lijkt om te doen, het heeft een heel praktisch doel - het maakt het hergebruik van algemene code mogelijk die geschreven is voor het andere gedeelte, in plaats van het te herschrijven vanaf nul.

code

Zoals u in bovenstaande fragment kunt zien, maakt het de $config[‘base_path’] variabele gelijk aan de waarde van de JPATH_COMPONENT_ADMINISTRATOR constante, welke het lokale pad naar de map met beheerders componenten bevat. Als dit gebeurt, dan zal Joomla! de views en models uit dit pad halen in plaats van de openbare. Aangezien deze actie afhankelijk is van de view parameter die fields en layout modal bevat, weten we dat de URL om deze view te benaderen er dan zo uit moet zien:
/index.php?option=com_fields&view=fields&layout=modal
Een bezoek aan deze URL leidt tot een lijst met alle beschikbare custom fields op de site welke gesorteerd kan worden afhankelijk van de verschillende parameters.
De enige administrator view die benaderd kan worden is fields – en deze haalt zijn gegevens uit een model in het beheergedeelte (door de $config[‘base_path’] truc die we eerder beschreven). In dit geval, zat de kwetsbaarheid die we ontdekten in het FieldsModelFields model, in ./administrator/components/com_fields/models/fields.php.
De boosdoener kan gevonden worden in de getListQuery methode.

code

Voor degenen die niet bekend zijn met hoe Joomla! omgaat met SQL queries, $query->order() is een methode waarvan de invoer gekoppeld wordt aan het ORDER BY statement van de query, u kunt zich dus voorstellen dat niet geschoonde gebruikersinvoer hier het laatste is dat u wilt. Helaas is dit precies wat er gebeurde.

code

list.fullordering kan gevuld worden met gebruikersinvoer omdat het FieldsModelFields model overerft van de JModelList class, welke bovenstaande fragment bevat. U ziet misschien dat het enkele controles uitvoert op de inhoud en stelt dan de list.direction en list.ordering in, maar wat gebeurt er met list.fullordering?

code

Na het switch statement, stelt deze instructie de waarde in met een waarde die u kunt beheersen, onafhankelijk of er een juiste list.direction of list.ordering is.
Om deze kwetsbaarheid uit te buiten hoeft een aanvaller alleen maar de juiste parameters toe te voegen aan de URL om geneste SQL queries in te voeren.

Conclusie

Als u dat nog niet gedaan heeft: Update zo snel mogelijk!
Dit is een serieuze kwetsbaarheid welke om verschillende manieren misbruikt kan worden om een kwetsbare site kwaad te doen. Update nu. Als u denkt dat uw Joomla site gehackt is volg dan de gratis DIY opschoon gids.

Reageer

1000 Resterende tekens