• 🔥 Бесплатный курс от Академии Кодебай: «Анализ защищенности веб-приложений»

    🛡 Научитесь находить и использовать уязвимости веб-приложений.
    🧠 Изучите SQLi, XSS, CSRF, IDOR и другие типовые атаки на практике.
    🧪 Погрузитесь в реальные лаборатории и взломайте свой первый сайт!
    🚀 Подходит новичкам — никаких сложных предварительных знаний не требуется.

    Доступ открыт прямо сейчас Записаться бесплатно

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

Angelika_S

Green Team
12.02.2025
24
3
«Выходишь такой в интернет… и случайно находишь платежку. 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 — это не просто баг. Это возможность.
В руках атакующего — это прямая дорога к деньгам, данным и репутационным потерям.
«Если бы я был злым, этот кейс закончился бы совсем иначе. Но, к счастью, я молодняк, ищущий признания в этом мире.»
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab