Durante el último año, @pewdiepie se ha convertido en uno de los defensores más visibles de la computación privada y autoalojada, y ha sido un auténtico placer verlo.
Lo que comenzó a finales de 2025 como un experimento entretenido —un equipo casero con GPUs modificadas ejecutando modelos de código abierto, chatbots votando en un "consejo", y poder de cómputo sobrante donado a la investigación de plegamiento de proteínas— maduró a lo largo de aproximadamente doce meses hasta convertirse en algo con una misión clara.
El 31 de mayo de 2026 llegó como Odysseus, un espacio de trabajo de IA gratuito, de código abierto y autoalojado que presentó sin rodeos como un desafío al modelo de suscripción: priorizando lo local, priorizando la privacidad, sin telemetría, y con tus datos permaneciendo en tu propio hardware en lugar de fluir hacia un puñado de grandes empresas.
Para alguien con su alcance, poner la inferencia local frente a una audiencia general y no técnica es el tipo de cosa que el mundo de la privacidad ha deseado durante años, y estoy apoyándolo.
También soy la persona que, probando mi propia implementación autorizada, encontró una forma de tomar el control de uno de estos servidores con un solo clic. Ambas cosas no están en contradicción. Un software tan ambicioso, lanzado tan rápido, en una categoría tan nueva, es exactamente donde viven los bugs de seguridad interesantes, y encontrarlos temprano es cómo el proyecto logra ser confiable después.
Así que, con espíritu de ayuda, aquí está la cadena completa, explicada desde cero, junto con lo que dice sobre el momento que estamos construyendo.
una puerta sin cerradura, y un puerto que solo parecía inofensivo
Odysseus puede delegar trabajos pesados a máquinas GPU remotas a las que accede mediante SSH, la forma estándar en que un ordenador ejecuta comandos en otro.
Por lo tanto, algunos de sus endpoints internos pueden tocar un shell de comandos —la línea de comandos en bruto donde, si puedes acceder a ella, puedes hacer que la máquina haga casi cualquier cosa.
Sensatamente, casi todos esos endpoints comienzan verificando que quien llama sea un administrador.
La excepción es un endpoint pequeño y silencioso cuya función es listar qué paquetes de Python están instalados en un servidor remoto, y esa excepción es donde todo se desmorona.
El primer problema es que este endpoint nunca recibe la información que necesitaría para identificar a quien lo llama, por lo que no realiza ninguna verificación de administrador y no puede hacerlo, ni siquiera en principio.
Lo único que lo protege es la regla general de la aplicación de que debes haber iniciado sesión, lo que significa que cualquier cuenta —incluyendo una que un desconocido registró hace un minuto— puede acceder a una puerta que toca el shell y que todos los endpoints hermanos protegen cuidadosamente.

La causa raíz estructural: un manejador que no puede ver quién llama no puede hacer cumplir quién está autorizado, como se ve a continuación.

Por sí solo, eso podría ser superable, pero hay un segundo problema en cómo este endpoint hace su trabajo real, y es el corazón de todo el ataque.
Para averiguar qué paquetes tiene instalados una máquina remota, el programa escribe una instrucción como una sola línea de texto plano y le pasa esa línea a una parte del sistema llamada el shell, cuyo trabajo es leer la línea y ejecutarla.
La forma más fácil de imaginar el shell es como un asistente que sigue instrucciones escritas de manera completamente literal, donde algunos signos de puntuación tienen un significado especial.
El importante aquí es el punto y coma, que el shell interpreta como "esa instrucción ha terminado, ahora haz lo siguiente", por lo que una sola línea con puntos y comas se ejecuta como varios comandos en secuencia.


Debido a esto, los programas cuidadosos toman cualquier cosa que una persona haya escrito y la envuelven entre comillas antes de pasarla al shell —la forma de indicarle al shell que trate esos caracteres como texto ordinario sin poder para ejecutarse como comandos.
El desarrollador hizo esto correctamente para el nombre del servidor y para el comando que se enviaba, por lo que esas entradas eran seguras.
Sin embargo, el número de puerto se colocó en la línea sin protección, sin comillas, basándose en la suposición aparentemente razonable de que un puerto siempre es solo un número y un número no puede hacer daño. (La ruta del entorno virtual se concatenó de la misma manera sin comillas, por la misma razón.)
El fallo en la suposición es que el puerto no tiene que ser un número. Llega como texto plano extraído directamente de la dirección web, y quien hace la solicitud decide lo que dice.
Así que, en lugar de 22, un atacante escribe 22; id; hostname #.
El shell lee la primera parte, intenta conectarse y falla inofensivamente, luego llega al primer punto y coma y obedientemente ejecuta los dos comandos del atacante, mientras que el # al final le indica que ignore el texto sobrante que debería seguir.

Un punto y coma convierte "listar paquetes en una máquina remota" en "ejecutar mis comandos en esta máquina".
Para llegar a él no se necesita nada más exótico que una sesión iniciada y una dirección web manipulada:

La solicitud devuelve HTTP 200 con el JSON normal de paquetes —mientras que los comandos inyectados se ejecutan en el lado del servidor.
Los comandos que introduje eran sondas inofensivas, y cuando su salida regresó nombrando la cuenta de servicio del propio servidor, confirmó que mis instrucciones se habían ejecutado en la máquina misma.

Junta los dos fallos y la imagen local cabe en una frase: cualquier usuario que haya iniciado sesión puede ejecutar comandos de su elección en el servidor.
El riesgo de escala se ve agudizado por la misma característica que hace a Odysseus emocionante.
Si un creador con cien millones de suscriptores consigue incorporar a una audiencia grande y no técnica al autoalojamiento, el resultado son miles de instancias similares, configuradas de forma similar y expuestas de forma similar, lo que es un monocultivo, y los monocultivos son lo que aman los gusanos informáticos.
@ashnichrist lo expresó bien.
convirtiéndolo en un solo clic
Un bug que "cualquier usuario que haya iniciado sesión" puede activar aún suena como si necesitara un insider malicioso, y el siguiente paso es lo que elimina incluso ese requisito, porque hace que el propio navegador de la víctima ejecute el ataque.
La técnica es la falsificación de petición en sitios cruzados (CSRF), y se aprovecha de un hábito silencioso del navegador.
Una vez que inicias sesión en un sitio, tu navegador almacena un pequeño token y luego lo adjunta automáticamente a las solicitudes dirigidas a ese sitio, basándose puramente en el destino de la solicitud, sin importar qué página la haya iniciado.

Odysseus configuró ese token con la política SameSite=Lax, que es el valor predeterminado razonable y bloquea que el token viaje en solicitudes de fondo sigilosas —sin embargo, deliberadamente aún lo envía en una navegación de nivel superior, lo que significa un clic ordinario que mueve toda tu pestaña a algún lugar.
Dado que el endpoint vulnerable responde a un enlace simple, no realiza ninguna verificación de dónde se originó una solicitud y no utiliza ningún token anti-falsificación, un atacante solo tiene que alojar una página con un botón atractivo.
Para la demostración, construí exactamente eso: una página alegre, amigable para niños y, lo más importante, una página tributo a CoComelon precisa con la tradición —colores de canciones infantiles, Comic Sans, un gran botón de "reproducir".

El botón no es un enlace a una canción. Su manejador de clic abre el objetivo real en una pequeña ventana emergente desechable, por lo que la solicitud maliciosa ocurre como una navegación de nivel superior —llevando la cookie de sesión SameSite=Lax— sin robar el foco, y luego se cierra automáticamente un momento después. La dirección que abre es simplemente el endpoint de paquetes con el comando introducido de contrabando en el "puerto":

Mientras ese clic aterriza, la página señuelo monta un espectáculo para la cámara: el arte de CoComelon parpadea en la pantalla como un fogonazo, y una terminal se escribe a sí misma narrando cada paso de la toma de control. (El texto de la terminal es una narración escenificada para la demostración; la ejecución real es la solicitud silenciosa que acaba de hacer la ventana emergente.)

Para hacer el impacto concreto, ese solo clic hizo tres cosas: reescribió la interfaz servida para una desfiguración visual obvia (una superposición de pantalla completa "🍉 tu Odysseus ha sido CoComelon-d 🍉", iconos de sandía, la aplicación renombrada), leyó todo lo que el usuario del servicio podía leer, y —lo más duradero— escribió una cuenta de administrador oculta directamente en el auth.json de la aplicación.

El aguijón: un reinicio limpia el desorden obvio pero mantiene la cuenta del atacante.
Aquí hay una demostración en vivo.
por qué este es el peor tipo de bug en una herramienta agentica
La razón por la que un compromiso de una sola instancia debería preocuparte en 2026 es que rara vez es donde se detienen estas cosas, y el gusano que definió el año muestra por qué.
Shai-Hulud, el gusano npm autopropagante visto por primera vez en septiembre de 2025 y que ha regresado en oleadas más grandes desde entonces, ejecuta un bucle brutalmente simple: un script malicioso en el momento de la instalación se ejecuta en el momento en que se instala un paquete, escanea la máquina en busca de secretos como tokens de npm y GitHub, claves SSH y credenciales en la nube, y luego usa esas credenciales robadas para publicar versiones con puerta trasera de otros paquetes de la víctima, por lo que cada nueva instalación se convierte en el siguiente punto de lanzamiento sin más esfuerzo por parte del atacante.
La lección que vale la pena recordar es que el trabajo más difícil de un gusano es cosechar credenciales y encontrar una forma de llegar a la siguiente máquina.
Un asistente de IA agentico le entrega a un gusano
ambas
cosas gratis, porque mantener secretos poderosos y comunicarse con otras máquinas es todo su propósito.
El solo clic contra Odysseus produjo mucho más que ejecución de código. Entregó un cofre previamente recolectado de claves API almacenadas, la base de datos, la configuración y el acceso SSH que la herramienta usa para iniciar sesión en los servidores GPU remotos que gestiona. Ese es exactamente el combustible del que se alimenta un ataque autopropagante, sentado en un solo lugar con la etiqueta hacia afuera, y el manual para usarlo ya existe en la naturaleza.

lo que todo esto significa
Lo que más me llama la atención es que el bug que realmente tomó el servidor es antiguo. La inyección de comandos y la falsificación de peticiones tienen soluciones de libro de texto que un desarrollador en 2005 reconocería, y estaban viviendo dentro de uno de los software de IA de consumo más avanzados del momento —que es el patrón en toda la industria este año, donde las vulnerabilidades de IA más destacadas resultan ser fallos clásicos sentados dentro de herramientas nuevas y brillantes.
La frontera dejó esos fundamentos en pleno vigor, luego apiló una capa poderosa, rápida y a menudo demasiado confiada sobre ellos, y conectó esa capa a todo lo que posees.

el timbre que aún no estaba instalado
Hay un detalle más del que vale la pena aprender, porque es la parte que menos tiene que ver con el código.
Cuando fui a reportar esto por primera vez, había una política de seguridad en el repositorio —una bien pensada, con una guía de implementación sensata.
Pero su sección de reporte indicaba a los posibles informantes que usaran "GitHub security advisories if available", y al principio ese canal privado simplemente no estaba abierto.
Lo más sensible que un desconocido podía encontrar sobre el proyecto no tenía un lugar privado donde aterrizar. Esa brecha se ha cerrado desde entonces —la cadena de inyección de comandos ahora está rastreada por un aviso crítico, y las correcciones están fusionadas— pero la ausencia inicial es la señal reveladora.
Afortunadamente, pude hablar con uno de los mantenedores, quien habilitó la función de avisos —y desde entonces he presentado varias otras correcciones.

Pero todo eso aparte... es una señal de los tiempos.
Los proyectos pasan ahora de ser un pasatiempo en una GPU casera a una audiencia de cien millones de personas en el lapso de un solo anuncio, y el andamiaje de seguridad —una bandeja de entrada privada para malas noticias, un flujo de trabajo de avisos, el hábito de tratar la salida del modelo como hostil— va detrás del código, que a su vez va detrás de la audiencia.
Ese orden es precisamente el inverso de lo que un adversario necesita.
Una base de fans grande, confiada y mayoritariamente no técnica instalando el mismo software en la misma semana, señalados por alguien en quien ya confían, es el objetivo más atractivo que existe: enorme, uniforme y ya predispuesto.
Es exactamente el monocultivo que un gusano desea, con la alfombra de bienvenida ya puesta.
Así que la parte alentadora de esta historia no es que el código fuera perfecto —no lo era— sino que el proyecto instaló el timbre y envió las correcciones en aproximadamente un día desde que escuchó el golpe.
Para un software que se mueve tan rápido, frente a una audiencia de este tamaño, ese reflejo —abrir un canal privado, responder rápidamente, corregir abiertamente— vale más que haber tenido un historial impecable desde el principio. Es, al final, cómo se gana realmente la confianza en el autoalojamiento.
Por ahora... ¡eso es todo, amigos!

https://x.com/Grummz/status/2061300454907371953
https://x.com/ashnichrist/status/2061481763516399737





