Перейти до основного вмісту
Назад до новин
РОЗСЛІДУВАННЯ, ЩО ОХОПЛЮЄ КІЛЬКА СПРАВ

Шахраї — це не хакери: розібрано 4 серверні частини, усі з яких були з легкістю зламані

Firebase · Supabase · Express.js · Drainer-as-a-Service · лютий 2026 року

Викрито інфраструктуру шахрайства
19,000+
Викрадені фрази-посівні (1 кампанія)
4
Повний доступ до серверних компонентів
0
Потрібна автентифікація
267+
Домени, пов’язані з фішингом

 Застереження: це аналіз, а не напад

Усе, про що йдеться в цій статті, є результатом пасивний аналіз та загальнодоступні дані. Жодна система не була зламана. Жодна система автентифікації не була обійдена. У кожному випадку саме неправильна конфігурація з боку самих шахраїв зробила їхню інфраструктуру, дані жертв та операційні ідентифікатори доступними для будь-кого, хто просто заглянув. Кожен ключ API був знайдений у загальнодоступних пакетах JavaScript. Кожна база даних була широко відкрита через власні проектні рішення операторів. Ми документуємо це не для того, щоб атакувати, а щоб продемонструвати, що люди, які крадуть вашу криптовалюту не можуть навіть зберегти свої власні інструменти.

 Основна теза: «скрипт-кідді» з викраденими інструментами

У суспільній уяві існує стійкий міф про те, що інтернет-шахраї — це «хакери», тобто технічні генії, які вміло та витончено проникають у системи. Це неправильно.

Сучасні криптошахраї — це «скрипт-кідді», які використовують придбані набори інструментів. Вони купують пакети «Drainer-as-a-Service» за 200–500 доларів, розміщують їх на безкоштовному або дешевому хостингу й сподіваються, що їхні жертви цього не помітять. Вони не пишуть код. Вони не розуміються на мережах. І, звісно, вони не розуміються на безпеці.

Ми знаємо це, оскільки в лютому 2026 року компанія PhishDestroy проаналізувала 4 незалежні шахрайські схеми — і в кожному окремому випадку ми могли б:

Не потрібні експлойти. Немає уразливостей «нульового дня». Немає «хакерства». Просто відкривши вхідні двері, які вони залишили незамкненими.

 Приклад 1: «Примарний» API — server0002.mn19indexpre.xyz

 Express.js на Apache: нульовий рівень реальної безпеки

АВТЕНТИФІКАЦІЯ ВІДСУТНЯВІДСУТНІСТЬ ПЕРЕВІРКИ ВВЕДЕНИХ ДАНИХБЕЗ ОБМЕЖЕННЯ ШВИДКОСТІCORS: *
ПараметрЗначення
Доменserver0002.mn19indexpre.xyz
IP-адреса108.181.185.225
Серверний стекApache/2.4.58 (Ubuntu) → Express.js (Node.js)
Банер SSHSSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.11
Емітент TLSLet's Encrypt (E7), термін дії — січень–квітень 2026 року
DNS RegistrarGoDaddy (ns39/ns40.domaincontrol.com)
Електронна пошта (MX)mn19indexpre-xyz.mail.protection.outlook.com
Орендар MicrosoftNETORGFT19090185.onmicrosoft.com
Відкриті порти22 (SSH), 80 (HTTP→301), 443 (HTTPS)

 «Аутентифікація» — жарт

API постачається з жорстко заданим токеном Bearer: thisisakeyforsecureserver. Але ось у чому суть — токен насправді не перевірено:

// No auth header → accepted POST / HTTP/1.1 Content-Type: application/json {"subject":"test","domain":"test","messages":["ping"]} → {"success":true}// Wrong token → also accepted Авторизація: «wrong_token_completely» (помилковий токен) → {"success":true}// Any content type → also accepted Content-Type: text/xml, text/plain, multipart/form-data → {"success":true}

 Відсутність перевірки вхідних даних

