CVE-2026-15300: SQL-injektion i GEO my WP til WordPress
SQL-injektion i WordPress-pluginnet GEO my WP (CVE-2026-15300) kan udnyttes uden login. Opdatér til version 4.5.5.
Hvad er det?
SQL-injektion (CWE-89) er en teknik, hvor en angriber indsætter egen databasekode i et system via et inputfelt eller en URL-parameter, så koden bliver udført af databasen. I GEO my WP, et plugin til at vise nærmeste butik eller afdeling på et kort, læses parametrene distance, lat og lng fra selve URL’en i stedet for et almindeligt formularfelt. Det betyder, at WordPress’ indbyggede beskyttelse mod skadelig tekst ikke virker på disse værdier. Pluginnet forsøgte at rense værdierne med funktionen esc_sql(), men den funktion beskytter kun tekststrenge, ikke tal, og værdierne blev brugt uden citationstegn i afstandsberegningen i databaseforespørgslen. Derfor kunne en angriber indsætte kode som ‘1 OR SLEEP(3)’ og få databasen til at udføre den. Fejlen er rettet i version 4.5.5, hvor pluginnet nu kontrollerer, at værdierne faktisk er tal, før de bruges.
Hvem rammer det?
Alle WordPress-websites, der har GEO my WP (også kendt som Posts Locator) installeret i version 4.5.4 eller ældre. Pluginnet bruges typisk til butiksfindere, forhandlerkort og ejendomssøgninger, hvor besøgende kan søge efter det nærmeste punkt på et kort. Danske virksomheder og kommuner med en butiksfinder, afdelingsoversigt eller lignende kortfunktion på deres WordPress-side bør kontrollere, om pluginnet er i brug.
Hvad kan ske?
En angriber kan uden login sende en almindelig webforespørgsel med skadelige værdier i distance-, lat- eller lng-parametrene. Det kan bruges til at overbelaste databasen med langsomme forespørgsler, så webstedet bliver utilgængeligt, eller til at ændre data i databasen. Fordi angrebet går direkte til databasen, kan det i praksis også åbne for videre udnyttelse, selv om selve CVSS-vurderingen ikke sætter fortrolighed som direkte påvirket.
Hvor alvorligt er det?
CVSS-score er 9,1 ud af 10, kritisk. Angrebet kræver ingen login (PR:N) og ingen handling fra en bruger (UI:N). Det kan udføres over internettet med lav teknisk kompleksitet (AC:L), altså med et enkelt manipuleret webkald. Konsekvensen er høj for integritet og tilgængelighed, det vil sige at data kan ændres og systemet kan gå ned. Der er på offentliggørelsesdatoen ikke rapporteret aktiv udnyttelse i naturen, men den tekniske beskrivelse er detaljeret nok til, at en fungerende udnyttelse kan udvikles hurtigt.
Hvad gør jeg nu?
Følg punkterne i denne rækkefølge:
- Opdatér GEO my WP (Posts Locator) til version 4.5.5 eller nyere. Det lukker hullet, da pluginnet nu kræver, at koordinater og afstand er reelle tal, før de bruges i databaseforespørgslen.
- Undersøg alle jeres WordPress-installationer for, om pluginnet er installeret og aktivt, også på sekundære sider og undersider.
- Gennemgå webserverens logfiler for forespørgsler til søgefunktionen med usædvanlige tegn eller SQL-nøgleord i distance-, lat- eller lng-parametrene.
- Kan opdateringen ikke gennemføres med det samme, så deaktivér pluginnets søgefunktion eller blokér adgang til den via en webapplikationsfirewall.
- Tag en frisk backup af databasen, inden opdateringen installeres.
- Kontakt en sikkerhedspartner, hvis I finder tegn på misbrug i logfilerne, eller hvis I ikke selv har ressourcer til at gennemføre opdatering og logtjek.
Opdatér inden for 48 timer
Vi anbefaler, at opdateringen til version 4.5.5 installeres hurtigst muligt, da sårbarheden kan udnyttes uden login og med et almindeligt webkald. Det er kun i orden at vente til et planlagt opdateringsvindue, hvis pluginnets søgefunktion i mellemtiden er deaktiveret eller beskyttet af en webapplikationsfirewall, og opdateringen sker inden for få dage.
Tidslinje
Konkrete eksempler
Butiksfinder på en dansk webshop
En dansk detailkæde bruger GEO my WP til at vise den nærmeste fysiske butik på deres WordPress-side. En angriber sender en manipuleret forespørgsel med skadelig kode i distance-parameteren uden at logge ind. Forespørgslen får databasen til at hænge i flere sekunder ad gangen, hvilket gradvist gør webshoppen langsom og til sidst utilgængelig for kunderne.
Ofte stillede spørgsmål
Er vi ramt af denne sårbarhed?
I er ramt, hvis jeres WordPress-side bruger pluginnet GEO my WP (Posts Locator) i version 4.5.4 eller ældre. Tjek versionen i WordPress-administrationen under Plugins.
Hvordan tjekker vi hvilken version vi har?
Log ind i WordPress-administrationen, gå til Plugins, og se versionsnummeret ved GEO my WP. Er det 4.5.4 eller lavere, skal I opdatere.
Kan vi vente til weekenden med at opdatere?
Det kan I kun, hvis pluginnets søgefunktion deaktiveres eller blokeres frem til da. Sårbarheden kræver ingen login, så risikoen er til stede, indtil den er lukket.
Skal vi anmelde det til Datatilsynet?
Kun hvis I finder konkrete tegn på, at persondata er blevet tilgået eller ændret uretmæssigt. Ren tilstedeværelse af sårbarheden udløser ikke i sig selv en anmeldepligt.
Hvordan ved vi, om vi allerede har været udsat for et angreb?
Gennemgå webserverens logfiler for forespørgsler til søgefunktionen, hvor distance-, lat- eller lng-parametrene indeholder SQL-nøgleord eller funktioner som SLEEP.
Påvirker sårbarheden andre plugins eller temaer?
Nej, fejlen er specifik for GEO my WPs søgefunktion og påvirker ikke andre installerede plugins eller temaer.
CVSS-detaljer
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
CWE-svaghedstyper
Original NVD-beskrivelse (engelsk)
The GEO my WP plugin for WordPress was vulnerable to SQL Injection via the ‘distance’, ‘lat’, and ‘lng’ parameters in versions up to, and including, 4.5.4. The values were read from $_SERVER[‘QUERY_STRING’] via parse_str() (bypassing wp_magic_quotes, which does not cover $_SERVER), then passed through bare esc_sql() before being interpolated into unquoted numeric positions in the proximity-search query (HAVING/SELECT clause distance math, BETWEEN bounding-box pre-filter) built by gmw_locations_query() in plugins/posts-locator/includes/class-gmw-wp-query.php. Because esc_sql() only escapes string delimiters and these positions are numeric, payloads such as `1 OR SLEEP(3)` survived sanitization. Fixed in 4.5.5 by adding an upstream is_numeric() guard that short-circuits the WHERE clause to `AND 1 = 0` when either coordinate is non-numeric, and by replacing the three esc_sql() calls with (float) casts.
Referencer & kilder
Eksterne kilder
Brug for hjælp med jeres sikkerhed?
Vi hjælper SMV’er med at omsætte trusler som denne til konkrete handlingsplaner.