[{"data":1,"prerenderedAt":632},["ShallowReactive",2],{"switcher-blog-pareja":3,"art-pcpjack-servidores-cloud-relay-smtp-es":6},{"es":4,"en":5},"\u002Fes\u002Fblog\u002Fpcpjack-servidores-cloud-relay-smtp\u002F","\u002Fen\u002Fblog\u002Fpcpjack-cloud-servers-smtp-relay\u002F",{"id":7,"title":8,"author":9,"body":10,"date":617,"description":618,"extension":619,"image":620,"meta":621,"navigation":215,"pareja":622,"path":623,"seo":624,"stem":625,"tags":626,"__hash__":631},"blogEs\u002Fes\u002Fblog\u002Fpcpjack-servidores-cloud-relay-smtp.md","PCPJack: el gusano que convierte servidores en la nube en una red oculta de spam","Paco Cubel",{"type":11,"value":12,"toc":598},"minimark",[13,18,31,46,50,61,68,72,79,113,116,120,123,154,158,161,166,240,247,251,298,317,321,424,428,435,439,471,475,482,523,526,530,537,541,548,552,555,558,562,594],[14,15,17],"h2",{"id":16},"un-vecino-que-limpia-la-casa-antes-de-okuparla","Un vecino que limpia la casa antes de okuparla",[19,20,21,22,26,27,30],"p",{},"Cada cierto tiempo aparece una campaña que merece que pares y mires tus servidores. Esta semana le toca a ",[23,24,25],"strong",{},"PCPJack",", un gusano descubierto por los investigadores de SentinelOne que tiene un detalle casi cómico: antes de instalarse en una máquina comprometida, ",[23,28,29],{},"expulsa al inquilino anterior",". Busca y elimina las infecciones de otro grupo (TeamPCP) y se queda él la casa.",[19,32,33,34,37,38,41,42,45],{},"Lo que hace después no tiene ninguna gracia: roba credenciales y convierte el servidor en un nodo más de una ",[23,35,36],{},"red oculta de relay SMTP",". Es decir, ",[23,39,40],{},"tu servidor mandando correo para otros"," —spam, phishing— con tu IP y tu reputación. Ya van ",[23,43,44],{},"más de 230 servidores"," secuestrados entre AWS, Google Cloud y Azure.",[14,47,49],{"id":48},"en-una-frase","En una frase",[19,51,52,53,56,57,60],{},"PCPJack busca servicios mal expuestos, entra, ",[23,54,55],{},"roba todas las credenciales que encuentra"," (de la nube, de contenedores, de herramientas de desarrollo), intenta propagarse a más máquinas como un gusano y, de paso, monta sobre el servidor un ",[23,58,59],{},"proxy de correo"," que sincroniza con su red cada pocos minutos para repartir el envío.",[19,62,63,64,67],{},"No necesita un 0-day exótico: vive de ",[23,65,66],{},"lo que dejamos abierto",".",[14,69,71],{"id":70},"cómo-entra","Cómo entra",[19,73,74,75,78],{},"Aquí está la lección de verdad. PCPJack no fuerza nada sofisticado; ",[23,76,77],{},"aprovecha servicios expuestos a internet que no deberían estarlo",":",[80,81,82,89,95,101,107],"ul",{},[83,84,85,88],"li",{},[23,86,87],{},"Docker"," con la API expuesta sin autenticación.",[83,90,91,94],{},[23,92,93],{},"Kubernetes"," con el API server o el kubelet accesibles.",[83,96,97,100],{},[23,98,99],{},"Redis"," sin contraseña.",[83,102,103,106],{},[23,104,105],{},"MongoDB"," abierto.",[83,108,109,110,67],{},"Plataformas de ML (RayML) y ",[23,111,112],{},"aplicaciones web vulnerables",[19,114,115],{},"¿Te suena la lista? Es exactamente la colección de \"lo dejé abierto un momento para probar\" que acaba quedándose abierta para siempre. Una vez dentro, recolecta credenciales de servicios cloud, contenedores, herramientas de desarrollo e incluso financieras, y las exfiltra a infraestructura del atacante.",[14,117,119],{"id":118},"por-qué-el-relay-smtp-es-tan-dañino","Por qué el relay SMTP es tan dañino",[19,121,122],{},"Que usen tu servidor para enviar correo no es \"solo molesto\":",[124,125,126,132,138,148],"ol",{},[83,127,128,131],{},[23,129,130],{},"Tu IP acaba en listas negras."," El día que necesites que tu propio correo legítimo llegue, irá directo a spam. Recuperar reputación de IP es lento y tedioso.",[83,133,134,137],{},[23,135,136],{},"Consume tus recursos y tu factura."," Ancho de banda y cómputo que pagas tú para que otro haga campañas.",[83,139,140,143,144,67],{},[23,141,142],{},"Te puede meter en problemas legales."," El spam y el phishing salen, a ojos de todo el mundo, ",[145,146,147],"em",{},"desde tu servidor",[83,149,150,153],{},[23,151,152],{},"Si te roban las credenciales cloud, el relay es lo de menos."," Con tus llaves de AWS\u002FGCP\u002FAzure pueden levantar más máquinas, escalar el gasto y moverse lateralmente.",[14,155,157],{"id":156},"cómo-saber-si-tu-servidor-está-afectado","Cómo saber si tu servidor está afectado",[19,159,160],{},"Sin alarmismo, pero con método. Revisa:",[162,163,165],"h3",{"id":164},"_1-estás-emitiendo-correo-que-no-deberías","1. ¿Estás emitiendo correo que no deberías?",[167,168,173],"pre",{"className":169,"code":170,"language":171,"meta":172,"style":172},"language-bash shiki shiki-themes github-light github-dark","# Conexiones salientes al puerto 25 (SMTP) desde tu servidor\nsudo ss -tnp | grep ':25'\n\n# Cola de correo inusualmente llena (si tienes Postfix)\nmailq | tail -n 1\n","bash","",[174,175,176,185,210,217,223],"code",{"__ignoreMap":172},[177,178,181],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"sJ8bj","# Conexiones salientes al puerto 25 (SMTP) desde tu servidor\n",[177,186,188,192,196,200,204,207],{"class":179,"line":187},2,[177,189,191],{"class":190},"sScJk","sudo",[177,193,195],{"class":194},"sZZnC"," ss",[177,197,199],{"class":198},"sj4cs"," -tnp",[177,201,203],{"class":202},"szBVR"," |",[177,205,206],{"class":190}," grep",[177,208,209],{"class":194}," ':25'\n",[177,211,213],{"class":179,"line":212},3,[177,214,216],{"emptyLinePlaceholder":215},true,"\n",[177,218,220],{"class":179,"line":219},4,[177,221,222],{"class":183},"# Cola de correo inusualmente llena (si tienes Postfix)\n",[177,224,226,229,231,234,237],{"class":179,"line":225},5,[177,227,228],{"class":190},"mailq",[177,230,203],{"class":202},[177,232,233],{"class":190}," tail",[177,235,236],{"class":198}," -n",[177,238,239],{"class":198}," 1\n",[19,241,242,243,246],{},"Un servidor que ",[23,244,245],{},"no es un servidor de correo"," no tiene por qué estar abriendo conexiones salientes al puerto 25 a destinos raros. Si las ves, mala señal.",[162,248,250],{"id":249},"_2-tienes-servicios-abiertos-que-no-recuerdas","2. ¿Tienes servicios abiertos que no recuerdas?",[167,252,254],{"className":169,"code":253,"language":171,"meta":172,"style":172},"# Qué está escuchando y en qué interfaz\nsudo ss -tlnp\n\n# ¿La API de Docker está expuesta?\nsudo ss -tlnp | grep -E ':2375|:2376'\n",[174,255,256,261,270,274,279],{"__ignoreMap":172},[177,257,258],{"class":179,"line":180},[177,259,260],{"class":183},"# Qué está escuchando y en qué interfaz\n",[177,262,263,265,267],{"class":179,"line":187},[177,264,191],{"class":190},[177,266,195],{"class":194},[177,268,269],{"class":198}," -tlnp\n",[177,271,272],{"class":179,"line":212},[177,273,216],{"emptyLinePlaceholder":215},[177,275,276],{"class":179,"line":219},[177,277,278],{"class":183},"# ¿La API de Docker está expuesta?\n",[177,280,281,283,285,288,290,292,295],{"class":179,"line":225},[177,282,191],{"class":190},[177,284,195],{"class":194},[177,286,287],{"class":198}," -tlnp",[177,289,203],{"class":202},[177,291,206],{"class":190},[177,293,294],{"class":198}," -E",[177,296,297],{"class":194}," ':2375|:2376'\n",[19,299,300,301,304,305,308,309,312,313,316],{},"El ",[174,302,303],{},"2375"," (Docker sin TLS) abierto a ",[174,306,307],{},"0.0.0.0"," es una puerta de entrada de manual. Redis en ",[174,310,311],{},"6379"," y Mongo en ",[174,314,315],{},"27017"," accesibles desde fuera, igual.",[162,318,320],{"id":319},"_3-procesos-y-cron-sospechosos","3. Procesos y cron sospechosos",[167,322,324],{"className":169,"code":323,"language":171,"meta":172,"style":172},"# Procesos consumiendo CPU que no reconoces\ntop -b -n1 | head -n 20\n\n# Tareas programadas inyectadas (vector clásico de persistencia)\nfor u in $(cut -f1 -d: \u002Fetc\u002Fpasswd); do crontab -l -u \"$u\" 2>\u002Fdev\u002Fnull; done\n",[174,325,326,331,352,356,361],{"__ignoreMap":172},[177,327,328],{"class":179,"line":180},[177,329,330],{"class":183},"# Procesos consumiendo CPU que no reconoces\n",[177,332,333,336,339,342,344,347,349],{"class":179,"line":187},[177,334,335],{"class":190},"top",[177,337,338],{"class":198}," -b",[177,340,341],{"class":198}," -n1",[177,343,203],{"class":202},[177,345,346],{"class":190}," head",[177,348,236],{"class":198},[177,350,351],{"class":198}," 20\n",[177,353,354],{"class":179,"line":212},[177,355,216],{"emptyLinePlaceholder":215},[177,357,358],{"class":179,"line":219},[177,359,360],{"class":183},"# Tareas programadas inyectadas (vector clásico de persistencia)\n",[177,362,363,366,370,373,376,379,382,385,388,391,394,397,400,403,406,409,412,415,418,421],{"class":179,"line":225},[177,364,365],{"class":202},"for",[177,367,369],{"class":368},"sVt8B"," u ",[177,371,372],{"class":202},"in",[177,374,375],{"class":368}," $(",[177,377,378],{"class":190},"cut",[177,380,381],{"class":198}," -f1",[177,383,384],{"class":198}," -d:",[177,386,387],{"class":194}," \u002Fetc\u002Fpasswd",[177,389,390],{"class":368},"); ",[177,392,393],{"class":202},"do",[177,395,396],{"class":190}," crontab",[177,398,399],{"class":198}," -l",[177,401,402],{"class":198}," -u",[177,404,405],{"class":194}," \"",[177,407,408],{"class":368},"$u",[177,410,411],{"class":194},"\"",[177,413,414],{"class":202}," 2>",[177,416,417],{"class":194},"\u002Fdev\u002Fnull",[177,419,420],{"class":368},"; ",[177,422,423],{"class":202},"done\n",[14,425,427],{"id":426},"qué-hacer-hoy-para-blindarte","Qué hacer hoy para blindarte",[19,429,430,431,434],{},"La defensa contra PCPJack es, casi punto por punto, ",[23,432,433],{},"higiene básica de servidor",". Lo que aplicamos nosotros:",[162,436,438],{"id":437},"cierra-lo-que-no-tiene-que-estar-abierto","Cierra lo que no tiene que estar abierto",[80,440,441,453,466],{},[83,442,443,445,446,448,449,452],{},[23,444,87],{},": nunca expongas la API (",[174,447,303],{},"\u002F",[174,450,451],{},"2376",") a internet. Usa el socket Unix local y, si necesitas acceso remoto, túnel SSH o TLS con certificados de cliente.",[83,454,455,458,459,462,463,465],{},[23,456,457],{},"Redis \u002F MongoDB",": bind solo a ",[174,460,461],{},"127.0.0.1"," si son locales, contraseña obligatoria, y firewall delante. Nunca en ",[174,464,307],{}," sin auth.",[83,467,468,470],{},[23,469,93],{},": API server no público, RBAC bien acotado, kubelet protegido.",[162,472,474],{"id":473},"bloquea-el-puerto-25-saliente-si-no-envías-correo","Bloquea el puerto 25 saliente si no envías correo",[19,476,477,478,481],{},"Si el servidor no manda correo legítimo, ",[23,479,480],{},"corta la salida al puerto 25",". Es la mitigación más directa contra que se convierta en relay:",[167,483,485],{"className":169,"code":484,"language":171,"meta":172,"style":172},"# Bloquear SMTP saliente (ajusta a tu firewall)\nsudo iptables -A OUTPUT -p tcp --dport 25 -j REJECT\n",[174,486,487,492],{"__ignoreMap":172},[177,488,489],{"class":179,"line":180},[177,490,491],{"class":183},"# Bloquear SMTP saliente (ajusta a tu firewall)\n",[177,493,494,496,499,502,505,508,511,514,517,520],{"class":179,"line":187},[177,495,191],{"class":190},[177,497,498],{"class":194}," iptables",[177,500,501],{"class":198}," -A",[177,503,504],{"class":194}," OUTPUT",[177,506,507],{"class":198}," -p",[177,509,510],{"class":194}," tcp",[177,512,513],{"class":198}," --dport",[177,515,516],{"class":198}," 25",[177,518,519],{"class":198}," -j",[177,521,522],{"class":194}," REJECT\n",[19,524,525],{},"Muchos proveedores cloud ya bloquean el 25 saliente por defecto justo por esto. Si el tuyo no, hazlo tú.",[162,527,529],{"id":528},"rota-credenciales-y-revisa-accesos","Rota credenciales y revisa accesos",[19,531,532,533,536],{},"Si encuentras cualquier indicio, ",[23,534,535],{},"asume compromiso",": rota las claves cloud (AWS\u002FGCP\u002FAzure), las de la base de datos y las de SSH, y revisa los logs de acceso y la facturación del proveedor por si hay máquinas o gasto que no reconoces.",[162,538,540],{"id":539},"pon-un-firewall-delante-de-todo","Pon un firewall delante de todo",[19,542,543,544,547],{},"La regla de oro: ",[23,545,546],{},"un servicio solo escucha hacia donde tiene que escuchar",". Si una base de datos o una API de orquestación es accesible desde internet sin necesitarlo, es cuestión de tiempo que alguien —o algún gusano— la encuentre.",[14,549,551],{"id":550},"la-lección-de-fondo","La lección de fondo",[19,553,554],{},"PCPJack no es un genio del mal: es un recolector paciente de descuidos. Cada uno de sus 230 nodos fue, en algún momento, un servicio que alguien dejó expuesto \"un momentito\". La diferencia entre estar en esa lista o no estar casi nunca es un exploit sofisticado; es un puerto cerrado, una contraseña puesta y un firewall que hace su trabajo.",[19,556,557],{},"En Atenea Systems esto es parte de la revisión rutinaria de los servidores que gestionamos: qué escucha, hacia dónde, con qué autenticación y con qué firewall delante. Si no sabes con seguridad qué tienes expuesto en tus máquinas, ese es exactamente el primer sitio donde mirar. Y si quieres que lo revisemos contigo, escríbenos.",[14,559,561],{"id":560},"referencias","Referencias",[80,563,564,573,580,587],{},[83,565,566],{},[567,568,572],"a",{"href":569,"rel":570},"https:\u002F\u002Fthehackernews.com\u002F2026\u002F06\u002Fpcpjack-hijacks-230-aws-google-cloud.html",[571],"nofollow","PCPJack Hijacks 230 AWS, Google Cloud, and Azure Servers for Covert SMTP Relay Network — The Hacker News",[83,574,575],{},[567,576,579],{"href":577,"rel":578},"https:\u002F\u002Fwww.sentinelone.com\u002Flabs\u002Fcloud-worm-evicts-teampcp-and-steals-credentials-at-scale\u002F",[571],"Cloud Worm Evicts TeamPCP and Steals Credentials at Scale — SentinelOne Labs",[83,581,582],{},[567,583,586],{"href":584,"rel":585},"https:\u002F\u002Fhunt.io\u002Fblog\u002Fpcpjack-230-cloud-servers-smtp-proxy-network-sliver-chisel",[571],"PCPJack Hijacked 230 Cloud Servers to Run a Hidden SMTP Relay Network — Hunt.io",[83,588,589],{},[567,590,593],{"href":591,"rel":592},"https:\u002F\u002Fwww.bleepingcomputer.com\u002Fnews\u002Fsecurity\u002Fnew-pcpjack-worm-steals-credentials-cleans-teampcp-infections\u002F",[571],"New PCPJack worm steals credentials, cleans TeamPCP infections — BleepingComputer",[595,596,597],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":172,"searchDepth":187,"depth":187,"links":599},[600,601,602,603,604,609,615,616],{"id":16,"depth":187,"text":17},{"id":48,"depth":187,"text":49},{"id":70,"depth":187,"text":71},{"id":118,"depth":187,"text":119},{"id":156,"depth":187,"text":157,"children":605},[606,607,608],{"id":164,"depth":212,"text":165},{"id":249,"depth":212,"text":250},{"id":319,"depth":212,"text":320},{"id":426,"depth":187,"text":427,"children":610},[611,612,613,614],{"id":437,"depth":212,"text":438},{"id":473,"depth":212,"text":474},{"id":528,"depth":212,"text":529},{"id":539,"depth":212,"text":540},{"id":550,"depth":187,"text":551},{"id":560,"depth":187,"text":561},"2026-06-05","Un gusano de robo de credenciales ha secuestrado más de 230 servidores en AWS, Google Cloud y Azure para montar una red clandestina de relay SMTP. Te contamos cómo entra, cómo saber si tu servidor es uno de sus nodos y cómo blindarte.","md","\u002Fog\u002Fog-default.png",{},"pcpjack-cloud-servers-smtp-relay","\u002Fes\u002Fblog\u002Fpcpjack-servidores-cloud-relay-smtp",{"title":8,"description":618},"es\u002Fblog\u002Fpcpjack-servidores-cloud-relay-smtp",[627,628,629,630],"Seguridad","Servidores","Cloud","Contenedores","v964wMlhmrPy2yklhdRW9qFqhkAPjOTi9h9a5CLKGjs",1781154907648]