http://forum.searchengines.ru/showthread.php?t=538868&page=11 - здесь оригинал. Думаю, кому-то будет интересно. Теперь размеренно расказываю что такое. Ну, собственно, с чем это связано... Связано это с тем, что ISPSystem не позаботились о безопасной пересылке данных для авторизации через API, и сама по себе панелька работает от имени пользователя root. На мой взгляд изначально писать панельку таким образом было не совсем верно, но теперь чего уж сделать. Панелька для выполнения каких-то действий, а так же при авторизации (в том числе и через API) делает вызов к апачу. Вызов вида http://hostname/ipsmgr?authinfo=rootassword Ну то, что такой урл вызывается из-под апача дает злоумышленнику возможность получить рутовый пароль при парсинге server-status. Таким же образом можно при желании отловить пароль любого пользователя. Варианты защиты от этой баги: 1. Запретить сервер-статус совсем. 2. Сделать на него алиас не /server-status, а, скажем, /serv-stat-info 3. Выключить расширенный статус апача. Дело в том, что даже если сервер-статус скрыт для удаленного пользователя, многие хосты дают возможность использования SSH и/или perl/cgi (system в php.ini не у всех закрыты). Собственно, можно по крону скриптом с того же шелла вгетом брать сервер-статус и парсить его. Что должно быть сделано ISPSystem для закрытия баги: 1. Передача пароля в захешированном виде. 2. Вообще весьма желательно, чтобы процессы использовали внутренние протоколы обмена данными либо общались через сокеты линукс. Например, когда биллинг и манагер стоят на одном сервере. 3. API не должно вообще обрабатываться через апач. Для этого должен быть занят отдельный порт, через который бы шли данные между биллинг-системами и панелью. 4. Панель не должна иметь привилегии пользователя root постоянно, а должна выполняться с правами локального пользователя. Права root должны ей приобретаться через специальный вызов через какой-либо враппер. За сим все. Теперь если вы нашли человека, который не закрыл сервер-статус с мира вы можете парсить его каким-либо софтом. Если вы купили хостинг и он предоставляет вам SSH с панелью ISPManager, проверьте, работают ли wget или curl. Если да, плюс у вас есть крон... Можно сделать следующим образом. wget http://localhost/server-status (если не выдаст 404, значит надо посмотреть, что он нам отдал - расширенный ли статус отдает апач). Ну и сам скрипт: wget http://localhost/server-status -O /myhomedir/server-status cat /myhomedir/server-status | grep root >> /myhomedir/parsed-status Ну и останется только добавить это в крон (раз в минуту), а дальше просто ждать... КОгда зайдет админ через биллинг, либо биллинг начнет выполнять какие-либо действия, эти две строки кода запишут в файл parsed-status строку, в которой будет содержаться рутовый пароль к этому серверу. Общие идеи дал, дальше - смотрите сами, может где и ошибся.
Собственно, ссылка уже не актуальна Ну во первых, authinfo передается только когда вы связываете несколько продуктов ISPsystem в одну систему (Например подключаете панель к биллингу). При работе через браузер все передается через post. Самое простое - это не включать расширенный server-status. Не знаю, что у вас за дистрибутив, но на Denian по умолчанию он включен без Extended, на Centos и FreeBSD - вообще не включен. По вашей же логике, что мешает злоумышленнику использовать захешированный пароль, если панель будет его принимать?