Усі тестовані нами корисні навантаження для ін'єкцій приймалися без будь-яких повідомлень:

// SQL injection тема: "' АБО 1=1--"→ прийнято тема: "'; DROP TABLE messages;--"→ прийнято// SSTI (Server-Side Template Injection) тема: "{{7*7}}"→ прийнято тема: "{{config}}"→ прийнято тема: "{{self.__class__}}"→ прийнято// SSRF (Server-Side Request Forgery) домен: «http://169.254.169.254/latest/meta-data/»→ прийнято домен: "file:///etc/passwd"→ прийнято// XSS stored payload тема: "<script>alert(1)</script>"→ прийнято

 Характеристики роботи

Час відгуку на запит POST стабільно становить приблизно 7,5 секунди незалежно від розміру корисного навантаження (приймаються дані від 10 байтів до 10 МБ), що свідчить про переадресацію електронної пошти або ретрансляцію вебхуків на серверній стороні. Запит GET обробляється за 0,6 с. 10 паралельних запитів виконуються за 9,1 с — обмеження частоти запитів не застосовується.

 Можливість деанонімізації

Ідентифікатор орендаря Microsoft 365 NETORGFT19090185 є пряме посилання на сторінку організації який зареєстрував цей домен. З огляду на реєстраційні записи GoDaddy та виділену IP-адресу (яка не знаходиться за CDN), цей оператор є легко ідентифікується через законні канали. Запис SPF (include:secureserver.net) підтверджує, що хостинг електронної пошти GoDaddy — усі метадані електронної пошти можуть бути надані на підставі судової повістки.

 Приклад 2: Firebase Wide Open — web3ledgar.com

 Firestore без правил безпеки

ПРАВИЛА FIRESTORE: ВІДКРИТОУСІ ДАНІ ПРО ЖЕРТВ, ЯКІ МОЖНА ПРОЧИТАТИКлюч API у публічному коді JavaScript12 ЖЕРТВ, ЩО ПОТРАПИЛИ ПІД УВАГУ
ПараметрЗначення
Фішинговий доменweb3ledgar.com (типосквот слова «Ledger»)
Альтернативний доменweb3.ledgerscore.ltd
Проєкт Firebaseweb3ledger-210ab
Ключ APIAIzaSyCv8e-Gl7nK1RPpfNkJt-WjSZiaoe4AsL8
Ідентифікатор додатка1:1054258933515:web:9fb193fcd0093023f7fc0e
Пакет JS/static/js/main.7a5ec2fa.js
Правила FirestoreПовний доступ — читання/запис без автентифікації
Загальна кількість жертв12 записів у users колекція
Знайдені колекціїusers, transactions

 Дані про жертв — повністю доступні для будь-кого

Один неавтентифікований запит GET до REST API Firestore повернув кожна вкрадена фраза-посів:

GET /v1/projects/web3ledger-210ab/databases/(default)/documents/users?pageSize=300 → 200 OK→ Загальна кількість документів: 12// Sample victim record (seed phrase redacted for safety) { "walletId": «W3L-65285520», "walletType": «WalletConnect», "електронна пошта": «[ВИДАЛЕНО]@gmail.com», «seedPhrase»: "████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████", "createdAt": "2026-02-15T00:14:52.804Z", «статус»: «активний» }

Серед 12 записів був один, що багато про що свідчив — хтось уже перевірив систему за допомогою fbi@fbi.gov як і в електронному листі. Шахрай або перевіряв власну систему (що корисно для ідентифікації), або хтось інший вже її перевірив.

 Хід атаки

Фішинговий сайт імітує інтерфейс гаманця Ledger. Жертва натискає «Підключити гаманець» → вводить фразу-насіння → фронтенд на React записує дані безпосередньо в Firestore → шахрай зчитує інформацію з тієї самої відкритої бази даних. Сервера на стороні серверної інфраструктури взагалі немає. Уся система працює в рамках безкоштовного тарифного плану Google.

 Можливість деанонімізації

Ідентифікатор проєкту Firebase web3ledger-210ab та ідентифікатор додатка 1:1054258933515 є прив’язаний до облікового запису Google. Google зберігає дані про оплату, журнали IP-адрес та інформацію про створення облікових записів для всіх проєктів Firebase. Один-єдиний запит правоохоронних органів до Google дозволяє встановити особу оператора. Крім того, те, що правила Firestore є повністю відкритими, означає, що ми могли б внести записи до їхньої бази даних, повідомляв жертв у режимі реального часу або повністю видаляв всю колекцію.

 Приклад 3: Supabase Full CRUD — web3safe-pal.com

 Безпека на рівні рядків вимкнена, GraphQL повністю відкритий

RLS ВИМКНЕНОПОВНИЙ ДОСТУП ДО ОПЕРАЦІЙ CRUDПІДТРИМКА GRAPHQLФУНКЦІЇ EDGE: ОГЛЯДРОСІЙСЬКА ЛОКАЛІЗАЦІЯ
ПараметрЗначення
Фішинговий доменweb3safe-pal.com (типосквот від «SafePal»)
Проєкт Supabasegzqsadraigchwdhblavp
Ключ «Анон» Опубліковано в /assets/index-b025f4a6.js (748 КБ)
Таблиця бази данихseeds — відкрити для читання, вставки, оновлення, видалення
GraphQLУвімкнено повну інтроспекцію та мутації
Функції на краю send-wallet-import-email, send-email
Поштова службаAPI повторної відправки (RESEND_API_KEY у змінній середовища)
Реєстр жертвІдентифікатори 130–131 (129 раніше видалено)
Мова інтерфейсу користувача Російська («Основний гаманець», «Ваш гаманець завантажується...»)

 Повний доступ до бази даних — читання, запис, видалення

Анонімний ключ Supabase, який міститься в мініфікованому пакеті JavaScript, надає повний доступ до операцій CRUD до seeds таблиця:

// READ — get all stolen seed phrases GET /rest/v1/seeds?select=*ℴ=id.asc → 200 OK [ {"id":130, "фраза":"████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████", "ім'я":«Основний гаманець»}, {"id":131, "фраза":"████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████ ████", "ім'я":«Основний гаманець»} ] // INSERT — we can write to the scammer's database POST /rest/v1/seeds {"phrase":"PHISHDESTROY_WAS_HERE","name":"test"} → Створено 201 {"id":132} // UPDATE via GraphQL mutation { updateseedsCollection(filter:{id:{eq:131}}, set:{name:"PhishDestroy was here"}) { affectedCount } } → {"affectedCount": 1}// DELETE via GraphQL mutation { deleteFromseedsCollection(filter:{id:{eq:131}}, atMost:1) { affectedCount } } → {"affectedCount": 1}

Ідентифікатори починаються з 130 — це означає, що записи з 1 по 129 були раніше видалені оператором. Через цю систему пройшло щонайменше 131 посівна фраза.

 Функції Edge: ланцюжок електронних листів

Активні дві функції Supabase Edge. Ми провели реверс-інжиніринг send-email очікуваний формат вхідних даних функції шляхом тестування вхідних даних:

// Probing send-email endpoint {"seed":"test phrase","name":"test"} → 200 OK {"id":"f2749592-..."} {"seed_phrase":"...","wallet_name":"..."} → 400 «Дані про насіння не надано». {"phrase":"...","name":"..."} → 400 «Дані про насіння не надано».// The function accepts {seed, name} and sends to attacker via Resend API// Edge Function source (reconstructed from JS bundle):// NB.functions.invoke("send-wallet-import-email",// {body: {wallet_name, secret_phrase, ip_address}})

Ключ API «Resend» (RESEND_API_KEY) зберігається у змінних середовища Supabase. Сервіс Resend веде облік даних про перевірку відправників та даних для виставлення рахунків — ще один прямий шлях до ідентифікації оператора.

 Можливість деанонімізації

