{"id":1201,"date":"2026-11-04T08:30:00","date_gmt":"2026-11-04T07:30:00","guid":{"rendered":"https:\/\/rosmarops.com\/es\/?p=1201"},"modified":"2026-11-04T12:19:23","modified_gmt":"2026-11-04T11:19:23","slug":"servidores-mcp-de-markdown-que-buscaban-credenciales-en-la-nube","status":"publish","type":"post","link":"https:\/\/rosmarops.com\/es\/blog\/servidores-mcp-de-markdown-que-buscaban-credenciales-en-la-nube\/","title":{"rendered":"Los servidores MCP de Markdown que buscaban credenciales en la nube"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Voy a\u00f1adiendo herramientas a mis agentes de IA seg\u00fan las necesito. Un servidor MCP para trabajar con documentos, otro para consultar informaci\u00f3n, otro para conectar alg\u00fan servicio. Una l\u00ednea en la configuraci\u00f3n, compruebas que funciona y sigues con lo tuyo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero hay una diferencia importante entre instalar una herramienta y saber lo que hace cuando se ejecuta.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El 2 de noviembre, la base p\u00fablica de paquetes maliciosos de OpenSSF registr\u00f3 cuatro paquetes npm que se presentaban como servidores MCP para trabajar con Markdown. Promet\u00edan generar \u00edndices, contar palabras y dar formato a tablas. Funciones bastante corrientes, que dif\u00edcilmente despiertan sospechas.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los nombres eran casi id\u00e9nticos:<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><code>@ifasn\/md-doc-mcp<\/code>, <code>@ifasn\/mdd-doc-mcp<\/code>, <code>@ifasn\/mmd-doc-mcp<\/code> y <code>@ifasn\/mmdd-doc-mcp<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El an\u00e1lisis de Amazon Inspector, recogido en las fichas p\u00fablicas, muestra que ejecutaban c\u00f3digo que ten\u00eda muy poco que ver con Markdown.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Qu\u00e9 hac\u00edan los paquetes <code>@ifasn<\/code> al arrancar<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Los cuatro consultaban servicios de metadatos de la nube: dos, los de AWS, Google Cloud, Azure y Alibaba Cloud; los otros dos, solo el de Alibaba Cloud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Estos servicios permiten que una m\u00e1quina virtual conozca informaci\u00f3n sobre s\u00ed misma. Tambi\u00e9n pueden proporcionar credenciales temporales asociadas al rol que tiene asignado. Son credenciales que una aplicaci\u00f3n puede utilizar para acceder a otros recursos de la infraestructura.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dos de los paquetes intentaban leer esas credenciales de Alibaba Cloud y guardarlas en archivos locales. Otro enviaba a un servidor externo las respuestas obtenidas al consultar los servicios de metadatos. Un cuarto transmit\u00eda los c\u00f3digos de respuesta, informaci\u00f3n suficiente para identificar caracter\u00edsticas del entorno y averiguar si hab\u00eda determinados roles disponibles.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Las comunicaciones salientes documentadas utilizaban HTTP sin cifrar y ten\u00edan como destino la IP <code>121.199.24.94<\/code>, directamente o mediante un alias de nip.io.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Hab\u00eda m\u00e1s. Una de las variantes inclu\u00eda scripts que buscaban archivos especialmente sensibles: claves SSH privadas, ficheros <code>.env<\/code>, el fichero de contrase\u00f1as del sistema (<code>\/etc\/shadow<\/code>) y tokens de Kubernetes. Otra descargaba una dependencia desde un servidor HTTP externo, sin una comprobaci\u00f3n de integridad que fijara su contenido.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los servicios de metadatos solo responden dentro de una m\u00e1quina en la nube: en un port\u00e1til, esas consultas no devuelven credenciales. La descarga de esa dependencia, en cambio, ocurre en cualquier ordenador donde se instale el paquete, y npm ejecuta los scripts de instalaci\u00f3n que traiga.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Los comentarios del c\u00f3digo describ\u00edan estas operaciones como tareas de sincronizaci\u00f3n de configuraci\u00f3n empresarial o comprobaciones de salud.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nada de eso era necesario para contar palabras o generar un \u00edndice de Markdown.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Conviene distinguir lo que sabemos de lo que no. Las fichas documentan el comportamiento del c\u00f3digo y las versiones afectadas. No sabemos cu\u00e1ntas personas instalaron estos paquetes, cu\u00e1ntos llegaron a ejecutarlos ni si hubo v\u00edctimas. Tampoco ser\u00eda correcto afirmar que los cuatro enviaban credenciales robadas al exterior.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Un servidor MCP es un programa, no un documento<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Est\u00e1 en c\u00f3mo incorporamos herramientas a los agentes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un servidor MCP local no es un documento que Claude Code, Cursor u otro agente se limita a leer. Es un programa que se ejecuta en tu ordenador o en otro entorno de trabajo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Dependiendo de c\u00f3mo est\u00e9 configurado, ese proceso puede tener acceso a tus archivos, variables de entorno, credenciales y conexiones de red. No necesita que el agente decida buscar una clave: puede hacerlo por su cuenta cuando se inicia.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Y aqu\u00ed aparece algo que me preocupa especialmente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Cuando revisamos la configuraci\u00f3n de un agente, normalmente vemos el nombre del servidor, el comando que lo arranca y poco m\u00e1s. Podemos saber que hemos conectado una herramienta para Markdown. Eso no nos dice si el c\u00f3digo tambi\u00e9n consulta credenciales de la nube.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>El nombre explica para qu\u00e9 se supone que sirve una herramienta. No demuestra lo que hace.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Adem\u00e1s, muchos servidores MCP se ejecutan mediante <code>npx<\/code> o mecanismos similares. Si no se fija una versi\u00f3n concreta, una ejecuci\u00f3n posterior puede resolver una versi\u00f3n diferente del paquete. La cach\u00e9 y la configuraci\u00f3n influyen en ese comportamiento; no significa que se descargue siempre la \u00faltima versi\u00f3n en cada arranque.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pero s\u00ed significa que haber revisado una herramienta una vez no garantiza que estemos ejecutando exactamente el mismo c\u00f3digo semanas despu\u00e9s.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3mo revisar los servidores MCP de tus agentes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">No hace falta esperar a que aparezca otro caso como este para hacer algunas comprobaciones:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Revisa qu\u00e9 servidores MCP tienes configurados.<\/strong> No solo en la configuraci\u00f3n global de cada agente, sino tambi\u00e9n en los proyectos. Un mismo agente puede arrancar herramientas distintas dependiendo del directorio en el que trabaja.<\/li>\n\n\n<li><strong>Comprueba c\u00f3mo se ejecutan.<\/strong> Mira los comandos, el origen de los paquetes y sus versiones. Fijar una versi\u00f3n ayuda a evitar cambios inesperados, aunque no demuestra que el paquete sea fiable.<\/li>\n\n\n<li><strong>Busca los paquetes afectados.<\/strong> Comprueba si aparece alg\u00fan <code>@ifasn\/<\/code> en las configuraciones o dependencias. Si encuentras uno de los cuatro paquetes identificados, desact\u00edvalo y trata la instalaci\u00f3n como un posible incidente: revisa qu\u00e9 pudo ejecutar y a qu\u00e9 credenciales tuvo acceso. Si hay riesgo de exposici\u00f3n, revoca o rota las credenciales desde un entorno limpio.<\/li>\n\n\n<li><strong>Si trabajas en infraestructura cloud, revisa los permisos del entorno.<\/strong> Comprueba qu\u00e9 roles tiene asignados, si el proceso puede consultar el servicio de metadatos y qu\u00e9 conexiones salientes permite.<\/li>\n\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Ninguna de estas comprobaciones sustituye una auditor\u00eda del c\u00f3digo. Pero ayuda a descubrir herramientas que hemos incorporado y de las que ya ni nos acordamos.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Saber qu\u00e9 has conectado a tus agentes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Este caso me interesa porque refleja una situaci\u00f3n que reconozco en mi propia forma de trabajar: los agentes acumulan herramientas, permisos y conexiones con mucha m\u00e1s facilidad de la que tenemos para revisarlos.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Es una de las razones por las que empec\u00e9 a construir <a href=\"https:\/\/rosmarops.com\/es\/\">RosmarOps<\/a>. Quer\u00eda poder ver qu\u00e9 tienen configurado mis agentes, qu\u00e9 pueden leer y modificar y d\u00f3nde est\u00e1n los l\u00edmites de esos permisos. RosmarOps hace ese an\u00e1lisis en tu ordenador, y nada sale de tu equipo sin que t\u00fa lo apruebes.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">No es un detector de malware. Desde la versi\u00f3n 0.7.3 reconoce estos cuatro paquetes cuando un agente los arranca con una versi\u00f3n fijada o cuando est\u00e1n instalados de forma global. Si la orden no fija versi\u00f3n, no puede saber qu\u00e9 c\u00f3digo va a ejecutarse, y lo que no se ley\u00f3 no cuenta como limpio.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">El caso deja una pregunta bastante concreta: \u00bfcu\u00e1ntos programas estamos ejecutando a trav\u00e9s de nuestros agentes sin haber comprobado qu\u00e9 hacen realmente?<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fuentes<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">An\u00e1lisis de Amazon Inspector, publicados en la base de paquetes maliciosos de OpenSSF\/OSV el 2 de noviembre de 2026:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/osv.dev\/vulnerability\/MAL-2026-18486\">MAL-2026-18486 \u2014 @ifasn\/md-doc-mcp<\/a><\/li>\n\n\n<li><a href=\"https:\/\/osv.dev\/vulnerability\/MAL-2026-18487\">MAL-2026-18487 \u2014 @ifasn\/mdd-doc-mcp<\/a><\/li>\n\n\n<li><a href=\"https:\/\/osv.dev\/vulnerability\/MAL-2026-18488\">MAL-2026-18488 \u2014 @ifasn\/mmd-doc-mcp<\/a><\/li>\n\n\n<li><a href=\"https:\/\/osv.dev\/vulnerability\/MAL-2026-18489\">MAL-2026-18489 \u2014 @ifasn\/mmdd-doc-mcp<\/a><\/li>\n\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Documentaci\u00f3n t\u00e9cnica: <a href=\"https:\/\/docs.npmjs.com\/cli\/v12\/commands\/npm-exec\/\">npm exec y comportamiento de npx<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>El 2 de noviembre, la base p\u00fablica de paquetes maliciosos de OpenSSF registr\u00f3 cuatro paquetes npm que se presentaban como servidores MCP para trabajar con Markdown.<\/p>\n","protected":false},"author":1,"featured_media":1204,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"rosmarops_translation_url":"","rosmarops_url_en":"","rosmarops_url_es":"","rosmarops_url_ca":"","footnotes":"","_genesis_title":"Cuatro servidores MCP maliciosos en npm buscaban credenciales en la nube","_genesis_description":"El 2 de noviembre, la base p\u00fablica de paquetes maliciosos de OpenSSF registr\u00f3 cuatro paquetes npm que se presentaban como servidores MCP para trabajar con Markdown.","_tsf_title_no_blogname":""},"categories":[333],"tags":[319,322,325,214],"class_list":["post-1201","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-que-puede-hacer-tu-agente","tag-claude-code","tag-credenciales","tag-cursor","tag-mcp"],"_links":{"self":[{"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/posts\/1201","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/comments?post=1201"}],"version-history":[{"count":2,"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/posts\/1201\/revisions"}],"predecessor-version":[{"id":1203,"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/posts\/1201\/revisions\/1203"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/media\/1204"}],"wp:attachment":[{"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/media?parent=1201"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/categories?post=1201"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rosmarops.com\/es\/wp-json\/wp\/v2\/tags?post=1201"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}