{"id":1530,"date":"2026-07-14T11:48:52","date_gmt":"2026-07-14T11:48:52","guid":{"rendered":"https:\/\/cybercolombia.co\/index.php\/2026\/07\/14\/paquetes-de-148-npm-disfrazados-de-servidores-proxy-para-estudiantes-convirtieron-los-navegadores-en-una-botnet-ddos-cyberdefensa-mx\/"},"modified":"2026-07-14T11:48:52","modified_gmt":"2026-07-14T11:48:52","slug":"paquetes-de-148-npm-disfrazados-de-servidores-proxy-para-estudiantes-convirtieron-los-navegadores-en-una-botnet-ddos-cyberdefensa-mx","status":"publish","type":"post","link":"https:\/\/cybercolombia.co\/index.php\/2026\/07\/14\/paquetes-de-148-npm-disfrazados-de-servidores-proxy-para-estudiantes-convirtieron-los-navegadores-en-una-botnet-ddos-cyberdefensa-mx\/","title":{"rendered":"Paquetes de 148 npm disfrazados de servidores proxy para estudiantes convirtieron los navegadores en una botnet DDoS \u2013 CYBERDEFENSA.MX"},"content":{"rendered":"<div id=\"articlebody\">\n<p>Una campa\u00f1a de paquetes de 148 npm disfrazados de servidores proxy web para estudiantes convirti\u00f3 los navegadores de los visitantes en una botnet distribuida de denegaci\u00f3n de servicio durante aproximadamente dos semanas en mayo, seg\u00fan una nueva investigaci\u00f3n de JFrog.<\/p>\n<p>Los paquetes no persegu\u00edan a los desarrolladores que podr\u00edan instalarlos. Los operadores utilizaron el registro como alojamiento gratuito para un sitio proxy con trampa explosiva y dejaron que los estudiantes que vinieron a esquivar los filtros web de la escuela suministraran el tr\u00e1fico de ataque.<\/p>\n<p>Los paquetes se enviaron con nombres como charlie-kirk, ilovefemboys y miguelphonk, cada uno con una aplicaci\u00f3n proxy con la marca \u00abLucide\u00bb y vestida como una p\u00e1gina de inicio de tutor\u00eda llamada Riverbend Tutoring o Northstar Tutoring.<\/p>\n<p>En la superficie, el proxy funcion\u00f3, permitiendo a los estudiantes pasar los filtros de contenido para acceder a juegos y sitios bloqueados. Debajo, carg\u00f3 un cargador de c\u00f3digo remoto cuya carga \u00fatil los operadores pod\u00edan intercambiar a voluntad, adem\u00e1s de un generador de inundaci\u00f3n WebSocket creado para hablar el protocolo proxy Wisp. Cualquiera que abriera una p\u00e1gina se un\u00eda al enjambre sin saberlo.<\/p>\n<p>Nada de esto se ejecuta en el momento de la instalaci\u00f3n. Los paquetes no incluyen enlaces de ciclo de vida ni scripts de compilaci\u00f3n nativos, y nunca fueron escritos para ser importados a un proyecto.<\/p>\n<p>El gusano Shai-Hulud autorreplicante que afect\u00f3 a m\u00e1s de 500 paquetes en septiembre de 2025 recopil\u00f3 secretos de los desarrolladores y se volvi\u00f3 a publicar con tokens robados. D\u00edas antes, un ataque de phishing al mantenedor conocido como qix desliz\u00f3 c\u00f3digo de drenaje de billetera en chalk, debug y otros 16 paquetes con miles de millones de descargas semanales entre ellos.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/ai-vuln-protection-d\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Ciberseguridad\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjQl2axNwsfhbXOFynrg_uAZsvHi3OvNGSA8KJO-BKR8Xm3x7yjKV3EvfY4v5mwXx6LF0uWFb9h9d9iAV_Pi-YYhqimX9wx4OaLdDJEdR215Xrxq_PAtXkaLfQso4pTSjbj6fvh_ZTliLpzWZSZfcoZgyXtKwhN-SSDDlmbtUqGLshc0KqYQGWYHMN52Sl1\/s728-e100\/zz-d.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>Esos ataques se activan en el momento en que se instala un paquete y se dirigen a las personas que crean el software. \u00c9ste omite el proceso de compilaci\u00f3n y espera en una pesta\u00f1a del navegador.<\/p>\n<p>Un anterior <a href=\"https:\/\/safedep.io\/malicious-npm-terminal3airport-proxy-adware-spam\/\" target=\"_blank\">aviso de SafeDep<\/a> catalog\u00f3 141 de los paquetes en mayo y ley\u00f3 la operaci\u00f3n como adware y abuso de registro: anuncios popunder, scripts de monetizaci\u00f3n de terceros y seguimiento de Google Analytics incorporados en un proxy Scramjet dirigido a estudiantes. Eso se mantuvo en lo que era visible en la superficie.<\/p>\n<p><a href=\"https:\/\/research.jfrog.com\/post\/lucide-proxy-npm-malware-campaign\/\" target=\"_blank\">JFrog tir\u00f3 del hilo<\/a> m\u00e1s. El equipo desofusc\u00f3 el paquete de entrada de la aplicaci\u00f3n, una sola l\u00ednea de JavaScript de 5,4 MB que se descomprimi\u00f3 en m\u00e1s de 20.600 l\u00edneas de c\u00f3digo legible, y recuper\u00f3 cargas \u00fatiles archivadas de Wayback Machine para reconstruir la l\u00ednea de tiempo de la campa\u00f1a.<\/p>\n<p>Dos m\u00f3dulos se encontraban debajo del adware y ambos se activaban antes de que se renderizara la interfaz de React.<\/p>\n<p>El primero, que JFrog llama <strong>G2<\/strong>es un cargador de scripts remoto y recupera el c\u00f3digo de la forma m\u00e1s insegura posible. Extrae JavaScript de un repositorio de GitHub a trav\u00e9s de la CDN jsDelivr, apunta a la rama principal mutable en lugar de una confirmaci\u00f3n fijada, no incluye verificaci\u00f3n de integridad de subrecursos y ejecuta todo lo que regresa con los propios privilegios de origen del sitio proxy: acceso completo a cookies, almacenamiento local y puntos finales del mismo origen.<\/p>\n<p>Una pol\u00edtica de no referencia evita que la solicitud anuncie su procedencia. Quien tenga la cuenta de GitHub detr\u00e1s de ella puede cambiar el c\u00f3digo que se ejecuta en el navegador de cada visitante cuando lo desee.<\/p>\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhuL6ulZ7H9zKk5PsH406YkUZX8UOKHFaA2cXSSKenZL34mPuhQYCPIzwmTHI3F7T7y7Oqp9-gQ54QS53PYMkFWeVshbKDcUd8vFo4ccYHo3JEe-kkiJWgaggZbGZWaZPW_5v4amPuIHxAJbxMqxKUkAs71DU9ZkQE8TVjvIeh2j5uDnm8NFzufs9Z2e0w\/s1700-e365\/lucide-proxy-website-archive.png\" style=\"clear: left; display: block; float: left;  text-align: center;\"><img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEhuL6ulZ7H9zKk5PsH406YkUZX8UOKHFaA2cXSSKenZL34mPuhQYCPIzwmTHI3F7T7y7Oqp9-gQ54QS53PYMkFWeVshbKDcUd8vFo4ccYHo3JEe-kkiJWgaggZbGZWaZPW_5v4amPuIHxAJbxMqxKUkAs71DU9ZkQE8TVjvIeh2j5uDnm8NFzufs9Z2e0w\/s1700-e365\/lucide-proxy-website-archive.png\" alt=\"Red de robots DDoS\" border=\"0\" data-original-height=\"900\" data-original-width=\"1440\" title=\"Red de robots DDoS\"\/><\/a><\/div>\n<p>El repositorio devolv\u00eda un 404 cuando JFrog lo mir\u00f3, pero una copia archivada del 30 de mayo conservaba lo que hab\u00eda servido: una burda inundaci\u00f3n HTTP. Cada 500 milisegundos, el script crea una nueva cadena de un mill\u00f3n de caracteres y la activa como un POST sin cors en cdn.caan.edu, que JFrog identifica como el dominio p\u00fablico de una escuela de enfermer\u00eda en Matteson, Illinois.<\/p>\n<p>Las solicitudes nunca esperan una respuesta, por lo que se acumulan. JFrog registra cada visitante activo a aproximadamente 2 MB por segundo de carga, lo que significa que mil pesta\u00f1as proxy abiertas empujar\u00edan alrededor de 2 GB por segundo al objetivo. Un par\u00e1metro de consulta aleatorio anula el almacenamiento en cach\u00e9 de los servidores proxy y no-cors omite la verificaci\u00f3n previa de CORS, por lo que nada limita los paquetes.<\/p>\n<p>El segundo m\u00f3dulo, <strong>I2<\/strong>es el m\u00e1s agudo. Obtiene un archivo de texto sin formato, websocket.txt, que contiene una URL de WebSocket de destino y un recuento de sockets limitado entre 1 y 1024, luego abre esa cantidad de conexiones en un bucle escalonado. La configuraci\u00f3n archivada apunt\u00f3 a cada navegador a 30 conexiones a un punto final Wisp en lunaron[.]arriba, un proxy en vivo ocupado inyectando publicidad maliciosa.<\/p>\n<p><a href=\"https:\/\/github.com\/MercuryWorkshop\/wisp-protocol\" target=\"_blank\">Jir\u00f3n<\/a> es un protocolo de Mercury Workshop de bajo costo para hacer t\u00faneles de muchos sockets TCP y UDP a trav\u00e9s de un \u00fanico WebSocket, y es una plomer\u00eda com\u00fan en la misma escena de proxy de navegador que estos paquetes imitan.<\/p>\n<p>Una vez conectado, cada navegador configura su socket en modo binario y, cada 100 milisegundos, env\u00eda una trama Wisp CONNECT v\u00e1lida seguida de una trama CLOSE, ambas apuntando a localhost:1. Los fotogramas son paquetes Wisp little-endian correctos, por lo que el objetivo no es la propia m\u00e1quina del estudiante. Es el servidor Wisp remoto en el otro extremo de la conexi\u00f3n.<\/p>\n<div class=\"separator\" style=\"clear: both;\"><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjj9cpbdlGJAX8DjNAhrG39lB9W-gf2CtPFtyiJ9N7Z30uhhEiUhrwBzT27D3guHOnlFHaf-mqjI1u2uWXCq4z5G2dEMI0qSr4aXCmBVTcije0Jkd5gGgmwk1AFD0UkcQ8I9S_SBjbObwxSB5IF4Va9nn_u2UV8PToVgrl6441WWjSTDIoOYLqVxtJSG98\/s1700-e365\/js-code.png\" style=\"clear: left; display: block; float: left;  text-align: center;\"><img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjj9cpbdlGJAX8DjNAhrG39lB9W-gf2CtPFtyiJ9N7Z30uhhEiUhrwBzT27D3guHOnlFHaf-mqjI1u2uWXCq4z5G2dEMI0qSr4aXCmBVTcije0Jkd5gGgmwk1AFD0UkcQ8I9S_SBjbObwxSB5IF4Va9nn_u2UV8PToVgrl6441WWjSTDIoOYLqVxtJSG98\/s1700-e365\/js-code.png\" alt=\"\" border=\"0\" data-original-height=\"996\" data-original-width=\"1972\"\/><\/a><\/div>\n<p>Eso lo convierte en un ataque de plano de control en lugar de volum\u00e9trico. Un solo navegador que ejecute los 1.024 sockets completos puede presionar a un servidor Wisp para que asigne y elimine alrededor de 10.240 conexiones por segundo mientras escribe m\u00e1s de 20.000 l\u00edneas de registro en el mismo tramo.<\/p>\n<p>JFrog se\u00f1ala que Mercury Workshop <a href=\"https:\/\/github.com\/MercuryWorkshop\/wisp-server-node\" target=\"_blank\">nodo-servidor-wisp<\/a> abre un socket nuevo para cada trama CONNECT sin verificar si el destino es un loopback o una direcci\u00f3n privada, y registra cada intento. Esto agota los descriptores de archivos, inunda el almacenamiento de registros y descarta el proxy. wisp-server-node ya est\u00e1 en desuso; sus encargados est\u00e1n indicando a los usuarios exactamente esta clase de problema de seguridad y estabilidad.<\/p>\n<p>Entonces, la campa\u00f1a convirti\u00f3 una herramienta de proxy estudiantil en un arma contra los servidores de los que dependen otros proxy estudiantiles, y apunt\u00f3 una inundaci\u00f3n separada a una escuela lateral.<\/p>\n<p>La infraestructura est\u00e1 muy agrupada y no est\u00e1 dise\u00f1ada para esconderse. JFrog rastre\u00f3 las compilaciones hasta una organizaci\u00f3n de GitHub llamada lucideproxy cuyas cuentas se registraron con segundos de diferencia, vinculadas a un correo electr\u00f3nico de confirmaci\u00f3n en geeked.[.]Wtf y un identificador de Discord. Noventa de los 93 nombres de host de implementaci\u00f3n que encontr\u00f3 se resolvieron en una direcci\u00f3n IP, 92.38.177[.]17, organizado por G-Core Labs.<\/p>\n<p>Entre los nombres de los paquetes juveniles, un script de shell de publicaci\u00f3n autom\u00e1tica dejado dentro de los archivos comprimidos y un comentario \u00abTY WAVES + CHATGPT ILY\u00bb que SafeDep encontr\u00f3 en el trabajador del servicio, ambas empresas leen al operador como joven. Una cuenta envi\u00f3 116 paquetes en menos de 35 minutos y npm no hizo nada para ralentizarlo.<\/p>\n<div class=\"dog_two clear\">\n<div class=\"cf\"><a href=\"https:\/\/thehackernews.uk\/sygnia-cyber-response-d-2\" rel=\"nofollow noopener sponsored\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" class=\"lazyload\" alt=\"Ciberseguridad\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjHcvlLVmAqlffm6kG54_0cGVf8WfcgzqT9B0fBSizSSeIjh8tBepXnrf6BMqKiG344WgqNejcRtEFKT1PmOzQNQBhdmu2iz9Po10z0SSDlFuZ37iip2uYibJDoxTEkbUI7Bx8NJM2Io_z_nl5p4YA-ZhqFLfi0GW1axyu-lQx-iytCn9RGSJ2iqCwdyv8m\/s1600\/sy-d-2.jpg\" width=\"729\" height=\"91\"\/><\/a><\/div>\n<\/div>\n<p>El historial de confirmaciones de JFrog describe el arco. El proyecto comenz\u00f3 como simple adware en marzo, agreg\u00f3 el cargador remoto y el generador Wisp en una r\u00e1faga de dos d\u00edas a mediados de mayo, ejecut\u00f3 la inundaci\u00f3n en vivo contra la escuela de enfermer\u00eda a fin de mes y luego elimin\u00f3 los m\u00f3dulos maliciosos nuevamente el 31 de mayo cuando comenzaron los informes.<\/p>\n<p>Una segunda ola el 8 de julio, bajo una nueva cuenta, elev\u00f3 el total a 148 paquetes y envi\u00f3 la versi\u00f3n limpia y solo con publicidad. La aplicaci\u00f3n todav\u00eda est\u00e1 ofuscada, todav\u00eda carga scripts de terceros desde dominios de atacantes y el cargador todav\u00eda apunta a una rama mutable. La capacidad DDoS no ha desaparecido, s\u00f3lo est\u00e1 desactivada. JFrog se\u00f1ala que los operadores conservan la capacidad de rearmarlo: un compromiso con esa rama mutable, no se requiere actualizaci\u00f3n del paquete.<\/p>\n<p>Desde entonces, muchos de los paquetes de la campa\u00f1a han sido retirados de npm y reemplazados con el marcador de posici\u00f3n de seguridad est\u00e1ndar 0.0.1 del registro. Una verificaci\u00f3n aleatoria realizada por The Hacker News en todas las familias de paquetes el 14 de julio de 2026 encontr\u00f3 que la mayor\u00eda hab\u00eda desaparecido, pero charlie-kirk a\u00fan ofrec\u00eda las dos versiones que JFrog marc\u00f3 como maliciosas, 2.0.0 y 3.0.1.<\/p>\n<p>Debido a que la amenaza se env\u00eda como una aplicaci\u00f3n web del lado del cliente en lugar de un implante en el momento de la instalaci\u00f3n, la soluci\u00f3n de JFrog sigue el m\u00e9todo de entrega.<\/p>\n<p>Los administradores de redes escolares y corporativas, donde estos servidores proxy atraen la mayor cantidad de tr\u00e1fico, deber\u00edan bloquear los dominios de la campa\u00f1a a nivel de DNS. La monetizaci\u00f3n y los hosts de secuencias de comandos que a\u00fan alcanza la versi\u00f3n actual, entre ellos woofbeginner[.]com y c.vipersfutbol[.]com, son los que deben bloquear primero.<\/p>\n<p>Cualquiera que haya cargado uno de los sitios proxy debe borrar el cach\u00e9 del navegador y el almacenamiento local y cancelar el registro de cualquier trabajador de servicio dejado por un dominio de tutor\u00eda o proxy. Los equipos cuyos entornos de compilaci\u00f3n obtuvieron los paquetes nombrados deben extraerlos de los manifiestos y archivos de bloqueo y reconstruirlos de forma limpia. El art\u00edculo de JFrog incluye la lista completa de 148 paquetes, dominios, direcciones IP y hashes.<\/p>\n<p>The Hacker News se comunic\u00f3 con JFrog para obtener m\u00e1s detalles sobre la escala de la botnet y si el ataque WebSocket se ejecut\u00f3 contra un objetivo vivo, y actualizar\u00e1 esta historia con cualquier respuesta.<\/p>\n<p>Los esc\u00e1neres de dependencias y los entornos sandbox en el momento de la instalaci\u00f3n est\u00e1n dise\u00f1ados para detectar el c\u00f3digo que se ejecuta en npm install. Este c\u00f3digo nunca solicit\u00f3 ser instalado. Mientras los registros p\u00fablicos funcionen como CDN gratuitos, es posible que los paquetes por los que vale la pena preocuparse sean cada vez m\u00e1s aquellos que ning\u00fan proceso de construcci\u00f3n jam\u00e1s obtenga.<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Una campa\u00f1a de paquetes de 148 npm disfrazados de servidores proxy web para estudiantes convirti\u00f3 los navegadores de los visitantes en una botnet distribuida de denegaci\u00f3n de servicio durante aproximadamente dos semanas en mayo, seg\u00fan una nueva investigaci\u00f3n de JFrog. Los paquetes no persegu\u00edan a los desarrolladores que podr\u00edan instalarlos. Los operadores utilizaron el registro [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1379,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[25,5],"tags":[173,3745,24,445,3744,1823,52,212,277,276,36,88,87,132],"class_list":["post-1530","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-noticias","category-trending","tag-botnet","tag-convirtieron","tag-cyberdefensa-mx","tag-ddos","tag-disfrazados","tag-estudiantes","tag-los","tag-navegadores","tag-npm","tag-paquetes","tag-para","tag-proxy","tag-servidores","tag-una"],"_links":{"self":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/posts\/1530","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/comments?post=1530"}],"version-history":[{"count":0,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/posts\/1530\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/media\/1379"}],"wp:attachment":[{"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/media?parent=1530"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/categories?post=1530"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/cybercolombia.co\/index.php\/wp-json\/wp\/v2\/tags?post=1530"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}