Російська локалізація інтерфейсу користувача («Основной кошелек», «Ваш кошелек загружается...») вказує на Російськомовний оператор. Проєкт Supabase (gzqsadraigchwdhblavp) пов’язаний з обліковим записом, що містить дані про оплату. Служба «Повторно надіслати електронний лист» має адресу електронної пошти одержувача. Інтроспекція GraphQL розкриває повну схему бази даних. Ми продемонстрували повний доступ на запис — ми могли б замінити кожну вкрадену фразу-насіння на попереджувальне повідомлення для жертв, або видалив усю таблицю. Оператор не мав би жодної можливості відновити дані.

 Приклад 4: Зливний пристрій промислового масштабу — aipolypredictor.xyz

 19 000 фраз-насіння за 5,8 днів

Викрадено понад 19 тис. насінинПОСЛІДОВНІ ІДЕНТИФІКАТОРИ ЗАВДАНЬБЕЗ ОБМЕЖЕНЬ CORSDaaS KIT (defex.cc)ПІДТВЕРДЖЕНО 11 ДОМЕНІВ
ПараметрЗначення
Домен інтерфейсу користувача aipolypredictor.xyz («PolySniper | Інсайдерські ставки від Frontrun»)
API C2api.yfhikblkhghdyteiuyf54.run
IP-адреси C2 172.67.168.147, 104.21.26.231 (Cloudflare)
Бек-ендExpress.js (Node.js) v1.0.0
Реєстратор (інтерфейс користувача)NiceNIC International Group Co.
Реєстратор (C2)PDR Ltd. (PublicDomainRegistry.com)
Час безвідмовної роботи~139 годин (початок — ~10 лютого 2026 року о 21:00 за UTC)
Комплект для зливу CDN renderer-postcard.defex.cc (601 КБ зашифрованого JS)
Бот у TelegramАктивний, інтегрований для сповіщень
Обмеження частоти запитів10 запитів за 60 секунд (єдине виявлене обмеження)

 Масштаб, визначений послідовними ідентифікаторами

Найбільш фатальна помилка: послідовні ідентифікатори завдань. При кожному надсиланні фрази-посіву видається ідентифікатор, що збільшується, що дозволяє будь-кому обчислити загальний обсяг:

POST /api/check-seed-full { «seedPhrase»: "тестова фраза", «bundleId»: "88ef78f56e0837dd0339e40a882bf563", «глибина»: 100, «домен»: «aipolypredictor.xyz», «sourceInfo»: {"walletName":«MetaMask», «isBot»:false} } → {"success":true, "message":"Перевірка в черзі", "jobId":"19358"}// Next request: jobId 19359, then 19360...// ~19,000 seed phrases in ~139 hours = ~137 per hour

 Багатоланцюгова архітектура

Сервер C2 генерує ключі для всіх основних ланцюгів, використовуючи шляхи генерування глибиною 100:

⛓️
Мережі, що стали мішенями
ETH/BTC/SOL/XMR
🔑
Глибина виведення
100
🌐
Підтверджені домени
11
🕸️
defex.cc Посилання
255+

 Інфраструктура кампанії

11 підтверджених доменів у 2 групах операторів, відстежуваних за ідентифікаторами Bundle ID:

Ідентифікатор пакетаДомениСтатус
88ef78f5...aipolypredictor.xyzНАЖИВО
4446ea5d...solana.onspace.app, solxjup.onspace.appНАЖИВО
Комплект defex.cc jup-v2.com, events-charizard.fun, events-llquid.fun, events-blackswan.fun, soljup.onspace.build Змішаний

 Аналіз корисного навантаження JavaScript

Три зашифровані JS-коди слугують для викачування даних:

  • wallet-connect.js (46 КБ) — Обробляє інтерфейс підключення гаманця, перехоплює введені початкові дані. Заплутування коду за допомогою ротації масиву рядків.
  • wallet-specific-modals.js (134 КБ) — Містить Повний список англійських слів за стандартом BIP39 та Список слів для Monero (1 626 слів). Захист від налагодження за допомогою перезапису console.log/trace. Підтримка модальних вікон для декількох гаманців.
  • defex.cc/index.js (601 КБ) — Код, зашифрований за допомогою Unicode з використанням китайських імен змінних. Логіка виведення коштів, специфічна для Solana. Кодер Base58, примітиви для виведення криптографічних ключів. Версія 3.0.0.

 Можливість деанонімізації

