Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shared hosting remote code execution #60

Closed
0x0d opened this issue Apr 24, 2015 · 15 comments
Closed

Shared hosting remote code execution #60

0x0d opened this issue Apr 24, 2015 · 15 comments

Comments

@0x0d
Copy link

0x0d commented Apr 24, 2015

During auth phase, manul checks for /tmp/config.php file existense, and if it exist - includes it ;)
Usually, /tmp directory is world writable and accesible by anyone.

So, exploit is simple:

  1. Login via ssh to our shared hosting.
  2. Create file /tmp/config.php with own code, or this can be done via simple php script.
  3. Just wait while someone installs and executes manul on his site.
  4. PWN him.
@peter-volkov
Copy link
Collaborator

Thanks for the note, but normally config.php wil be written not in system-wide /tmp, but to ./tmp in current dir, there Manul's index.php is located. It depends on file access. But we'll review it anyway and will find better way to store the hash.

@0x0d
Copy link
Author

0x0d commented Apr 24, 2015

Петя, он при первом запуске проверится на existence, и заинклюдится из /tmp. До его записи дело даже не дойдёт ;)
Уберите /tmp из пути, это очень серьезная бага.

@peter-volkov
Copy link
Collaborator

Дима, куда ты предлагаешь пихать хэш?

@0x0d
Copy link
Author

0x0d commented Apr 24, 2015

В локальный ./tmp и только туда

@peter-volkov
Copy link
Collaborator

Он туда и пишется, если права есть https://github.com/antimalware/manul/blob/master/src/scanner/classes/Initialization.inc.php#L40
Если их нет, сам понимаешь, это вообще странная ситуация, но всё-таки склоняюсь к тому, что лучше в этом случае писать в системный tmp, чем вообще не запускаться.

@peter-volkov
Copy link
Collaborator

Возможно, стоит дополнительное предупреждение рисовать в UI в случае, если используется системный tmp

@gregzem
Copy link
Collaborator

gregzem commented Apr 24, 2015

На шаред хостинге могут быть проблемы у двух пользователей, один из которых уже запустил манула и создал файл в /tmp/config.php, а второй пытается сделать это следом. Второй запустить манул на этом сервере уже не сможет, у него будет инклудится первый и будет всегда запрашиваться неправильный пароль. Я за то, чтобы убрать системный каталог (в крайнем случае для системного каталога tmp сделать имя файла конфига уникальным).

@0x0d
Copy link
Author

0x0d commented Apr 24, 2015

Ребят, я не про запись config.php. Я про опасность того, о чём написал gregzem, т.е. про собственно чтение конфига, и порядок этого чтения.
Смотрите:

  1. Предположим что кто-то, создал файл /tmp/config.php с кодом а-ля:
  1. Что случится со всеми последующими юзерами кто взял и запустил манул на шаред хостинге в первый раз?

@peter-volkov
Copy link
Collaborator

Ок. Предложу такое решение: config.php будем не инклудить, а читать просто как текстовый файл, выпаршивая хэш. php - чтобы всё-таки нельзя было открыть и прочесть через http запрос

@gregzem
Copy link
Collaborator

gregzem commented Apr 24, 2015

Но ведь это так и не решает проблему двух юзеров (у которых локальные tmp не доступны на запись) на одном шаред хостинге. От первого юзера файл создан в /tmp/config.php, второй использует его же и получает проблему с аутентификацией.

@0x0d
Copy link
Author

0x0d commented Apr 24, 2015

Ребят, вы серьёзно сейчас?

  1. Забейте вы на проблему с аутентификацией. Это пофигу, правда. Я бы на месте СЕОшников и малварщиков, уже сейчас на всех своих шеллах запилил бы /tmp/config.php и ждал бы запусков манулов.
  2. Если локальные tmp недоступны на запись, то показывайте пользователю предупреждение и ничего не делайте. Как-то же он залил эти исходники туда, ведь правда? Значит осилит и chmod 777

@peter-volkov
Copy link
Collaborator

Дима, это раздувание бури в стакане с вынесением на facebook кажется мне несколько нездоровым. Во-первых remote тут с большой натяжкой и ты это понимаешь, во-вторых это сработает у одного аномального пользователя из ста, если звёзды сойдутся. Несмотря на то, что ни один из открытых тобой багов не является критичным на момент их открытия - у всех ряд оговорок, я выкачу фиксы сегодня же, тестирую в данный момент. Ты же сейчас себя проявляешь как белка с известной картинки. Некрасиво, Дима. Спасибо тебе за открытые баги, но неужели тебе действительно так нравится делать из этого сенсацию?

@0x0d
Copy link
Author

0x0d commented Apr 24, 2015

Петя, да, мне нравится делать из этого сенсацию. Потому что так быстрее фиксят, по опыту, а не спорят насчёт авторизации и не говорят "мы исправим это в следущей версии" как в предыдущем баге.

Потому что, Петя, даже если вы выкатите фиксы, те кто уже поставил manul - уже не обновятся. Все уже поставились как есть. Поставились в директорию site-name/manul/, как вы и просили, чтобы было проще их насканить наверное.

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

Я правда очень хорошо отношусь к вам всем, но нельзя так. Правда нельзя. Вы не в игрушки играете.

@0x0d
Copy link
Author

0x0d commented Apr 24, 2015

Публикацию я удалил, извини, не хотел чтобы это отразилось именно на тебе.

@peter-volkov
Copy link
Collaborator

Поправил - теперь инклуда нет.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants