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 verdadero 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 del plegamiento de proteínas— maduró durante 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 él presentó sin rodeos como un desafío al modelo de suscripción: prioridad local, prioridad a la privacidad, sin telemetría, con tus datos permaneciendo en tu propio hardware en lugar de fluir hacia un puñado de grandes empresas.
Que alguien con su alcance ponga 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, al probar 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 conflicto. 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 a tiempo es cómo el proyecto llega a ser confiable después.
Así que, con el espíritu de ayudar, 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 por SSH, la forma estándar en que una computadora ejecuta comandos en otra.
Por lo tanto, un puñado de sus endpoints internos pueden tocar un shell de comandos —la línea de comandos en bruto donde, si puedes acceder, 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 pequeño endpoint discreto 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 llama, por lo que no realiza ninguna verificación de administrador y no puede, 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 extraño 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á permitido, como se ve a continuación.

Por sí solo, eso podría ser sobrevivible, 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 se la pasa 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 eso, los programas cuidadosos toman cualquier cosa que una persona haya escrito y la envuelven entre comillas antes de pasársela al shell —la forma del shell de recibir la instrucción de tratar 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 estaban seguras.
El número de puerto, sin embargo, se colocó en la línea sin protección, sin comillas, bajo 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 agujero 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 se suponía debía seguir.

Un punto y coma convierte "listar paquetes en una caja remota" en "ejecutar mis comandos en esta caja".
Alcanzarlo no requiere 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 los comandos inyectados se ejecutan en el lado del servidor.
Los comandos que inserté fueron 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 oración: cualquier usuario que haya iniciado sesión puede ejecutar comandos de su elección en el servidor.
El riesgo de escala se agudiza por la misma característica que hace emocionante a Odysseus.
Si un creador con cien millones de suscriptores logra incorporar con éxito a una audiencia grande y no técnica al autoalojamiento, el resultado son miles de instancias similares, configuradas de manera similar, expuestas de manera similar, lo que es un monocultivo, y los monocultivos son lo que aman los gusanos.
@ashnichrist lo expresó bien.
convirtiéndolo en un solo clic
Un bug que "cualquier usuario que haya iniciado sesión" puede activar todavía suena como si necesitara un infiltrado malicioso, y el siguiente paso es lo que elimina incluso ese requisito, porque hace que el propio navegador de la víctima lleve a cabo el ataque.
La técnica es la falsificación de solicitudes entre sitios (CSRF), y se basa en 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 furtivas en segundo plano —sin embargo, deliberadamente aún lo envía en una navegación de nivel superior, es decir, un clic ordinario que mueve toda tu pestaña a otro lugar.
Dado que el endpoint vulnerable responde a un enlace simple, no realiza ninguna verificación sobre el origen de una solicitud y no utiliza un token antifalsificación, un atacante solo necesita alojar una página con un botón atractivo.
Para la demostración, construí exactamente eso: una página alegre, apta para niños y, lo más importante, fiel al lore, un homenaje a CoComelon —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 solo el endpoint de paquetes con el comando introducido de contrabando en el "puerto":

Mientras ese clic aterriza, la página señuelo se pone en escena para la cámara: la obra de 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 demo; 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 y mantiene la cuenta del atacante.
Aquí hay una demo en vivo.
por qué este es el peor tipo de bug para tener en una herramienta de agente
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 ciclo brutalmente simple: un script malicioso en tiempo de 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 del atacante.
La lección que vale la pena retener 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 agente le da a un gusano
ambas
cosas gratis, porque tener secretos poderosos y conectarse a otras máquinas es su propósito completo.
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 el combustible exacto con el que funciona 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 significa
Lo que más me impacta es que el bug que realmente tomó el servidor es antiguo. La inyección de comandos y la falsificación de solicitudes tienen soluciones de libro de texto que un desarrollador en 2005 reconocería, y estaban viviendo dentro de uno de los softwares de IA de consumo más innovadores que existen —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 dentro de herramientas nuevas y brillantes.
La frontera dejó esos fundamentos completamente vigentes, luego apiló una capa poderosa, de movimiento rápido y a menudo demasiado confiable sobre ellos, y conectó esa capa a todo lo que posees.

el timbre que aún no estaba conectado
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 reporteros que usaran "los avisos de seguridad de GitHub si están disponibles", y al principio ese canal privado simplemente no estaba abierto.
Lo más sensible que un extraño podía encontrar sobre el proyecto no tenía un lugar privado donde aterrizar. Ese vacío 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.
Afortunadamente, logré conversar con uno de los mantenedores, quien abrió la función de avisos —y desde entonces he enviado varias otras correcciones.

Pero dejando todo eso de lado... es una señal de los tiempos.
Los proyectos ahora pasan de ser un pasatiempo en un GPU casero a una audiencia de cien millones de personas en el lapso de un solo anuncio, y el andamiaje de seguridad —un buzón privado para malas noticias, un flujo de trabajo de avisos, el hábito de tratar la salida del modelo como hostil— va por detrás del código, que a su vez va por detrás de la audiencia.
Ese orden es precisamente el inverso de lo que un adversario necesita que sea.
Una base de fans grande, confiada y en gran medida no técnica instalando el mismo software la misma semana, señalada por alguien en quien ya confían, es el objetivo más atractivo que existe: enorme, uniforme y pre-vendido.
Es exactamente el monocultivo que un gusano quiere, con la alfombra de bienvenida ya extendida.
Así que la parte alentadora de esta historia no es que el código fuera perfecto —no lo era— sino que el proyecto conectó el timbre y envió las correcciones en aproximadamente un día después de escuchar el toque.
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 en público— 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