Цей CORS: * заголовок та відсутність засобів автентифікації будь-хто може надсилати запити та відстежувати зміну ідентифікатора завдання у режимі реального часу. Інтеграція з ботом Telegram означає, що на обліковий запис оператора в Telegram надходять сповіщення — а метадані Telegram можуть бути витребувані за судовим наказом. NiceNIC (реєстратор для інтерфейсу) — це відомий «куленепробивний» реєстратор, якого ми раніше досліджуваний, але компанія PDR Ltd. (реєстратор доменів C2) відповідає на запити правоохоронних органів. Цей defex.cc Комплект «drainer» обслуговує понад 255 доменів — злом сайту defex.cc може призвести до викриття всієї операції DaaS та всіх її клієнтів.

 Порівняння: 4 операції, одна й та сама схема

Метрична система mn19indexpre
Express.js
web3ledgar
Firebase
web3safe-pal
Supabase
aipolypredictor
Зливний пристрій C2
АутентифікаціяНемає (токен проігноровано)НемаєАнонімний ключ у JSНемає (CORS: *)
Дані, що підлягають зчитуваннюПовідомлення/ретрансляціяУсі фрази-насінняУсі фрази-насінняІдентифікатори вакансій / шкала
Дані, що підлягають записуТак (без обмежень)ТакТак (повний набір операцій CRUD)Так (відправити)
Перевірка введених данихНульНульНульМінімальний
Обмеження частоти запитівНемаєНемаєНемає10 запитів за 60 секунд
Можливість зняття анонімностіОрендар MS365Обліковий запис GoogleПовторне надсилання + білінг SupabasePDR + Telegram
Орієнтовна кількість жертвНевідомо12131+19,000+
Мова оператораНевідомоАнглійськаРосійськаНевідомо

 Чому шахраї — це не хакери

Докази є незаперечними. У всіх 4 операціях ми спостерігаємо одну й ту саму закономірність:

 Як діють шахраї
  • Придбайте готові комплекти для сушіння посуду (200–500 доларів)
  • Розгортання на безкоштовних тарифних планах (Firebase, Supabase)
  • Залишити стандартні налаштування без змін
  • Використовуйте жорстко задані токени, які вони не перевіряють
  • Ніколи не вмикайте RLS, ніколи не обмежуйте CORS
  • Вказати власні ідентифікаційні дані в метаданих
  • Використовуйте послідовні ідентифікатори, які відображають їхній масштаб
 Що б зробили хакери
  • Створити власні інструменти для виведення даних
  • Використовуйте зашифровані канали з аутентифікацією
  • Використовувати випадкові ідентифікатори, чергувати інфраструктуру
  • Забезпечити належний контроль доступу
  • Використовуйте Tor/ланцюжки проксі-серверів, анонімні платежі
  • Відокремити операційну ідентичність від хостингу
  • Застосовувати методи протидії криміналістичній експертизі

Типовий клієнт сервісу «Drainer-as-a-Service» — це соціальний інженер із кредитною карткою, а не технічний фахівець. Вони знають, як зареєструвати домен і вставити код у панель управління хостингом. Вони не знають, як:

Це не надто досвідчені супротивники. Це люди, які не вміють налаштовувати базу даних.

 Індикатори компрометації (IOC)

Домени

