Pull to refresh

Hello MongoDB (открытый удаленный доступ)

Reading time 3 min
Views 31K
Доброго времени суток.

Прошелся по поиску хабра, но не нашел поста о такой проблеме, хотя пару раз комментарии посвященных людей всплывали.

У нас несколько VPS'ок, где используем MongoDB, ОС обычно дебиан 6/убунту, практически все ставим из пакетов, благо всего хватает. На днях, проверяя старые сервера, обнаружил


Для меня конечно было шоком! Попытка получить удаленный доступ увенчалась успехом


Залез в /etc/mongodb.conf, думая что кто-то из коллег мог себе открыть доступ, но ни слова об этом не было. Надеясь, что тот же коллега просто удалил подобную запись, залез в конфиг на локальной машине (дебиан 6) и тоже не обнаружил ничего про удаленный доступ. Пробежался по всем известным сайтам с монгоДБ и везде смог авторизоваться.

Сразу начал гуглить проблему и наконец нашел на офф. сайте net.bindIp
net.bindIp
Type: string

Default: All interfaces.… versionchanged:: 2.6.0 The deb and rpm packages include a default configuration file that sets {{role}} to 127.0.0.1.

Specifies the IP address that mongos or mongod binds to in order to listen for connections from applications. You may attach mongos or mongod to any interface. When attaching mongos or mongod to a publicly accessible interface, ensure that you have implemented proper authentication and firewall restrictions to protect the integrity of your database.

To bind to multiple IP addresses, enter a list of comma separated values.

Прошелся по всем серверам, в /etc/mongodb.conf добавил строчку
bind_ip = 127.0.0.1

Перегрузил mongoDB
/etc/init.d/mongodb restart

После чего удаленный доступ был закрыт

Разбор полетов

Решил разобраться как же так получилось, конечно сразу вспомнил про mysql, у которого по-умолчанию удаленный доступ закрыт, и конечно для многих, в том числе и меня, было разумно думать, что и монгоДБ здесь особых изяществ не изобретала. Поднял с нуля debian 7.4.0 (последний стабильный), и из пакета поставил монгоДБ, в конфигах уже обнаружил
bind_ip = 127.0.0.1

На память вспоминаю, что ставили из репозитария от монгоДБ по статье на офф сайте Install MongoDB on Debian, так как хостеры давали VPS только на базе Debian 6, с очень старой версией МонгоДБ. После установки из их репозитария в конфигах опять же ничего не обнаружил про удаленный доступ. В самой статье тоже ничего не пишут по этому поводу, что было очень даже обидно.

Проверка соседей

Недолго думая, решил проверить соседей по IP-адресу.
Набросал быстренький скрипт на PHP
<?php

set_time_limit(600);

$ipSt = '*.*.*.'; // 11.22.33.

for($a = 0, $b = 255; $a <= $b; $a++)  {

    $ip = $ipSt . $a;

    echo $ip.': ';

    ob_start();
    $fp = fsockopen($ip, 27017, $errno, $errstr, 0.1); 
    ob_get_contents();
    ob_clean();

    if (!$fp) {
        echo '---';
        }
    else {
        echo 'OK';
        fclose($fp);
        }

    echo '<br />';
    }



На что обнаружил очень приличный список открытых баз данных МонгоДБ, некоторые конечно были на авторизации, некоторые просто для бэкапа, но все же открыты.

Взлом?

Так что можно натворить с таким доступом? Начал тестировать на своем проекте, как минимум:
  • получил список пользователей с e-mail адресами
  • смог править статьи – изменять текст, ставить картинки и js-скрипты
  • через mongofiles смог загрузить файлы в БД, но вот сохранить на жесткий ума не хватило


Итоги

Конечно кто-то говорит, что это все для скорости, что системный администратор по-умолчанию должен сам за всем следить. Но вот только VPS'ки очень даже доступны, кучу статей где хвалят новые базы данных и другой софт, на что многие простые программисты соглашаются на работу с VPS, не имея большого административного опыта. От разработчиков монгоДБ я хотя бы ожидал закомментированную памятку в конфигах, раз не хотят по-умолчанию закрыть удаленный доступ
# bind_ip = 127.0.0.1

Похожие статьи, но уже по memcached: Как я нашел уязвимость на phpclub.ru, 1% всех сайтов рунета держит свой memcached открытым для мира. Немного статистики
Tags:
Hubs:
+34
Comments 28
Comments Comments 28

Articles