Det største sikkerhedshul i WordPress - Octokom

Det største sikkerhedshul i WordPress

Overskriften virker måske lidt som clickbait, men det var den melding en af vores kunder kom med, efter de havde snakket med en sikkerhedsekspert i deres netværk. Sikkerhedshullet var iflg eksperten, at man via WordPress’ standard REST API kunne tilgå brugernavne, som var på siden. Men er det reelt et sikkerhedshul, hvis bare man har styr på passwords & har en god server?

Hvad er REST API?

REST api kan bruges til rigtig mange forskellige ting., Een af de hyppigste er, når webshops kommunikerer med regnskabssystem eller fragtsystemer, men det vil også kunne bruges til at tilføje/rette indhold remote – , altså udenfor selve wordpress kontrolpanelet.

Men lige for at vi alle er helt med, så var det omtalte link https://DITDOMÆNE.DK/wp-json/wp/v2/users (selvfølgelig skal DITDOMÆNE.DK skiftes, og du skal være på en WordPress side). Det man via linket vil kunne se, er informationer om de brugere, der er på ens side. Men det er kun 1 af de mange ting REST API kan bruges til. Du vil eksempelvis kunne skifte “users” ud med “posts” og få et overblik over alle posts på den givne side.

Er REST api nødvendigt for netop din side?

I de fleste tilfælde vil svaret være nej, men driver du en webshop, vil der være aspekter, du vil kunne drage nytte af, som eksempler nævnt tidligere. Som standard er REST API aktivt på WordPress sider, men de fleste benytter slet ikke mulighederne i det, da de klarer de fleste ændringer direkte på siden.

Er REST API så overhovedet et sikkerhedshul?

Er REST API det sikkerhedshul som sikkerhedseksperten mente? Nej, det vil jeg ikke mene. Jeg er enig i, at man vil kunne få adgang til potentiel “følsom” data, via første link (altså brugernavne), men uden kode kan man ikke bruge det til noget. Det er derfor vigtigt, at man benytter en stærk kode til sin bruger, altså ikke kode som Bilhvid2019, men istedet mixer både store/små bogstaver, tal & tegn, til en kode ala B!lhvid”=19.

Endvidere er det selvfølgelig vigtigt, at den server din hjemmeside/webshop er placeret på også tager højde for sikkerheden. Eksempelvis beskytte mod bruteforce. For at forklare kort hvad et bruteforce angreb er, så er det er en gammel metode, men stadig meget populær blandt hackere, hvor hackere forsøger at “gætte” din kode, ved at køre et script, som tester forskellige varianter på meget kort tid.

Alt efter kompleksiteten af din kode, vil et bruteforce angreb tage alt fra få sekunder til flere år, om at finde din kode. Det er derfor vigtigt at din server blokerer disse forsøg, så de max får lov at prøve eksempelvis 10 gange, før IP-adressen bliver blokeret af serveren. Der findes flere apps/programmer, som kan hjælpe dig med at bruge stærke koder. her kan man eksempelvis nævne uniqkeyLastPass og Dashlane. Men der findes et hav af “Password Managers” på markedet idag.

Hvad du kan gøre for at skabe en sikker hjemmeside

Foruden password managers, stærke koder og bruteforce protection, er der også mulighed for at lave nogle ekstra lag af sikkerhed på dit kontrolpanel. Der er eksempelvis muligt at lave HTTP basic authentication, som kan laves via din FTP eller med et plugin såsom HTTP Auth, men lige til den her feature, vil jeg personligt anbefale FTP løsningen, da jeg ser det som en simpelt opgave, hvor et plugin virker overflødigt.

Der er også muligheden for at bruge en form for 2 factor. Som navnet indikerer , tilføjer en ekstra faktor til adgangen. Det kan du læse om lige her.

Sådan kan du deaktivere REST api

Ønsker du stadig ikke at din side giver adgang, og bruger du ikke REST API, findes der forskellige måder at deaktivere dette på. Der findes eksempelvis et plugin, som hedder Disable REST API. Det giver dig mulighed for selv at vælge hvilke dele af REST API du ønsker at lukke ned for. Men du vil også kunne skrive følgende kode ind i din functions.php, som lukker REST API fuldstændig:

// Deaktiver REST API
add_filter( 'rest_authentication_errors', function( $result ) {
    if ( ! empty( $result ) ) {
      return $result;
    }
    if ( ! is_user_logged_in() ) {
      return new WP_Error( 'rest_not_logged_in', 'Du er ikke logget ind, og kan derfor ikke se dette.', array( 'status' => 401 ) );
    }
    if ( ! current_user_can( 'administrator' ) ) {
      return new WP_Error( 'rest_not_admin', 'Du er ikke logget ind som administrator, og kan derfor ikke se dette.', array( 'status' => 401 ) );
    }
    return $result;
});

Konklusion

Man bør som udgangspunkt ikke være bange for at have REST API åbent, så længe man har styr på de andre instanser (kode & server), men vi har selv deaktiveret dette, da det ikke er noget vi benytter, og man kan jo aldrig være sikker nok.