# Case 1: Express.js API server0002.mn19indexpre.xyz # Case 2: Firebase Stealer web3ledgar.com web3.ledgerscore.ltd # Case 3: Supabase Stealer web3safe-pal.com # Case 4: Drainer Campaign aipolypredictor.xyz API.yfhikblkhghdyteiuyf54.run yfhikblkhghdyteiuyf54.run renderer-postcard.defex.cc solana.onspace.app solxjup.onspace.app jupag.onspace.app jupiverse.onspace.app stakepayment.icu jup-v2.com events-charizard.fun events-llquid.fun events-blackswan.fun soljup.onspace.build

IP-адреси

108.181.185.225 # Case 1 — Express.js (dedicated) 172.67.168.147 / 104.21.26.231 # Case 4 — C2 API (Cloudflare) 172.67.178.251 / 104.21.67.171 # Case 4 — Frontend (Cloudflare) 172.67.209.39 / 104.21.37.139 # Case 4 — defex.cc (Cloudflare) 43.130.171.152 / 43.130.171.225 # Case 4 — onspace domains (Tencent)

Ключі API та ідентифікатори проєктів

# Firebase (Case 2) Проєкт: web3ledger-210ab Ключ API: AIzaSyCv8e-Gl7nK1RPpfNkJt-WjSZiaoe4AsL8 Ідентифікатор додатка: 1:1054258933515:web:9fb193fcd0093023f7fc0e # Supabase (Case 3) Проєкт: gzqsadraigchwdhblavp Анонімний ключ: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9... # Campaign Tracking (Case 4) Пакет 1: 88ef78f56e0837dd0339e40a882bf563 Пакет 2: 4446ea5ddb308b2494db8ad4b12196c3 # Microsoft Tenant (Case 1) NETORGFT19090185.onmicrosoft.com

 Висновок: «Король голий»

 Висновок

Кожна шахрайська операція, яку ми проаналізували, могла бути повністю скомпрометовані, деанонімізовані та виведені з ладу використовуючи лише веб-браузер, утиліту curl та загальнодоступну документацію. У кожному випадку зловмисники залишали свої бази даних повністю відкритими, ключі API — у загальнодоступних файлах JavaScript, інформацію про себе — у метаданих, а дані своїх жертв — доступними для будь-кого, хто лише захотів їх переглянути.

Висновок простий: шахраї — це не хакери. Це крадії, які придбали набір відмичок на AliExpress і забули зачинити власні вхідні двері. Інструменти, якими вони користуються, є високотехнологічними — адже їх створив хтось інший. Самі оператори — аматори, які безперечно наражають на небезпеку власну інфраструктуру, дані своїх жертв та власні особисті дані перед будь-ким, хто має хоча б базові технічні знання.

Якщо ви вводили свою фразу-посів на будь-якому з цих сайтів — вважайте, що ваш гаманець зламано, і негайно перекажіть кошти.

Про всі виявлені факти було повідомлено відповідним постачальникам послуг (Google/Firebase, Supabase, Cloudflare, реєстраторам доменів) та задокументовано для правоохоронних органів. Зазначені вище IOC було додано до PhishDestroy — список для знищення.

Поділитися цим розслідуванням

X / Twitter Telegram Reddit LinkedIn

Пов’язані розслідування

BUYTRX викрито: 55 доменів та програма, що викачує кошти з TRON
РОЗСЛІДУВАННЯ
BUYTRX викрито: 55 доменів та програма, що викачує кошти з TRON
Набір інструментів «Crypto Drainer»: викрито реселерів «Angel Drainer»
ГЛИБОКЕ РОЗСЛІДУВАННЯ
Набір інструментів «Crypto Drainer»: викрито реселерів «Angel Drainer»
Keitaro TDS: 1 500 панелей зазнали витоку, жодного законного застосування
РОЗСЛІДУВАННЯ
Keitaro TDS: 1 500 панелей зазнали витоку, жодного законного застосування
Повідомлення про прозорість. PhishDestroy — це некомерційний, незалежний проєкт. Наші дослідження можуть містити певну упередженість щодо інфраструктури шахрайства та сервісів, що її підтримують. Ми закликаємо читачів критично та незалежно оцінювати всі матеріали. Ознайомтеся з повною версією нашої заяви про прозорість →