
Firebase · Supabase · Express.js · Drainer-as-a-Service · Febrero de 2026
Aviso legal: Se trata de un análisis, no de un ataque
Todo lo que se expone en este artículo es el resultado de análisis pasivo y datos de acceso público. No se produjo ninguna intrusión en los sistemas. No se eludió ningún proceso de autenticación. En todos los casos, la propia configuración errónea de los estafadores dejó al descubierto su infraestructura, los datos de las víctimas y sus identidades operativas ante cualquiera que simplemente echara un vistazo. Todas las claves API se encontraron en paquetes JavaScript públicos. Todas las bases de datos estaban totalmente abiertas por el propio diseño de los operadores. Documentamos esto no para atacar, sino para demostrar que las personas que te roban tus criptomonedas ni siquiera pueden guardar sus propias herramientas.
La tesis principal: «script kiddies» con herramientas robadas
Existe un mito muy arraigado en la imaginación colectiva según el cual los estafadores en línea son «hackers», es decir, genios de la tecnología que se cuelan en los sistemas con habilidad y sofisticación. Esto es incorrecto.
Los estafadores modernos del mundo de las criptomonedas son «script kiddies» que utilizan kits de herramientas comprados. Compran paquetes de «Drainer-as-a-Service» por entre 200 y 500 dólares, los instalan en servidores de alojamiento gratuitos o baratos y rezan para que sus víctimas no se den cuenta. No escriben código. No entienden de redes. Y, desde luego, no entienden de seguridad.
Lo sabemos porque, en febrero de 2026, THE ENABLERS REGISTRY analizó 4 operaciones fraudulentas independientes — y en todos y cada uno de los casos, podríamos haber:
- Leer todos los datos de las víctimas del robo (frases de semilla, direcciones de correo electrónico, direcciones IP, tipos de monedero)
- Modificado o eliminado la base de datos del estafador
- Se ha identificado al operador a través de claves de API expuestas, direcciones de correo electrónico y huellas de infraestructura
- Se ha reproducido el ataque contra el estafador — aprovechando las mismas vulnerabilidades que dejaron sin solucionar
No se necesitan vulnerabilidades. Ni «zero-days». Ni «hacking». Solo al abrir la puerta principal que habían dejado sin cerrar con llave.
Caso 1: La API fantasma — [REDACTED]
Express.js en Apache: seguridad nula
| Parámetro | Valor |
|---|---|
| Dominio | [REDACTED] |
| Dirección IP | 108.181.185.225 |
| Pila de servidores | Apache/2.4.58 (Ubuntu) → Express.js (Node.js) |
| Banner de SSH | SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.11 |
| Emisor de TLS | Let's Encrypt (E7), válido de enero a abril de 2026 |
| Registrador de DNS | IANA #146 (ns39/ns40.[REDACTED]) |
| Correo electrónico (MX) | [REDACTED] |
| Entidad de Microsoft | [REDACTED] |
| Puertos abiertos | 22 (SSH), 80 (HTTP→301), 443 (HTTPS) |
«Autenticación»: una broma
La API incluye un token «Bearer» predefinido: thisisakeyforsecureserver. Pero aquí viene lo mejor: — el token no se verifica realmente:
Validación sin datos de entrada
Todas las cargas útiles de inyección que probamos fueron aceptadas sin ningún aviso:
Huella de rendimiento
Tiempo de respuesta constante de unos 7,5 segundos en la solicitud POST, independientemente del tamaño de la carga útil (se aceptan desde 10 bytes hasta 10 MB), lo que sugiere un reenvío de correo electrónico o un relé de webhooks en el backend. La solicitud GET responde en 0,6 s. Se completan 10 solicitudes en paralelo en 9,1 s; no se aplica ninguna limitación de frecuencia.
Posibilidad de desanonimización
ID de inquilino de Microsoft 365 NETORGFT19090185 es un enlace directo a la cuenta de la organización que registró este dominio. Si a esto le sumamos los registros de IANA #146 y una IP dedicada (que no está detrás de una CDN), este operador es fácilmente identificable por la vía legal. El registro SPF (include:[REDACTED]) confirma que, en el servicio de alojamiento de correo electrónico de IANA #146, se puede acceder a todos los metadatos del correo electrónico mediante una citación judicial.
Caso 2: Firebase a las puertas — [REDACTED]
Firestore sin reglas de seguridad
| Parámetro | Valor |
|---|---|
| Dominio de possibly phishing | [REDACTED] (typosquat de «[REDACTED]») |
| Dominio alternativo | [REDACTED] |
| Proyecto de Firebase | web3ledger-210ab |
| Clave API | AIzaSyCv8e-Gl7nK1RPpfNkJt-WjSZiaoe4AsL8 |
| ID de la aplicación | 1:1054258933515:web:9fb193fcd0093023f7fc0e |
| Paquete JS | /static/js/main.7a5ec2fa.js |
| Reglas de Firestore | Totalmente abierto — lectura/escritura sin autenticación |
| Número total de víctimas | 12 registros en users colección |
| Colecciones encontradas | users, transactions |
Datos de las víctimas: totalmente accesibles para todo el mundo
Una única solicitud GET sin autenticar a la API REST de Firestore devolvió cada frase de semillas robada:
Entre los 12 registros había una entrada reveladora: alguien ya había puesto a prueba el sistema con fbi@fbi.gov tal y como indica el correo electrónico. O bien el estafador probó su propio sistema (algo útil para la identificación), o bien alguien más ya lo había sondeado.
El flujo del ataque
La página web de possibly phishing imita la interfaz del monedero de [REDACTED]. La víctima hace clic en «Conectar monedero» → introduce la frase de semillas → el frontend de React escribe directamente en Firestore → el estafador lee los datos de esa misma base de datos abierta. No hay ningún servidor backend. Todo el sistema funciona con el plan gratuito de Google.
Posibilidad de desanonimización
ID del proyecto de Firebase web3ledger-210ab y el ID de la aplicación 1:1054258933515 son vinculado a una cuenta de Google. Google conserva registros de facturación, registros de direcciones IP y datos de creación de cuentas de todos los proyectos de Firebase. Basta con una sola solicitud de las fuerzas del orden a Google para que se revele la identidad del operador. Además, el hecho de que las reglas de Firestore estén totalmente abiertas significa que Podríamos haber introducido los registros en su base de datos, avisaba a las víctimas en tiempo real o borraba toda la colección.
Caso 3: CRUD completo en Supabase — [REDACTED]
Seguridad a nivel de fila desactivada, GraphQL totalmente abierto
| Parámetro | Valor |
|---|---|
| Dominio de possibly phishing | [REDACTED] (typosquat de «[REDACTED]») |
| Proyecto Supabase | gzqsadraigchwdhblavp |
| Clave Anon | Publicado en /assets/index-b025f4a6.js (748 KB) |
| Tabla de la base de datos | seeds — abrir, leer, insertar, actualizar, eliminar |
| GraphQL | Introspección completa + mutaciones activadas |
| Funciones de borde | send-wallet-import-email, send-email |
| Servicio de correo electrónico | API de reenvío (RESEND_API_KEY en el entorno) |
| Expedientes de las víctimas | N.º de identificación 130-131 (el 129 se había eliminado anteriormente) |
| Idioma de la interfaz de usuario | Ruso («Cartera principal», «Se está cargando tu cartera...») |
Acceso completo a la base de datos: lectura, escritura y eliminación
La clave «anon» de Supabase, que se encuentra en el paquete de JavaScript minificado, permite Acceso CRUD completo a la seeds tabla:
Los ID empiezan por 130 — lo que significa que el operador había eliminado previamente los registros del 1 al 129. Al menos 131 frases de semillas han pasado por este sistema.
Funciones de Edge: el rastro de los correos electrónicos
Hay dos funciones de Supabase Edge activas. Hemos realizado ingeniería inversa del send-email el formato de entrada esperado de la función mediante la comprobación de cargas útiles:
La clave de la API de reenvío (RESEND_API_KEY) se almacena en las variables de entorno de Supabase. Resend conserva los registros de verificación del remitente y los datos de facturación — otra vía directa para conocer la identidad del operador.
Posibilidad de desanonimización
La localización de la interfaz de usuario en ruso («Основной кошелек», «Ваш кошелек загружается...») indica un Operador que habla ruso. El proyecto Supabase (gzqsadraigchwdhblavp) está vinculado a una cuenta con registros de facturación. El servicio de reenvío de correos electrónicos dispone de la dirección de correo electrónico del destinatario. La introspección de GraphQL revela el esquema completo de la base de datos. Hemos demostrado que existe acceso completo de escritura — Podríamos haber sustituido cada frase de semillas robada por un mensaje de advertencia dirigido a las víctimas., o habría eliminado toda la tabla. El operador no tendría forma alguna de recuperar los datos.
Caso 4: Escurridor a escala industrial — [REDACTED]
19 000 frases de semilla en 5,8 días
| Parámetro | Valor |
|---|---|
| Ámbito del front-end | [REDACTED] («PolySniper | Apuestas privilegiadas de Frontrun») |
| API C2 | api.yfhikblkhghdyteiuyf54.run |
| Direcciones IP C2 | 172.67.168.147, 104.21.26.231 (IANA #1910) |
| Backend | Express.js (Node.js) v1.0.0 |
| Responsable de matrículas (atención al público) | IANA #3765 Co. |
| Secretario (C2) | [REDACTED] (IANA #303) |
| Tiempo de actividad | ~139 horas (comenzó el ~10 de febrero de 2026 a las 21:00 UTC) |
| Kit de desagüe CDN | [REDACTED] (601 KB de código JS ofuscado) |
| Bot de [REDACTED] | Activo, integrado para recibir notificaciones |
| Límite de solicitudes | 10 solicitudes/60 s (único límite detectado) |
Escala revelada mediante identificadores secuenciales
El error más grave: ID de trabajo secuenciales. Cada vez que se envía una frase de semillas, se devuelve un identificador (ID) incremental, lo que permite a cualquiera calcular el volumen total:
Arquitectura multicadena
El servidor C2 deriva claves en todas las cadenas principales utilizando rutas de derivación de profundidad 100:
Infraestructura de la campaña
11 dominios confirmados en 2 grupos de operadores, identificados mediante los ID de paquete:
| ID del paquete | Dominios | Estado |
|---|---|---|
88ef78f5... | [REDACTED] | EN DIRECTO |
4446ea5d... | [REDACTED], [REDACTED] | EN DIRECTO |
| Kit de [REDACTED] | [REDACTED], [REDACTED], [REDACTED], [REDACTED], soljup.onspace.build | Misto |
Análisis de la carga útil de JavaScript
Tres cargas útiles de JavaScript ofuscadas alimentan el drainer:
- wallet-connect.js (46 KB) — Gestiona la interfaz de usuario para la conexión con el monedero e intercepta la introducción de la semilla. Ofuscación mediante rotación de matrices de cadenas.
- wallet-specific-modals.js (134 KB) — Contiene Lista completa de palabras en inglés de BIP39 y Lista de palabras de Monero (1.626 palabras). Protección contra la depuración mediante la anulación de console.log/trace. Compatibilidad con ventanas modales para múltiples monederos.
- [REDACTED]/index.js (601 KB) — Ofuscado con Unicode y nombres de variables en chino. Lógica de «drainer» específica de Solana. Codificador Base58, primitivas de derivación de claves criptográficas. Versión 3.0.0.
Posibilidad de desanonimización
El CORS: * el encabezado y la falta de medios de autenticación Cualquiera puede enviar solicitudes y comprobar cómo van aumentando los números de referencia de los trabajos en tiempo real. La integración del bot de [REDACTED] implica que la cuenta de [REDACTED] del operador recibe notificaciones, y los metadatos de [REDACTED] pueden ser objeto de una orden judicial. IANA #3765 (registrador del frontend) es un registrador «a prueba de balas» conocido que hemos ya investigado, pero [REDACTED] (registrador de dominios C2) sí responde a las solicitudes de las fuerzas del orden. El [REDACTED] El kit de drenaje da servicio a más de 255 dominios; si se comprometiera la seguridad de [REDACTED], quedaría al descubierto toda la operación de DaaS y todos sus clientes.
Comparativa: 4 operaciones, mismo patrón
| Métrico | mn19indexpre Express.js | web3ledgar Firebase | web3safe-pal Supabase | aipolypredictor Escurridor C2 |
|---|---|---|---|---|
| Autenticación | Ninguno (símbolo ignorado) | Ninguno | Clave «anon» en JS | Ninguno (CORS: *) |
| Datos legibles | Mensajes/retransmisión | Todas las frases de semilla | Todas las frases de semilla | N.º de referencia de los puestos / escala salarial |
| Datos grabables | Sí (ilimitado) | Sí | Sí (CRUD completo) | Sí (enviar) |
| Validación de datos introducidos | Cero | Cero | Cero | Mínimo |
| Limitación de la tasa | Ninguno | Ninguno | Ninguno | 10 solicitudes/60 s |
| Que se puede desanonimizar | Alquilado de MS365 | Cuenta de Google | Reenviar + Facturación de Supabase | PDR + [REDACTED] |
| Número estimado de víctimas | Desconocido | 12 | 131+ | 19,000+ |
| Idioma del operador | Desconocido | Inglés | Ruso | Desconocido |
Por qué los estafadores no son hackers
Las pruebas son abrumadoras. En las cuatro operaciones observamos el mismo patrón:
- Comprar kits de escurridores ya montados (entre 200 y 500 dólares)
- Implementar en planes gratuitos (Firebase, Supabase)
- No modifiques las configuraciones predeterminadas
- Utiliza tokens fijos que no se verifiquen
- Nunca actives RLS, nunca restrinjas CORS
- Revelar su propia identidad en los metadatos
- Utiliza identificadores secuenciales que reflejen su escala
- Crear herramientas de exfiltración personalizadas
- Utiliza canales cifrados y autenticados
- Aleatorizar los identificadores, rotar la infraestructura
- Implantar un control de acceso adecuado
- Utilizar Tor o cadenas de proxies, pagos anónimos
- Separar la identidad operativa del alojamiento
- Aplicar técnicas antiforenses
El cliente medio de «Drainer-as-a-Service» es un ingeniero social con una tarjeta de crédito, no son técnicos. Saben cómo registrar un dominio y pegar código en el panel de un alojamiento web. No saben cómo:
- Configurar las reglas de seguridad de Firestore (te llevará 2 minutos)
- Activar la seguridad a nivel de fila de Supabase (tardaría 5 minutos)
- Validar y depurar los datos introducidos (tardaría 30 minutos)
- Utiliza UUID en lugar de números enteros secuenciales (solo requeriría una línea de código)
- Restringir CORS a sus propios dominios (se necesitaría una sola línea de configuración)
No se trata de adversarios sofisticados. Se trata de personas que no saben configurar una base de datos.
Indicadores de compromiso (IOC)
Dominios
Direcciones IP
Claves API e ID de proyecto
Conclusión: El emperador va desnudo
Conclusión
Todas las operaciones fraudulentas que hemos analizado podrían ser totalmente comprometida, desanonimizada y desarticulada utilizando únicamente un navegador web, curl y documentación disponible públicamente. En todos los casos, los atacantes dejaron sus bases de datos totalmente expuestas, sus claves API en archivos JavaScript públicos, sus identidades en los metadatos y los datos de sus víctimas al alcance de cualquiera que se tomara la molestia de buscarlos.
La lección es sencilla: Los estafadores no son hackers. Son ladrones de tiendas que compraron un juego de ganzúas en AliExpress y se olvidaron de cerrar con llave la puerta de su propia casa. Las herramientas que utilizan son sofisticadas… porque las ha fabricado otra persona. Los propios operadores son aficionados que exponen de forma sistemática su propia infraestructura, los datos de sus víctimas y sus propias identidades ante cualquiera que tenga conocimientos técnicos básicos.
Si has introducido tu frase de recuperación en alguna de estas páginas web, da por hecho que tu monedero ha sido comprometido y transfiere los fondos inmediatamente.
Todos los hallazgos se han comunicado a los proveedores de servicios correspondientes (Google/Firebase, Supabase, IANA #1910, registradores de dominios) y se han documentado para las fuerzas del orden. Los IOC mencionados anteriormente se han añadido a la THE ENABLERS REGISTRY: lista de eliminación.