domingo, mayo 18, 2025
sábado, marzo 15, 2025
¿Qué es el "Vibe Coding"?
Andrej comenta varios proyectos que ha hecho él siguiendo este esquema: “LLM reader app” para poder hacer preguntas sobre párrafos concretos de texto y “Battleship game” que le llevaron aproximadamente una hora y todas las instrucciones dándolas por voz.
Y estoy seguro que como yo, muchos nos hemos encontrado en la misma encrucijada que Andrej, la de estar escribiendo programas en Lenguaje Natural y siendo el LLM una capa de abstracción más a la que le damos instrucciones y este nuestro “sabelotodo” personal el que hace el trabajo sucio por nosotros.
Casos de uso, últimas semanas
Y estas últimas semanas revisando X/twitter me he encontrado con que este término ha corrido como la pólvora. Mucha gente creando proyectos en áreas en las que su conocimiento es mínimo y gracias a los “sabelotodo” han sido capaces de crear cosas en minutos que antes empezando de cero podría llevar días hasta conocer las bases de cómo poder hacerlo. Todo esto potenciado por los modelos SOTA y las herramientas más utilizadas, los “AI code editors”.
Un caso que ha sido muy sonado y que me ha hecho gracia personalmente ha sido el de @levelsio, un influencer que haciendo “Vibe Coding” creó un sencillo simulador de vuelo pidiéndoselo a Claude 3.7 y en X cuenta el cómo va evolucionando. Lo hizo usando Cursor, y tras varios intentos consiguió algo en tan poco tiempo que sería inimaginable antes, comenzando con un prompt tan sencillo como:
“make a 3d flying game in browser with skyscrapers”
Estas semanas he estado entrando a su perfil a ver el progreso de este juego tan artificial como su creador el “sabelotodo”, y únicamente usando LLMs ha ido añadiendo más features: multijugador, diferentes vehículos, el poder disparar a otros jugadores y más características.
Mi propio juego con Vibe Coding
Incluso yo mismo decidí probar a ver qué es lo que conseguía “one shot” con Claude 3.7 a través del chat app y primero probé con a pedirle el mitiquísimo juego de la serpiente en Python diciéndole únicamente “Generarme el mítico juego de la serpiente en Python” y fue capaz de generarlo en menos de 20 segundos.
También probé a pedirle que me generara el juego en Lenguaje C utilizando la librería SDL2 para manejar los gráficos y esta vez no fue “one shot” la generación del código, pero solamente tuve que copiar y pegar dos errores que generaba el compilador un par de veces y fue capaz de generar el juego.
Pero todo no son buenas noticias, haciendo “Vibe Coding” nos encontramos con muchos problemas también.
Conclusiones
Mis conclusiones sobre esta tendencia es que nos demuestra una y otra vez la impresionante habilidad de generar código de los “sabelotodo”, como esto sería completamente impensable hace unos años. El cómo puede ayudarnos a democratizar el acceso a la tecnología para todas las personas y que sin ser un experto en ella puedas ser capaz de usarla ayudándote de estos asistentes inteligentes.
Puede que un futuro de la programación sea el que el lenguaje natural sea una capa más de abstracción para hablar a las máquinas, que al igual que para abstraernos del ensamblador inventamos los lenguajes de alto nivel (Lenguaje C, Java, Python, …). Que los LLMs se puedan convertir en ese compilador no determinista que transforme pensamientos e ideas en código, que los humanos nos podamos dedicar a cosas más humanas como la creatividad, las ideas y que esta sea una capa más de la cebolla que es la tecnología.
![]() |
| Figura 7: Libros de Python para Pentesters y Hacking con Python de Daniel Echeverri publicados en 0xWord. |
Un saludo,
Autor: Alejandro Garabito, Investigador IA en Ideas Locas
Publicado por
Chema Alonso
a las
6:01 a. m.
1 comentarios
Etiquetas: AI, ChatGPT, Claude, developer, gaming, GenAI, GitHub Copilot, IA, Java, Lenguaje C, LLM, LLMs, Python
sábado, febrero 19, 2022
Cómo se puede explotar Log4jShell en servidores Minecraft Java (unpatched)
Desde que se publicó esta falla en la librería de log4j han salido numerosos parches y soluciones para la misma, además de que esta sólo puede ser explotada si el servidor en cuestión está abierto a Internet y corre un programa de Java que tenga esta biblioteca como dependencia.
¿Qué tiene que ver Minecraft en esto?
Minecraft tiene actualmente tres versiones totalmente diferentes, la versión multiplataforma en Java, la de código nativo de Windows y la Pocket Edition. La versión más importante, en este contexto, es la de Java, además de que es la que tiene una mayor comunidad. Y además, debido a la eclosión del interés por el Metaverso, hay que reconocerle a este mundo virtual ser uno de los pioneros este futuro que está por venir, así que, nos sirve de ejemplo de cómo puede funcionar la seguridad de estas plataformas, y cómo puede verse afectado un mundo virtual del Metaverso por un bug de tipo 0day.
Pues entonces, si unimos la gran fragmentación que existe en el ecosistema de Minecraft, tanto en servidores como en clientes, con la gran cantidad de jugadores que tiene y que para jugar con amigos es necesario conectarse a un servidor remoto obtendremos diferentes modelos de ataques que pueden llegar a ser catastróficos.
Posibles ataques
Ahora vamos a ver los posibles ataques que se pueden dar y las circunstancias que tienen darse para que se puedan dar, todo acompañado de una pequeño video para demostrar el verdadero daño que puede causar esta vulnerabilidad. Pero antes que nada para poder entender los ataques que vamos a realizar debemos entender la topología de la red original de Minecraft.
Cuando nos conectamos a un servidor para jugar con nuestros amigos u otras personas lo que ocurre más o menos es lo que se ve en la imagen anterior. Los diferentes clientes se conectan a través de internet a un servidor que envía y recibe información. Este servidor puede estar alojado en la nube, pero lo normal cuando juegas con amigos es que uno de ellos hospede este en su ordenador. Sabiendo esto ahora vamos con algunos de los posibles ataques que se pueden dar.
Una partida casual
Supongamos que unos amigos deciden jugar juntos y para ello uno se ofrece a alojar un servidor en su ordenador para que así puedan estar juntos. Lo que él no sabe es que uno de ellos decide tomar el control de su máquina explotando la vulnerabilidad de log4shell. Más o menos el esquema de ataque que decide llevar es el siguiente que vamos a explicar. La topología de la red se aproximaba a la imagen siguiente. El objetivo es tomar el control del ordenador que alberga ese servidor y posteriormente tomar el control de los demás ordenadores conectados. Para ello seguirá los siguientes pasos:
Una vez el servidor esté corriendo y los demás jugadores estén conectados el atacante simplemente escribirá por el chat del juego un comando que se encargará de que el servidor del juego se conecte al servidor LDAP.
Posteriormente el atacante podría realizar el mismo ataque a los clientes conectados, puesto que ahora, como controla el servidor al que están conectados dispone de sus direcciones IP públicas.
Servidor atacante
Cambiemos ahora parte de nuestra trama, antes vimos que con un ordenador el atacante tomó el control del servidor y posteriormente el de los clientes, pero esto no es muy realista, ya que normalmente el atacante montaría un servidor en la nube para realizar el ataque. Imaginémonos ahora que nuestro atacante es más avanzado y en vez de atacar a sus amigos se propone un objetivo mucho más ambicioso, tomar el control de un gran servidor de Minecraft en el que juegan cientos de jugadores.
Como preparativos nuestro atacante montaría dos servidores en la nube, uno para montar el servidor LDAP y alojar el código a ejecutar y otro distinto con el que tomaría el control de los servidores abriendo por ejemplo NetCat en un puerto determinado. Después en su ordenador solo tendría que abrir Minecraft y conectarse al servidor del juego.
Posteriormente con el cliente de juego que está conectado escribirá por chat un comando que hará al servidor conectarse al servidor LDAP que está en la nube y este le mandara código para que el servidor del juego ejecute. Este código por ejemplo podría hacer que establezca conexión con el NetCat del atacante y así este obtendría ejecución remota de comandos en el servidor.
Como paso final solo tendría que tomar las direcciones IP de los demás jugadores conectados al servidor del juego y repetir el proceso una y otra vez.
Cómo evitar el ataque
Estos dos ataques, tal y como están pensados, se podrían evitar simplemente conectado un plugin al servidor del juego que filtre los comandos que se envían al servidor. Y aunque seria una manera válida, no debemos de olvidarnos que la vulnerabilidad reside en el paquete de log4j con lo que existen otros vectores de ataque que podrían seguir funcionando.
La mejor manera de evitarlo en el lado del servidor es utilizar programas de servidor de la versión 1.18.1 para arriba, esto no siempre será lo deseado porque como ya dijimos se perdería compatibilidad con el progreso que ya tengamos y no se podría jugar con muchos mods de las versiones anteriores. Otra manera sería actualizando a mano las dependencias del servidor de Minecraft, para así tener la última versión de log4j en la que ya se ha parcheado la vulnerabilidad.
En el lado del cliente de manera oficial Minecraft ha actualizado su launcher para que en ninguna versión del juego sea posible explotar esta vulnerabilidad. Eso de cara al Launcher oficial, si por algún casual tenéis un Launcher pirata o modificado este parche seguramente no se haya aplicado con lo que correis un alto riesgo de ser atacados. En un post en la web oficial de Minecraft se explican otras posibles soluciones. Como solución general Java nos recomienda que actualicemos el jdk a la última versión, esto no detendrá todos los vectores de ataques posibles, pero sí mitigara algunos de ellos.
Conclusión final
Como ya hemos visto log4shell es una vulnerabilidad de seguridad muy importante que permite un montón de ataques diferentes, y la que hoy he mostrado es solo una de las muchas maneras en las que se puede explotar esta vulnerabilidad. Además este fallo de seguridad ha sido un “0day” lo que significa que ha estado activa hasta que se notificó hace dos meses, pudiendo haber dado lugar a muchos ataques como el que hoy he mostrado sin que ni siquiera nadie se diera cuenta. Habiendo pasado ya más de dos meses de que se crean numerosas soluciones para esta vulnerabilidad ya es un buen momento para sacar este artículo y enseñaros que todas precauciones son pocas y que siempre hay que estar alerta. Nos vemos en siguientes artículos,
Publicado por
Chema Alonso
a las
7:11 a. m.
0
comentarios
Etiquetas: bug, exploit, gaming, Hacking, Java, metaverso, pentest, pentester
sábado, junio 12, 2021
Cómo programar Bots con Inteligencia Artificial para ganarte en los juegos: Un ejemplo con Bomberman & Pommerman
![]() |
| Figura 2: Libro de Machine Learning aplicado a Ciberseguridad de Carmen Torrano, Fran Ramírez, Paloma Recuero, José Torres y Santiago Hernández |
“En algunas ciencias, manera de buscar la solución de un problema mediante métodos no rigurosos, como por tanteo, reglas empíricas, etc.”
- Un bate y una pelota cuestan 1,10€.
El bate cuesta 1 euro más que la pelota. ¿Cuánto cuesta el bate?
1,10€ - 1, la pelota cuesta 0,10€ y el bate 1€, ¿no? Error. Quién haya pensado 1€, ha sido rápido que no preciso, y ha utilizado una heurística de aproximación. Realmente el bate cuesta 1,05€ y la pelota 0,05€.
Aunque estos ejemplos nos pueden hacer pensar que las heurísticas son malas, se utilizan mucho en problemas de competición entre agentes. El agente simulará “en su cabeza” qué acciones debe realizar y las seleccionará en función de una heurística. Después realizará estas acciones y verá si su previsión se adecua a la realidad del reward. Esto permite que la Inteligencia Artificial prediga qué acción realizar en función de posibles escenarios futuros.
En los algoritmos basados en normas había un techo de aprendizaje basado en la cantidad de datos que un sistema podía aprender. Deep Blue, que no utilizaba sistemas de RL sino planificadores clásicos, fue capaz de ganar al famoso ajedrecista Garry Kasparov en 1996, algo que antes parecía imposible. Pero un algoritmo más nuevo y complejo como AlphaGo llegó al nivel de expertos en el famoso y complicado juego asiático Go. Pero no se utiliza únicamente redes neuronales, como si de magia se tratara: AlphaGo Zero por ejemplo utiliza internamente heurísticas para simular pasos a corto plazo (MCTS, que comentaremos luego). Si queréis ver una implementación muy divertida de esta tecnología, el caso más sonado fue el de OpenAI, donde los personajes rompieron el juego “surfeando” las cajas.
Figura 3: OpenAI juego del Hike and Seek, donde los agentes compiten
Trasteando con tecnología, encontré la implementación en Java de Pommerman, un juego que seguro que a mi hermano Victor Ibáñez le sonará mucho, ya que nos pasamos horas jugando a otro muy similar. A mi parecer, la primera implementación parecida a un Battle Royal estilo Fortnite. En ese juego, diferentes jugadores se posicionan en las 4 esquinas de un tablero y deben atacar a los adversarios insertando bombas en el tablero. Aquí tenéis el paper asociado.
A partir de comandos podéis definir bots, cada uno con sus características. Cada uno de los bots podrá realizar 5 acciones (poner una bomba y los movimientos izquierda, derecha, arriba, abajo), además de poder quedarse quieto. Los agentes inteligentes tendrán una heurística concreta para este problema, que en el paper mencionan como una diferencia entre el nodo de búsqueda inicial (nodo root) y el estado final, donde se consideran distintos factores: el número de compañeros vivos, el número de enemigos vivos, el número de bloques de madera existentes, la fuerza de explosión y la habilidad de poder chutar bombas (algunos objetos recogidos aumentan estas dos últimas capacidades).
- DoNothing (0): El agente no realiza acciones.
- Random (1): El agente selecciona acciones de su pool de forma aleatoria.
- OSLA (2): One Step Look Ahead, este tipo de agente calcula (a partir de la heurística comentada) el siguiente paso a realizar, y escoge el que dé mejor resultado.
- Simple Player (3): Este agente calcula con Dijkstra (máximo 10 steps) el path más corto a los objetos del entorno. Entonces se escapa en caso de estar en la potencial área explosiva de una bomba, deja una bomba en caso de estar adyacente a un jugador rival, se acerca a un enemigo en caso de estar cercano a 2-3 pasos y puede dejar una bomba en caso de estar cerca de un trozo de madera.
- RHEA 200 (4): o Rolling Horizon Evolutionary Algorithm, este algoritmo genera N individuos de L pasos/acciones a realizar, utiliza métodos de algoritmos genéticos (como mutación o elitismo) para generar nuevos individuos y a partir de la heurística mencionada escoge el primer paso del mejor individuo.
- MCTS (5): o Monte-Carlo Tree Search, es otro Stocastic Forward Planning. Como algunos recordaréis, Monte-Carlo se puede utilizar, por ejemplo, para aproximar PI a partir de N simulaciones del experimento, para estimar la probabilidad de que suceda un evento... MCTS balancea entre exploración-explotación para desplegar el árbol de búsqueda a partir de los nodos más prometedores (no lo despliega entero). Se simulan distintos escenarios des del nodo aún no expandido, y se selecciona la primera mejor acción a realizar.
Si vemos la implementación del player DoNothing, observaremos el esqueleto que deben tener todos los otros jugadores. Debemos extender la clase Player y crear nuestras normas o algoritmos para la selección de acciones en la función act. En el caso de SinglePlayer, la norma de escaparse en caso de estar en una posición no safe, debemos movernos a una posición safe en la siguiente jugada.
Una vez hemos compilado y ejecutamos el programa con los parámetros adecuados, podremos jugar contra los tipos de jugadores mencionados anteriormente o los que hayamos creado. Por ejemplo, un juego contra los 3 jugadores más sencillos (DoNothing, RandomPlayer y SimplePlayer) se ejecutaría como:
.\run.jar 0 1 1 -1 0 1 2 6
Sí, me ganó el jugador DoNothing porque nos morimos a la vez el jugador OSLA y yo… Ahora escribo con el teclado roto. El jugador random, en cambio, se suicida en las primeras iteraciones dado que no aprende qué jugadas realizar, sino que escoge una del pool de posibles jugadas.
Entre mis amigos esto le llamamos la 13,14. Lo que sí que hemos podido aprender de hoy, a parte de la notable pérdida de mis habilidades jugando videojuegos, es un repaso sobre la IA en competiciones, qué es una heurística y cómo se programan bots para Bomberman con ellas. ¡No dudéis en descargaros el código, implementar algún bot y/o jugar!
Publicado por
Chema Alonso
a las
12:30 p. m.
0
comentarios
Etiquetas: AI, bots, Deep Learning, gaming, IA, Inteligencia Artificial, Java, jugos, Machine Learning
miércoles, febrero 24, 2021
GeeksHubs, 0xWord & MyPublicInbox: Hack your Career!
Publicado por
Chema Alonso
a las
6:40 a. m.
0
comentarios
Etiquetas: .NET, 0xWord, Cursos, DevOps, formación, Java, javascript, MyPublicInbox, programación, programación .NET
jueves, julio 23, 2020
Aplicaciones web escalables con el Patrón Arquitectónico "MicroFrontEnds"
![]() |
| Figura 1: Aplicaciones web escalables con el Patrón Arquitectónico |
Sabemos que es complejo realizar un desarrollo FrontEnd adecuado, y más aún cuando se trata de escalar un proyecto extenso y complejo donde trabajan varios equipos con una estructura frontal monolítica. Es en este punto donde ha llegado el patrón de tendencia este año, MicroFrontEnds, para dar solución a este tipo de problema. Este patrón arquitectónico bebe directamente de la filosofía de estructuración y tratamiento de los microservicios aunque está orientado al desarrollo FrontEnd.
![]() |
| Figura 2: Evolución del patrón de arquitectura |
MicroFrontEnds aparece en el radar de tecnología de ThoughtWorks en noviembre de 2016 como una técnica que surge de la necesidad de eliminar el monolito de la parte frontal de una aplicación web. En noviembre de 2017 se denomina esta técnica en estado de prueba. Por último, entre abril de 2019 y mayo de 2020 esta técnica termina por asentarse como un Patrón Arquitectónico.
![]() |
| Figura 3: Libro de Hacking Web Technologies 2ª Edición en 0xWord de Chema Alonso, Enrique Rando, Amador Aparicio, Pablo González y Ricardo Martín |
![]() |
| Figura 4: Organigrama de trabajo con MicroFrontEnds |
Por lo tanto, los equipos tienen una base de código más pequeña que tratar y como resultado se obtiene una aplicación más sostenible y fácil de probar. Además de una mayor tolerancia a fallos y brechas de seguridad, ya que este patrón se desarrolla bajo la filosofía DevOps, aunque siempre se puede mejorar con prácticas de desarrollo de código seguro y seguir la corriente de las SecDevOps.
![]() |
| Figura 5: Libro de Docker:SecDevOps de 0xWord escrito por Fran Ramírez, Rafael Troncoso y Elias Grande |
Para entender mejor todo, estas sería las situaciones que resuelve este patrón:
- En determinados proyectos se requiere de la implementación de una aplicación web y puede que en el código de tu proyecto no encuentres el sitio adecuado para dicha implementación.- Puede que quieras utilizar nuevas features de JavaScript en tu proyecto, pero estas no encajen con las herramientas utilizadas hasta el momento.- Escalar tu desarrollo haciendo que varios equipos de trabajo puedan desarrollar en el mismo proyecto de forma simultánea.
Dada la independencia de estos MicroFrontEnds se obtienen resultados como mejores tiempos de carga, código con mayor accesibilidad, acotación de errores y, a mi parecer, la característica más interesante, despliegues independientes de las distintas funcionalidades. Lo que resulta una experiencia de usuario mejorada de cara a las actualizaciones en la aplicación web, ya que solo se actualizaría la funcionalidad en cuestión y no toda la aplicación. Este proceso, resultará transparente de cara al usuario final.
Técnicas de implementación.
Se utilizan varias formas de implementar este patrón a la hora de desarrollar una aplicación web, aunque existe un enfoque general entre todas las vías de implementación en el que un contenedor renderiza todos los elementos comunes de la página y orquesta aspectos como la autenticación y la navegación con los microfrontend. Estas son algunas de las implementaciones utilizadas con mayor frecuencia:
Iframes:
Dentro del contenedor principal cada microfrontend se alojará dentro de un iframe que puede residir en otro servidor. Aunque, puede resultar complejo realizar un diseño adaptativo al utilizar este tipo de elementos.
La idea es alojar distintas SPA en las páginas de nuestra aplicación, esto hará que podamos introducir de forma sencilla esta arquitectura en proyectos ya iniciados, aunque la implementación de este patrón requerirá módulos externos para compartir las distintas funcionalidades de la aplicación.
![]() |
| Figura 7: Implementación de MicroFrontEnds con múltiples SPA en distintas URL |
Single-SPA “Meta framework”:
Consiste en implementar varios frameworks trabajando en la misma página. Esto requiere de un constructor global para transpilar y orquestar las distintas funcionalidades.
![]() |
| Figura 8: Implementación de MicroFrontEnds con Single-SPA "Meta framework" |
Aunque es una tecnología bastante reciente, el patrón de arquitectura basado en MicroFrontEnds es una solución que aporta muchas ventajas al ciclo SecDevOps y beneficios en aspectos como la escalabilidad, sostenibilidad, seguridad y despliegue de una aplicación de gran tamaño.
Figura 9: Implementación del patrón de diseño MicroFrontEnds
Referencias:
Publicado por
Chema Alonso
a las
7:01 a. m.
0
comentarios
Etiquetas: .NET, docker, Java, programación
Entrada destacada
Hacking IA: Jailbreak, Prompt Injection, Hallucinations & Unalignment. Nuestro nuevo libro en 0xWord
Pocas veces me ha hecho tanta ilusión que saliera un nuevo libro en 0xWord como con este libro de " Hacking IA: Jailbreak, Prompt Inje...
Entradas populares
-
Un informe de Tech Transparency Project, después del lío con el Jailbreak del Bikini en Twitter/X , y de la masificación de DeepFakes en el...
-
Hay gente que cree que Google ha alcanzado la perfección con su buscador, pero la realidad es que tienen que mejorar mucho a varios niveles....
-
Hace un par de veranos, dr. dr. embajador Maligno nos contó que para él hacer la maleta es elegir los libros que se va a llevar, porque e...
-
Si has visto alguna de mis últimas charlas, habrás podido ver que he usado ADA , un Asistente IA que hemos hecho mi compañero Carlos Luengo...
-
Como sabéis últimamente he estado repasando la seguridad de algunos WebGUIs para SGBDs mirando a ver si hacían los deberes en seguridad o...
-
Supongo que muchos ya lo habréis visto anunciado en algunos sitios, pero quería avisar yo también por aquí para que nadie se pierda las sesi...
-
Circula por la red un truco que llegó a mí de casualidad , donde se explica cómo conseguir ver más de una vez - e incluso capturar - las fot...
-
Desde el mes de Octubre del año pasado llevamos trabajando en Informática 64 junto con Alejandro Ramos ( @aramosf ) en Recover Messages ...
-
Me gusta mucho el concepto de la “ Segunda Montaña ”. Esa que la gente que pone fin a su carrera profesional se marca como objetivo. Encontr...
-
Shadow AI: Los datos de tu empresa que tus empleados enviaron a Servicios IA sin que tú lo supieras.Hace unas semanas os hablé de en el artículo de " La Inteligencia Artificial está multiplicando los parches de seguridad ... ¿quién los...





DragonJAR
8.8 Chile
Ekoparty
e-Hack MX
AREA 51
Comunidad Dojo Panamá
ARPAHE SOLUTIONS 















































