SQL-injectiekwetsbaarheid in de Better Search Replace WordPress-plugin

Bekijk ook eens een van de onderstaande artikelen

Microsoft Recall Herinnering functionaliteit

Microsoft is bezig met een nieuwe functionaliteit genaamd Recall in laatste
Lees meer

CyberSecurity Awareness maand

Sinds 2003 wordt elk jaar in CyberSecurity Awareness maand gehouden. Dit jaar
Lees meer

Het nieuwe privacy akkoord tussen de VS en de EU.

Met ingang van het nieuwe jaar komen er nieuwe wijzigingen de aankomende maanden
Lees meer

SQL-injectiekwetsbaarheid in de Better Search Replace WordPress-plugin

Een van de onderzoekers van MijnSecurityPartner.nl heeft onlangs een code-audit uitgevoerd op verschillende populaire WordPress-plugins. Tijdens deze beoordeling ontdekte de beveiligingsonderzoeker een kwetsbaarheid in de Better Search Replace WordPress-plugin. De kwetsbaarheid, aangeduid als CVE-2022-2593, maakt de plugin vatbaar voor een SQL-injectieaanval, die mogelijk kan worden misbruikt door gebruikers met hoge privileges om willekeurige SQL-statements uit te voeren. Dit artikel geeft gedetailleerde informatie over de kwetsbaarheid en de impact ervan, samen met aanbevolen maatregelen om het risico te beperken.

De Better Search Replace WordPress-plugin voorafgaand aan versie 1.4.1 is vatbaar voor een SQL-injectieaanval, die kan worden misbruikt door gebruikers met hoge privileges om willekeurige SQL-statements uit te voeren. De plugin slaagt er niet in om tabelgegevens op de juiste manier te saneren en te escapen voordat deze worden opgenomen in SQL-query's, wat kan leiden tot mogelijke manipulatie van databasequery's.

De kwetsbaarheid kan worden geactiveerd door een gemanipuleerd POST-verzoek naar het endpoint better-search-replace te sturen. In de code van de plugin wordt het parameter select_tables onvoldoende gezuiverd, waardoor een aanvaller kwaadaardige SQL-code kan injecteren in de query.

Proof of Concept

Een aanvaller kan misbruik maken van deze kwetsbaarheid door een POST-verzoek naar het volgende endpoint te sturen:

POST /wp-admin/tools.php?page=better-search-replace&bsr-ajax=process_search_replace HTTP/1.1
Host: [target_host]
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: en-GB,en;q=0.5
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 369
Connection: close
Cookie:[admin+]

bsr_ajax_nonce=3c38e50368&action=process_search_replace&bsr_step=0&bsr_page=0&bsr_data=search_for%3Daaa%26replace_with%3Dcef%26select_tables%255B%255D%3Dwp_posts%60%20WHERE%201=SLEEP(1)%20--%20%26dry_run%3Don%26bsr_nonce%3Da66e81c52b%26_wp_http_referer%3D%252Fwordpress%252Fwp-admin%252Ftools.php%253Fpage%253Dbetter-search-replace%26action%3Dbsr_process_search_replace

In het bovenstaande verzoek wordt een POST-verzoek verzonden naar het endpoint /wp-admin/tools.php?page=better-search-replace&bsr-ajax=process_search_replace. De body van het verzoek bevat de volgende parameters:

  • bsr_ajax_nonce: Nonce-waarde voor authenticatie.
  • action: Specificeert de uit te voeren actie, in dit geval process_search_replace.
  • bsr_step en bsr_page: Parameters met betrekking tot het zoek- en vervangproces, deze kunnen beide worden ingesteld op een willekeurige numerieke waarde voor het misbruik om te werken. In dit geval zijn ze ingesteld op 0.
  • bsr_data: De bsr_data bevat een URL-gecodeerde tekenreeks met specifieke parameters voor de plugin:
    • select_tables: Deze parameter is de daadwerkelijke parameter die de SQL-payload injecteert. In dit geval probeert de payload een SQL-injectie uit te voeren door een kwaadaardige WHERE-clausule toe te voegen: wp_posts` WHERE 1=SLEEP(1) -- . Het dubbele streepje "--" commentarieert het overige deel van de oorspronkelijke SQL-query uit.
    • dry_run: Geeft aan of de zoek- en vervangoperatie moet worden uitgevoerd of gesimuleerd. In beide gevallen is er sprake van een kwetsbaarheid.
    • bsr_nonce: Nonce-waarde voor verificatie van het verzoek.
    • _wp_http_referer: Verwijst naar de URL van de vorige pagina.
    • action: Specificeert opnieuw de actie, in dit geval bsr_process_search_replace.

De kwetsbaarheid ontstaat door een fout in de manier waarop de Better Search Replace-plugin tabelnamen verwerkt bij het construeren van SQL-query's. Hoewel de plugin de door WordPress geleverde sql_esc-functie gebruikt om de meeste invoer te saneren, slaagt deze er niet in om backticks op de juiste manier te saneren bij het construeren van SQL-query's voor tabelnamen. Hierdoor kan een aanvaller het opschoningsmechanisme omzeilen en kwaadaardige SQL-code injecteren om van deze fout gebruik te maken.

Impact:

Om misbruik te maken van deze SQL-injectiekwetsbaarheid moet de aanvaller toegang hebben tot een account met hoge privilege-niveaus, zoals een beheerdersaccount. Succesvol misbruik kan de aanvaller in staat stellen willekeurige SQL-query's uit te voeren binnen de context van de WordPress-database. Dit kan leiden tot ongeautoriseerde toegang, manipulatie van gegevens of zelfs een volledige compromittering van de server waarop de database draait.

Oplossing:

Om deze kwetsbaarheid aan te pakken, hebben de beheerders van de plugin de code herzien om de geldigheid van tabelnamen te controleren voordat ze in SQL-query's worden gebruikt. Ze hebben een mechanisme geïmplementeerd om de geldigheid van tabelnamen te controleren aan de hand van de bestaande tabellen in de database, waardoor SQL-injectieaanvallen worden voorkomen.

Getroffen versies:

De SQL-injectiekwetsbaarheid bestaat in de Better Search Replace WordPress-pluginversies voorafgaand aan 1.4.1. Het wordt aangeraden dat alle gebruikers van deze plugin upgraden naar de nieuwste versie om het risico dat gepaard gaat met deze kwetsbaarheid te beperken.

Referenties