- One Million Checkboxes (OMCB) era un sitio web donde cualquiera podía cambiar en tiempo real las mismas 1 millón de casillas de verificación, y al descubrirse un patrón de URL oculto en la base de datos durante su operación, salió a la luz una colaboración inesperada
- Tras publicarse el 26 de junio de 2024, durante 2 semanas 500 mil personas manipularon las casillas más de 650 millones de veces, convirtiendo un experimento simple en un juego masivo de internet
- Debido a que la estructura guardaba el estado de las casillas como 1 bit, 8 casillas equivalían a 1 byte, y algunos usuarios aprovecharon esto para ocultar caracteres ASCII y URLs como mensajes binarios
- La URL oculta llevaba a un servidor de Discord, y los participantes renderizaban el millón de casillas de verificación como una imagen de 1000×1000, experimentando con códigos QR, mensajes en base64, animaciones y representación de colores
- Los bots podían perjudicar la experiencia de los usuarios comunes, pero el proceso de explorar el sistema y dejar huellas sorteando sus restricciones quedó como una colaboración creativa de internet
Cómo funcionaba One Million Checkboxes
- One Million Checkboxes (OMCB) era un sitio web publicado el 26 de junio de 2024 que ofrecía 1 millón de casillas de verificación globales
- Cuando un usuario activaba o desactivaba una casilla, ese mismo estado se reflejaba de inmediato para todos los usuarios conectados al sitio
- El operador esperaba que unos cientos de personas pulsaran unos miles de casillas, pero en realidad durante 2 semanas 500 mil personas manipularon las casillas más de 650 millones de veces
- El sitio se expandió hasta aparecer en New York Times, Washington Post, Know Your Meme y Wikipedia
- La tecnología de escalado de OMCB se trató en otro texto, y esta historia se centra en los mensajes ocultos descubiertos durante su operación
Restricciones que dificultaban dibujar
- OMCB estaba diseñado para dificultar el dibujo libre, ya que en internet abierto es difícil predecir qué querrán dibujar los usuarios
- La cantidad de casillas mostradas por línea cambiaba según el ancho de la ventana del navegador
- Aunque con cierto ancho se pudiera formar una palabra como “EXAMPLE”, si cambiaba el ancho del navegador también cambiaban los saltos de línea y el mensaje desaparecía
- Un garabato hecho en un teléfono no se veía con la misma forma en una laptop, y solo era visible para usuarios con el mismo ancho de visualización
- Esta restricción funcionaba de forma sutil, tanto que a muchos usuarios les costaba darse cuenta de que lo que escribían no era visible para otras personas
- Muchos usuarios pidieron que se “arreglara” para poder dibujar, pero ese comportamiento había sido una decisión intencional
Cómo se almacenaban las casillas como datos
- OMCB representaba cada casilla con 1 bit para almacenar y transmitir eficientemente el estado de 1 millón de casillas
- Una casilla marcada se guardaba como
1y una no marcada como0 - 1 millón de bits equivalen a 125,000 bytes, es decir, 125 KB
- Una casilla marcada se guardaba como
- Los datos se almacenaban en Redis, y al enviarlos al cliente se usaba codificación base64
- Como 8 casillas podían formar 8 bits, es decir, 1 byte, eso creó la base para construir mensajes ocultos
La URL sospechosa hallada en la base de datos
- Unos días después del lanzamiento de OMCB, tras reescribir el backend en Go para soportar la carga, se hizo un volcado en ASCII de los bytes crudos almacenados en Redis
- Dentro del volcado apareció una URL que llevaba a
catgirls.win, y al principio se pensó que la base de datos había sido hackeada- Se revisaron los logs de acceso y el código, pero no había señales de intrusión
- Como se creía que la base de datos solo debía contener 0 y 1, parecía como si hubiera cadenas de texto dentro
- Al revisar la posición de las casillas correspondiente a la URL, salió a la luz la causa real
- Un carácter como
hocupa 1 byte, y 1 byte son 8 bits, lo que en OMCB correspondía a 8 casillas - Había un patrón repetido en bloques de 8 que coincidía con la URL, y si se cambiaba una casilla, el patrón original reaparecía de inmediato
- Un carácter como
- La base de datos no había sido hackeada; alguien estaba manipulando las casillas para escribir un mensaje binario
El mensaje binario leído como ASCII
- Cuando Redis mostraba los datos en ASCII, leía los datos crudos en unidades de 1 byte, es decir, 8 bits
- Cada byte se convertía en un número entre 0 y 255
- Si el valor estaba dentro del rango de caracteres ASCII imprimibles, de 32 a 127, se mostraba ese carácter
- De lo contrario, se mostraba una representación hexadecimal como
\x00
- El usuario que creó el mensaje iba activando y desactivando casillas para cambiar bits, de modo que esos bits, al pasar por números y caracteres, formaran una URL
- Ese patrón se mantuvo incluso en un entorno donde miles de personas manipulaban el sitio al mismo tiempo
El pasaje oculto que llevaba a Discord
- La URL oculta
https://catgirls.win/omcbllevaba a un servidor de Discord llamado Checking Boxes- El Discord original se cerró después, y la URL pasó a apuntar a otro lugar
- Los participantes de Discord descargaban todos los datos de las casillas de OMCB y los renderizaban como una imagen en cuadrícula de 1000×1000
- Las casillas sin marcar se mostraban en blanco y las marcadas en negro
- En esa imagen había varios tipos de mensajes
- El ruido repetitivo de la parte inferior era el mensaje binario descubierto
- Encima estaba la versión en base64 del mismo mensaje
- A la izquierda había un código QR con corrección de errores
- Todos eran mensajes que llevaban a Discord
- Los participantes pensaban que quienes tuvieran más probabilidades de crear bots verían uno de estos tres formatos: datos en base64, datos binarios o una imagen de 1000×1000, así que usaron varias rutas al mismo tiempo
- El Discord tenía menos de 20 personas cuando se participó en él, y al momento del cierre del sitio ya había crecido a más de 60
Bots, dibujos y experimentos con animación
- Los participantes de Discord fueron creando dibujos cada vez más complejos mientras desarrollaban un mejor sistema de dibujo e iban haciendo ingeniería inversa al rate limit de OMCB
- El operador ofreció explicar la información del rate limit, pero el líder de Discord prefirió descubrirla por su cuenta
- Con el tiempo también experimentaron con protocolos de animación y representación de color
- Un ejemplo consistía en tratar celdas adyacentes como canales rojo, verde y azul para dibujar colores en una cuadrícula más pequeña
- El día antes del cierre del sitio, el operador eliminó todos los rate limits tras avisar con anticipación, para ver cuánto tráfico podía soportar y qué podían crear los participantes
- En ese momento se produjeron varias animaciones, y uno de los ejemplos fue una animación de Rickroll
La doble cara de los bots
- En OMCB hubo muchas quejas sobre los bots, y llegaron cientos de mensajes criticándolos
- Los bots con los que suele encontrarse el usuario común, como los de reventa de boletos o reservas de restaurantes, a menudo se perciben como egoístas e injustos
- En OMCB también hubo bots que podían considerarse antisociales
- Algunos usuarios crearon y anunciaron un pequeño bot en JavaScript que desmarcaba todas las casillas posibles
- Hubo usuarios que dijeron que ese tipo de comportamiento arruinaba la experiencia del sitio
- Los participantes de Discord establecieron algunas reglas sobre dónde usar bots, y el operador a veces les pedía bajar la intensidad
- El uso de bots pudo haber empeorado la experiencia de los usuarios comunes, pero al mismo tiempo también fue un caso de exploración del sistema dentro de sus restricciones y de creación de trabajos creativos
Una experiencia que quedó como travesura creativa
- El operador contó que en la preparatoria hizo una broma creando reglas de correo recursivas que enviaron millones de mensajes a un amigo, y que por error tumbó varias veces el servidor de correo de la escuela
- En ese momento, los adultos a su alrededor no se enojaron demasiado; más bien le dijeron que se detuviera e incluso le hicieron una camiseta
- Los mensajes ocultos, las herramientas y los dibujos creados por los participantes de Discord en OMCB fueron un resultado creativo inesperado
- El operador valoró mucho la experiencia de poder verlo en tiempo real y alentarlo, y se sintió orgulloso de que Discord viera a OMCB como algo con lo que valía la pena jugar y de lo que lograron crear
1 comentarios
Comentarios en Hacker News
Soy el autor :)
Esta es mi historia favorita de todas las que me han pasado administrando un sitio, y quizá hasta la mejor historia de la que he formado parte. No soy de llorar mucho, pero en los últimos 2 meses lloré varias veces al recordar esto y tratar de escribirlo. Claro que el proceso de descubrirlo en sí, y el paso del miedo a la emoción, también fue bastante una locura
Me gustó especialmente que se comprobara una creencia central que tenía al hacer algo así. Hacen falta ciertas restricciones por culpa de una pequeña cantidad de gente mala, pero en general las personas que andan por internet son buenas y muy creativas, y hasta convierten esas restricciones en algo con lo que pueden jugar
Este artículo fue uno de los mejores ejemplos de eso, y me encantó que crearas el sitio, observaras cómo lo usó la gente y luego compartieras esa experiencia. Me hizo muy feliz leerlo y pienso compartirlo mucho
Definitivamente estoy quemado, así que me dieron ganas de hacer algo ligero y aparentemente inútil. Me recordó la historia de Richard Feynman, que pasó 10 años deprimido antes y después, y volvió a encontrar alegría en la física de un plato girando a la hora del almuerzo, pudiendo dejar por un rato de lado lo que había estado haciendo antes
También estoy totalmente de acuerdo con eso de que la mayoría de la gente es buena y creativa. Hice un clon de OMCB y, como me obsesionó la idea, lo subí en línea; un día después sí había algunas personas malintencionadas, pero alguien dibujó una enorme The Great Wave de Hokusai. Mi versión usaba un gran lienzo desplazable de ancho/alto fijo, así que se veía de inmediato, y la sensación de verlo fue realmente buena y divertida
Este artículo me hizo sentir un nudo en la garganta. Aprendí ingeniería de software en la secundaria porque era malo en matemáticas y quería hacer un programa que resolviera mi tarea. Después de eso seguí haciendo de todo solo por diversión: chat LAN, servidor HTTP, antivirus y muchas otras cosas
Era divertido, desafiante, gratificante y sorprendente. Pero después de empezar a trabajar, mi corazón empezó a endurecerse por el bombardeo interminable de nuevas tecnologías, discusiones del tipo “X es dañino”, “J es mejor que K”, y el ataque constante de cosas nuevas que no se detienen
La alegría de la ingeniería ya no se siente como un cielo azul. Tal vez todavía sea azul, pero para unos ojos lavados en plata, todo parece gris
Leer esta historia revivió en mí la sensación de cuando aprendía software de niño. Todavía puede ser divertido, y todavía puedo hacer algo para mí mismo, no para un exit ni para un nuevo SaaS brillante. Me dio un rayo de esperanza de que aún puede ser divertido
Seguramente ya lo sabes, pero esto es un síntoma de burnout, y cualquiera que se sienta así debería tomárselo en serio. Una vez ayudé en el trabajo a alguien que estaba aprendiendo Python, y esa persona se puso realmente feliz cuando por fin entendió un formato de archivo binario. En ese momento me di cuenta de que yo no había sentido algo así en años, y poco después entendí que estaba demasiado agotado para seguir en ese puesto y que necesitaba tiempo para cuidar mi salud mental
La clave fue ignorar aprender nuevas tecnologías salvo que fuera realmente necesario, y simplemente concentrarme en crear cosas nuevas. Creo que lo que me hizo recordar otra vez lo hermosa que puede ser la programación empezó con los videos de Sebastian Lague
[https://youtu.be/X-iSQQgOd1A?si=aqriiWmcqqphOiuI]
Me hizo recordar cuando escribía código de adolescente no porque lo necesitara, sino porque quería. A veces usé esa habilidad para cosas buenas, pero también para tonterías como hackear a la “competencia”, algo de lo que ahora me avergüenzo. Aun así, en conjunto esa experiencia me convirtió en quien soy hoy, y me alegra que la próxima generación siga encontrando alegría en programar
[1] https://news.ycombinator.com/item?id=41306128
También puedes agarrar pico-8 y hacer un juego o script malísimo. Sin espacio ni ganas, usando variables de dos letras en lugar de nombres largos como longDescriptiveVariableNames. O jugar TIS-100 o Shenzen I/O, pero mejor todavía si imprimes el manual, lo metes en la carpeta más vieja que tengas y hasta le tiras café encima
Esta parte es realmente importante:
“Los adultos en mi vida, en general, no se enojaban conmigo. Me decían que parara, pero hasta me hicieron camisetas. Si no hubiera recibido ese apoyo en ese momento, creo que no estaría haciendo lo que hago ahora.”
Los adolescentes necesitan un espacio donde puedan hacer travesuras hasta cierto punto, con algunas consecuencias sociales reales, pero también con límites y apoyo para que no se vaya demasiado lejos. Y en vez de adultos que se impongan como autoridades, necesitan adultos con talentos geniales que los chicos quieran aprender
Hice una presentación de dos diapositivas; ambas imitaban una sesión de DOS con fondo negro y texto gris para que pareciera que Windows había sido borrado, y una de ellas tenía un guion bajo en el prompt. La configuré para que cambiara automáticamente cada segundo y se repitiera, así que parecía un cursor parpadeando; se veía como una computadora descompuesta, pero bastaba con presionar Escape para salir. Claro, esas computadoras eran Mac, así que ni siquiera tenían DOS ni Windows
La profesora vio eso y pensó que yo había hackeado o dañado la computadora, así que me mandó con el director. Al director no le pareció gracioso y me castigó: durante las dos semanas siguientes tuve que pasar la segunda mitad del almuerzo con el encargado de TI de la escuela, observando el vandalismo que él sufría. Pero el encargado de TI se murió de risa en cuanto vio lo que había hecho, y le parecía absurdo que lo trataran como si hubiera dañado una computadora. Después de eso, incluso cuando se acabó el castigo, iba seguido a su oficina para platicar o para acompañarlo mientras arreglaba computadoras
Al año siguiente le pregunté a un profesor si podía tener acceso a una PC porque había algo con lo que quería jugar, y me dio permiso para usar el aula de contabilidad después de clases, espacio adicional en la unidad de red y libertad casi total con la condición de no romper nada. Así que no rompí nada, y pasé la noche ejecutando Tierra en varias máquinas, viendo cómo funcionaba increíblemente bien; por la mañana llegaba, guardaba todo y reiniciaba. Eso se convirtió en una gran base para el futuro. Tampoco rompí nada porque no quería matar a la gallina de los huevos de oro
Las PCs del laboratorio eran muy lentas, y era famosa la broma de dejar presionado Win+E para abrir cientos de ventanas de Explorer hasta que la PC se congelara. Así que hice un pequeño programa en VB6 llamado “DoraTheExplorer.exe” que, al hacer clic, hacía exactamente lo mismo, y lo subí a la unidad compartida de la escuela
Al principio funcionó, pero la gente empezó a esquivarlo cerrándolo rápido con Alt+F4. Entonces hice que se relanzara al cerrarse, pero eso también se podía evitar machacando Alt+F4. Al final hice una hidra que abría dos más cada vez que la cerrabas, y se volvió el ICBM de la guerra de bromas con Explorer, así que se declaró la derrota
El administrador lo sabía desde el principio, pero en general se lo tomó con calma. Dejó muy claro que, si alguien perdía su trabajo o sufría algún daño, yo tendría que hacerme responsable, pero eso no pasó porque todos sabían lo que hacía dora.exe. La gente lo abría a propósito para ver si podía colgar tontamente la PC y luego escapar
Incluso en ese momento me pareció absurdo e injusto, y por suerte mi mamá también estuvo de acuerdo. Ahora, viéndolo con ojos de adulto, siento que fue una actitud casi criminalmente irresponsable sobre lo que implica criar a un niño. Fue tan irremediablemente mezquina y patética que todavía me da rabia pensar que aún hay niños creciendo en entornos así y aprendiendo de personas así
“Especialmente para la gente que no programa, la forma típica de encontrarse con bots es con cosas como bots para revender entradas o bots para reservar restaurantes. Son bots que se sienten egoístas, injustos y antisociales.”
Esa parte me recordó cuando Palisades Tahoe, el resort de esquí, introdujo el invierno pasado reservas de estacionamiento gratuitas pero escasas para los fines de semana. Como es uno de los destinos de esquí más populares del Bay Area, era obvio que iban a aparecer bots. Cada vez que se liberaban lugares nuevos, desaparecían en segundos, y claramente eran bots. Así que yo también terminé haciendo uno
Mi bot solo mandaba una alerta por Pushover cuando se liberaba un lugar por cancelación y no hacía la reserva directamente, pero con eso bastaba para mí y mi grupo. En Reddit, la gente que no hacía bots decía que los bots se estaban llevando todo, y aunque a mí también me parecía bastante antisocial, de verdad no había otra opción
Si no, en vez de dárselo a quien más recursos está dispuesto a pagar, termina siendo una “subasta” para quien tenga mejor habilidad de programación. Esa persona luego puede revenderlo a quien pague más. Programar es una habilidad profesional, y si desde el principio estamos en un contexto donde no se considera aceptable dárselo a quien más paga, entonces es bastante injusto. Tengo entendido que en partes de la industria de tenis/pasarela se usa un sistema así
Lo curioso es que cada año salen noticias sobre si se usan bots para esas reservas de refugios, y los operadores lo niegan con fuerza. Pero yo sé que mi bot está compitiendo con muchos otros bots
Es un secreto a voces que tienes dos opciones: pelear contra los bots para conseguir una cita dentro de 6 a 12 semanas, o pagarle 50 euros a la persona adecuada y obtener una cita en unos pocos días
Después de conseguir la cita, todavía tuve que remolcar la lancha durante 9 horas, rogando todo el camino que no quedara ni una gota de agua en ella. La mayoría de los inspectores te rechazan al instante y te mandan de vuelta si ven agua. Por suerte, el equipo de inspección en el lugar fue bastante bueno y lavó toda la lancha con agua caliente, que según dicen mata cosas como crías o huevos de mejillón quagga
Me gustó muchísimo este artículo y me hizo recordar cuando aprendía Java en la preparatoria. Hice una app que cubría toda la pantalla con una cuadrícula de botones “x”, pero solo uno de ellos cerraba realmente la ventana. Si alguien se iba sin bloquear la computadora, metía un disquete, ejecutaba el programa y me iba
El encargado de IT de la escuela siempre nos preguntaba qué estábamos haciendo, y nosotros respondíamos con honestidad. No se enojó porque hubiéramos descubierto cómo correr juegos como Halo CE o Starcraft en la red, pero si nos poníamos demasiado atrevidos nos decía que ya le paráramos
Nosotros teníamos archivos compartidos en red, así que no hacían falta disquetes, y era facilísimo meterse en las computadoras de todos. Yo hice un script que leía los títulos de las ventanas abiertas para cerrar sitios de juegos populares de esa época, como free games.com. Porque no se debía jugar en clase. Pero por el nombre del archivo guardado terminé cerrando un programa de modelado 3D, y eso sí me dio un poco de culpa
Encontré una forma de saltármelo: abrías el Bloc de notas, ibas al cuadro de diálogo de abrir archivo y luego no recuerdo exactamente qué seguía, pero se abría el explorador de archivos, y si ponías una URL en la barra de direcciones se convertía en Internet Explorer. Claro que también teníamos Linux arrancable desde CD, pero eso llamaba demasiado la atención
El encargado de IT afirmaba que el juego en red se estaba comiendo todo el ancho de banda y que yo había “hackeado” las computadoras para obtener privilegios de administrador e instalarlo. Siento que en muchos comentarios de este hilo hay una versión de mi historia
Me recordó la historia del New Yorker sobre Reddit, especialmente la parte en que explican r/Place:
El pasado April Fools', en vez de anunciar una parodia, Reddit presentó un experimento social real. Se llamaba r/Place, y era un cuadrado vacío de mil por mil píxeles. Al principio, los un millón de píxeles eran blancos. Una vez iniciado el experimento, cualquiera podía cambiar un solo píxel en cualquier parte de la cuadrícula a uno de dieciséis colores. La única restricción era la velocidad. El algoritmo permitía que cada usuario de Reddit cambiara solo un píxel cada cinco minutos. “De esa manera una sola persona no puede apoderarse de esto. Es demasiado lento”, explicó Josh Wardle, product manager de Reddit a cargo de Place. “Si quieres hacer algo a escala, tienes que cooperar.”
https://www.newyorker.com/magazine/2018/03/19/reddit-and-the...
Yo también era de los que odiaban a los bots. Necesitaba este artículo. A mí también me pasó que me metí en problemas por hacer un programa que no debía hacer en la escuela
Aun así, estaré agradecido de por vida con mi profesor de matemáticas que me dejó programar en la calculadora TI-83+. Eso sí, con la condición de que el programa lo hubiera escrito yo mismo y no lo compartiera con nadie
Hace tiempo, cuando administraba un foro de vBulletin, una vez instalé un sistema de arcade. Era una función divertida donde podías jugar juegos, ganar una moneda inútil llamada “XMB Bucks” y presumir entre ustedes
Unos meses después descubrí que ese arcade tenía una función de subforo oculto, y que bastante gente la usaba activamente. Al parecer habían evitado la pantalla de registro de vBulletin y se habían registrado directamente en esa función oculta del arcade, y ahí estaban, platicando entre ellos como una manada de ratones viviendo debajo del piso
Cuando entré a la universidad, la WWW era algo totalmente nuevo. Aprender a ver páginas con NCSA Mosaic en el laboratorio CIP fue rápido, pero no tenía ni idea de cómo funcionaba todo eso. Aun así, quería averiguarlo
Leí en alguna parte que para crear tu propia página necesitabas un “patchy server”, así que busqué Apache en Altavista. Me sorprendió por un momento que el primer resultado no fuera sobre una tribu, y luego seguí con cuidado todas las instrucciones sin tener idea de lo que estaba haciendo
Mucho después, por fin vi la página de prueba en Mosaic y me fui contento a casa. Ya era tarde y estaba cansado, pero me quedé pensando si debía encender la computadora, conectarme por módem y comprobar si mi página también se veía desde casa. No entendía muchas cosas, pero pensaba que, si se veía desde mi casa, entonces cualquiera en el mundo podría verla
Esa idea no dejaba de darme vueltas, así que al final lo hice y, para mi sorpresa, sí funcionó.[1] Para alguien como yo, que había crecido en una zona rural sin ni siquiera una biblioteca, fue una experiencia que me sacudió el mundo
Unas dos semanas después, la universidad me notificó que no podía operar servicios en recursos de la universidad sin autorización y tuve que bajarlo. Pero fuera de eso no pasó nada, y de verdad agradezco que lo manejaran de una forma razonable
[1] En ese tiempo nuestras computadoras tenían IP pública y los firewalls todavía no llegaban
\\x.x.x.x\c$, había una probabilidad bastante alta de que entrara tal cualGran historia, le puso un gusto agradable a mi desayuno. Los desarrolladores jóvenes están libres de las herramientas y procesos modernos del mundo profesional, y de cosas que no siempre son buenas
Estoy creando una plataforma tipo alternativa open source a Roblox, y atrae a este tipo de chicos. Son realmente creativos, reportan bugs y hacks potencialmente dañinos, y siempre quieren ayudar