• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья Redis без пароля: 5 минут до платежных кредов

rat1Group

floppy-диск
Пользователь
Регистрация
24.05.2025
Сообщения
8
Реакции
16
Статья из Habr
«Выходишь такой в интернет… и случайно находишь платежку. Welcome to ops.»

В этом посте расскажу, как в ходе обычного неторопливого пентеста инфраструктуры я набрёл на Redis-сервер. И не просто Redis — а такой, что прямо хочется написать админам: «Ребята, вы серьёзно?»
Спойлер: без пароля, с 1200 ключами, среди которых — и курсы валют, и цены на туры, и... полностью валидная платёжная конфигурация.

Открытый порт 6379 оказался настоящей Pandora’s box.

Предыстория: на охоте

Как это часто бывает — сканишь себе диапазон через masscan, смотришь на 6379 порт, и… ну вы поняли.

Код:
redis-cli -h <ip> -p 6379 --no-auth-warning


Подключение — без проблем.
Пароля нет.
Сервер бодро отвечает, работает 6 дней, Redis 8.0.1.

— Ну да, обычный кэш, подумаешь…

Но когда DBSIZE возвращает 1202 ключа, а KEYS * выдаёт реальные данные — понимаешь, что это уже совсем другая история.


Что внутри?

«Если бы я получал биткойн за каждый getMinProductPrice::*, я бы уже не писал этот пост.»

Расклад по категориям:

  • WebRequest кэш — 89%
    Прям видно, что используется активно — ключи типа findDestinationDetail::, OAuth::
  • Бизнес-данные — 10–11%
    Там уже интереснее: цены, конвертация валют, продукты, партнёрские данные
  • Конфиги — 1–2 ключа
    И эти 1–2 ключа решают ВСЁ
Один из конфигурационных ключей выглядел как vposConfig::...
Я, конечно, не сразу поверил глазам, но там был полноценный JSON с конфигом платёжного шлюза.

json{
"name": "example",
"merchantId": "xxxxxxxx",
"apiUser": "test@...com",
"apiPassword": "S\\CsCccCcCc",
"encryptKey": "eY0test...",
"currencies": ["EUR", "GBP", "RUB", "USD", "TRY"],
"country": "TR"
}

🎯 Креды к боевому платёжному шлюзу. API-пользователь, пароль, ключ шифрования. Всё по-честному.

«Если это не критикал, то что тогда?»

Что ещё попалось?

  • Цены на туры:
    Видна и базовая стоимость, и финальная с наценкой. Можно изучать бизнес-логику, если ты вдруг конкурент.
  • Курсы валют:
    Прямо из Redis — 50 EUR = 57.41 USD. Курс свежий.
  • Партнёрские города и направления:
    JSON'ы вроде "name": "Paris", "secondaryId": 2378 — просто набор ID-шников, но тоже интересно.
  • Языковая аналитика:
    Судя по ключам, чаще всего юзали сайт на русском, турецком и немецком.
    (— Привет, наши из СНГ!)

Риски

1. Платёжная компрометация
Можно обращаться к API, совершать транзакции, тестить фрод — не будем.

2. PCI DSS violation
Передача кредов в незашифрованном виде?
✔️ Нарушено.
✔️ Проблемы с банком.
✔️ Штрафы.

3. Утечка бизнес-логики
Цены, конвертация, внутренние шаблоны API — бери и строй конкурента.

Почему это произошло?

«Redis по умолчанию — как холодильник на даче. Ты надеешься, что его никто не найдёт, но его найдут. И съедят всю колбасу.»
  • Redis слушал порт 6379 на внешнем интерфейсе
  • Не было пароля (requirepass)
  • Нет firewall или access list
  • Сервер жив в интернете 6+ дней

Что делать?

Если вы админ (или DevOps, или CTO, или просто добрый человек с доступом к docker-compose), вот мини-чеклист:

  1. ❌ Не слушайте Redis на 0.0.0.0
  2. 🔐 Всегда используйте requirepass
  3. 🔥 Ограничьте IP-фильтрами (iptables, ufw)
  4. 📦 Оберните Redis в VPN или защитную прослойку
  5. 🔍 Делайте регулярный аудит доступных портов

Мораль

Открытый Redis — это не просто баг. Это возможность.
В руках атакующего — это прямая дорога к деньгам, данным и репутационным потерям.

«Если бы я был злым, этот кейс закончился бы совсем иначе. Но, к счастью, я молодняк, ищущий признания в этом мире.»
СПОЙЛЕР: Все данные я поменял, хочется донести суть 0day бизнес логики, а не скомпрометированные данные + отписал сервису об их уязвимости.
 
хабровчане познают мир :rolleyes: посоветуй автору просканировать ещё порты 9200 и 27017
 
а что на них лежит?
печеньки?
mail:pass в больших количествах :D
 
Пожалуйста, обратите внимание, что пользователь заблокирован
mail:pass в больших количествах :D
разве? редис для кеша предназначен же(временные данные), я обычно там просто храню то что в памяти могло храниться, особенно для кластерных систем
 
разве? редис для кеша предназначен же(временные данные), я обычно там просто храню то что в памяти могло храниться, особенно для кластерных систем
я про 9200 - elasticsearch и 27017 - mongodb
 
Пожалуйста, обратите внимание, что пользователь заблокирован
разве? редис для кеша предназначен же(временные данные), я обычно там просто храню то что в памяти могло храниться, особенно для кластерных систем
а некоторые апи от платежек 😅
 
Один из конфигурационных ключей выглядел как vposConfig::...
Я, конечно, не сразу поверил глазам, но там был полноценный JSON с конфигом платёжного шлюза.

json{
"name": "example",
"merchantId": "xxxxxxxx",
"apiUser": "test@...com",
"apiPassword": "S\\CsCccCcCc",
"encryptKey": "eY0test...",
"currencies": ["EUR", "GBP", "RUB", "USD", "TRY"],
"country": "TR"
}
И... что с этим можно делать? Перевод? Но я так полагаю полицаи отследят получателя такого перевода влёгкую. Цепочка переводов? Так же, просто затратят больше времени и сил.

Даже интересно стало если вот тупо неторопливо сканить массканом сетки крупных провайдеров и потом чекером самодельным с дефолтными кредами и пустым паролем заходить пробовать - много ли такого улова будет? Это хоть и "на изи", но проверять прям влом честно говоря... Есть у кого личная статистика такого баловства может?

Статья безусловно поучительная (лайк!) для админов и ну прям начинающих ИБ, но суть стара как мир: сервис торчащий голой жопой в интернет и вообще без пароля.
Это из той же серии, что как в далёком 2003 году тупизм в стиле логин=пароль вида balans, filial и т.д. у одного регионального банка - и такое на практике встречается аж до сих пор! (многие не верят, но так бывает и в 2025 и подозреваю в 2125 так же будет - потому что "авось", "да кому мы нужны то?!" и глупость человеческие безграничны :) )
 
Есть у кого личная статистика такого баловства может?
У меня есть небольшая статистика, огромное количество, просто куча таких, многие не обновляют уязвимые, многие оставляют за место пары admin admin просто пару root admin и так далее, уязвимых просто валом, да и по сетям я так же скажу, что в довольно больших кампаниях много открытых точек входа, кто то впс не выключает и не обновляет ос, кто то вообще забивает на защиту, вот в ОАЭ с этим нету проблем, там все, ВСЕ закрыто, я за 3 часа поисков нашел всего 2 сети в которые смог влезть, ито меня встретила отключенная функция dhcp, вот так как то...
 
У меня есть небольшая статистика, огромное количество, просто куча таких, многие не обновляют уязвимые, многие оставляют за место пары admin admin просто пару root admin и так далее, уязвимых просто валом, да и по сетям я так же скажу, что в довольно больших кампаниях много открытых точек входа, кто то впс не выключает и не обновляет ос, кто то вообще забивает на защиту, вот в ОАЭ с этим нету проблем, там все, ВСЕ закрыто, я за 3 часа поисков нашел всего 2 сети в которые смог влезть, ито меня встретила отключенная функция dhcp, вот так как то...
спасибо. значит ничего не поменялось. однако...
 
мне как абсолютному нулью в хакинге очень было интересно прочесть это. Повторяю я ничего не понял но этт было эпично
поясню: база данных торчала в интернет на одном из серверов и туда просто взяли и зашли. это как если в подъезде ходить и ручки дверей дёргать или на парковке у ТЦ ходить и ручки у машин дёргать - статистически тупо забывают закрыть за день обязательно кто-то. тут то же самое с key-value базой данных Redis на каком-то сервере - "заходи кто хош". это не хак, а скорее грамотное дискавери.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх