Los hackers del Senado

Esta entrada fue publicada originalmente en Naukas el día 13/10/2012.

Edificio del Senado de España en obras
El edificio del Senado de España, en obras. Foto de tripu.

El Senado estrena web y salta la noticia: la nueva web del Senado ha sido hackeada… ¿O no? La nueva web del Senado no ha sido hackeada… ¿O sí? Se trata de una vulnerabilidad de tipo XSS no persistente de los dolores… ¿Qué ha pasado en realidad? ¿Por qué es tan difícil entender a los informáticos? ¿Quién nos quita esa sensación de “se lo llevan crudo mientras me dicen que sonría”? Salvo por la última pregunta, que tendréis que contestar vosotros solos, hoy me pongo el gorro de comando de emergencia informática para explicar:

  • qué ha pasado,
  • por qué ha pasado y
  • por qué debe importarnos lo que ha pasado (aunque no sea tan grave, en realidad).

Empecemos por el principio

Hubo una gran explosión —desde dentro, no desde fuera; ¿qué es fuera hablando del Universo?— y el espaciotiempo empezó a existir. Trece mil y pico millones de años después, un humano inventó la Web: una red de páginas de texto con una dirección —como la de una casa, para entendernos— y una forma de especificar enlaces entre ellas usando esas direcciones.

El humano que pensó en estas cosas quiso que las páginas web se pudieran escribir a pelo, es decir, sin ningún tipo de traducción entre letras humanas y código de ordenador. De esta forma el contenido de las páginas y el lenguaje que describe su estructura podría escribirse en cualquier soporte y con cualquier programa editor de textos. Esto, señoras y señores, es democracia. Solo había que resolver un pequeño problema: separar el lenguaje de la estructura de las letras del contenido.

La estructura de la web

Problema que, afortunadamente para nuestro inventor, ya estaba resuelto tiempo ha gracias a una convención de lo más trivial que se remonta a los primeros tiempos de la informática. Escribimos con letras (a, b, c, d…), números (0, 1, 2, 3…) y otros símbolos. ¿Por qué no reservar algunos de los menos usados para separar el lenguaje de estructura del contenido?

Por otra parte, usamos paréntesis para destacar o hacer un aparte con nuestros textos. ¿Por qué no generalizarlos? Si tuviéramos diferentes tipos de paréntesis, podríamos usarlos para indicar cuando estamos marcando una palabra para que aparezca en negrita, una frase para que sea un titular…

Esta es la base de todos los lenguajes de marcas, y en particular del de la web —llamado HTML. Malditos acrónimos de cuatro letras (AD4L…) Unos caracteres especiales: <, > y algunos más, para escribir paréntesis de diferentes tipos: <p>hola, mundo</p>. El contenido, “hola, mundo”, enmarcado por una marca de tipo p (párrafo) que se abre y se cierra. El cierre lleva una barra “/” para diferenciarse de la apertura para poder meter marcas iguales unas dentro de otras sin que el ordenador que va a mostrar la página se vuelva mico. ¿Para qué querríamos hacer eso? Bueno, los programadores somos así; hacemos cosas por si acaso las usamos luego y porque queda elegante. Somos unos estetas.

El argumento se complica

Más adelante, otros seres humanos pensaron que las páginas eran algo muy aburrido y que tendrían que poder mostrar muñequitos en movimiento. Pese a la existencia de la Declaración Universal de los Derechos Humanos, a nadie le pareció una mala idea. Pronto se creó un completo lenguaje de programación para intercalar con el contenido de las páginas.

Estos programas formarían parte de la página. Cómo no. Por tanto tendrían que estar escritos también en un lenguaje legible por humanos. El programa que muestra las páginas —el navegador— ya no se limitaría a mostrar contenido siguiendo las directrices de las etiquetas que lo rodean: también ejecutará instrucciones. Se puede hacer de todo porque si no, no sería lo suficientemente útil y no lo querríamos para nada. Ajá.

Para liarla de verdad hace falta un ordenador

Con los ordenadores pasa lo mismo que en arquitectura y que en otras muchas disciplinas: a mayor complejidad, más probabilidad de fallo. Cuantas más piezas tienes, mayor es tu capacidad para cargártela. Se rompe antes un cacharro con cien mil botones que un plano inclinado. La web ya era un invento muy complejo.

Pero, además de complejo, el invento era abierto. Es —al menos teóricamente— posible interpretar una página de la web de cabeza. Yo confieso que escribo en HTML del tirón, así que muy difícil no puede ser. Ya tenemos los ingredientes ideales:

  • un sistema abierto por definición,
  • con una gran complejidad
  • y capaz de ejecutar programas que hicieran cosas.

Era cuestión de tiempo que los programas empezaran a “hacer cosas” de mayores, como colgar ordenadores, robar contraseñas, reproducirse a sí mismos y otras lindezas. Eso es lo que hacen los hackers. ¿Verdad?

Un error de página no encontrada en la actual web del Senado.

Lo que hacen los hackers

No. Los hackers no son mala gente. ¿Los pintores son mala gente? Pues los hackers tampoco. Un pintor es una persona que realiza tareas con útiles de pintura (gorda, fina, no es nuestro problema en este momento). Un hacker es un ser humano que usa su creatividad para encontrar hacks: soluciones no previstas a problemas no previstos. Soluciones originales, interesantes y —para un hacker— divertidas. Un hacker, sin la ‘k’, se dedica a hacer (esta forma de traducir podría considerarse un hack poco ingenioso).

Claro que los hackers se dedicaron a explotar un sistema tan goloso como la web para “hacer cosas”. Cómo evitarlo. Pero insisto: los hackers no son mala gente, o al menos no lo son por principio. Existía en los tiempos heroicos de las pantallas de fósforo verde, los módems y los discos de 8 pulgadas un código de “ética hacker” que impedía usar los conocimientos hallados para hacer el mal.

Sí, y en los años 50 se podía jugar en la calle. Hoy tenemos que distinguir entre “white hat hacking”, los buenos, y “black hat hacking”, los malos. Y las hordas de hackers regulares, como la chavalería de Anonymous. Que serán legión, pero que muy brillantes —en general, hay excepciones— no son.

Los puntos débiles

Así que tenemos, de un lado, un sistema complejo y abierto por diseño. Del otro, muchos pares de ojos sujetos en cabezas de gente con tiempo y ganas de divertirse. Uno de los más habituales es el fallo de XSS —malditos acrónimos de tres letras (A3L)… Un error de XSS (Cross Site Scripting, o “programas de un sitio web que se ejecutan en otro”, puesto en claro), es un tipo de vulnerabilidad. Un sospechoso habitual en el posible catálogo de puntos débiles de una web. Un agujerito que permite al hacker insertar en una página cosas que sus creadores no pusieron ahí.

Los errores de XSS vienen, como los helados y los quarks, en varios sabores. Por un lado tenemos los errores no persistentes: el problema no deja huella en la web hackeada. Eso no significa que no pueda, potencialmente, dañar su imagen ante un usuario. O aprovechar errores adicionales en los sistemas de los usuarios para infectarlos con virus más problemáticos. Mucha gente —profesionales del ramo incluidos— afirman que si la web que sufre la vulnerabilidad no se ve alterada, entonces no ha sido hackeada: esto no es así. Se está confundiendo el hackeo (una actividad general) con ataques más particulares, como el defacing —que consiste en cambiar la apariencia o el contenido de una web, con fines de denuncia, parodia o daño comercial, pero para todos sus usuarios a la vez.

Por otro lado, una vulnerabilidad XSS podría ser persistente: es decir, puede realizar cambios permanentes en el contenido de la web. Este tipo de agujero es más serio, ya que abre la posibilidad de infectar no solo al usuario, sino también al propio programa que se ejecuta en el servidor de la web.

Hay trampa porque hay ley

Notad que sin la capacidad de añadir a ciertas webs contenidos que sus creadores no previeron las seis quintas partes de nuestra moderna Internet se convertirían en algo más aburrido que un saco de cantos rodados (salvo para un geólogo; los geólogos de la sala, haced el favor de imaginar otra metáfora). Twitter, Facebook, Youtube, Hotmail… Todos dependen, para su éxito, de que completos extraños puedan “subir cosas” para diversión del respetable. El reto consiste en que esas “cosas”, ese contenido, se coloque donde debe y solo ahí.

Si lleváis un tiempo en Twitter tal vez recordéis como hace un par de años alguien descubrió cómo esconder en un mensaje de Twitter un programita que, solo pasando el ratón por encima del tweet infectado, lo reenviara a todos nuestros contactos. Un gusano en toda regla, como los que llevan recorriendo servidores de Internet desde los años 80, cortesía de una inteligente inyección de código que estaba donde no debía estar.

¿Qué ha pasado en el Senado?

La nueva web del Senado de España tenía un pequeño problema de este tipo: era posible modificar la dirección de una de sus páginas para que mostrara rótulos a voluntad. Te pasan un enlace en un correo, por Facebook o de cualquier otro modo diciendo “mira lo que se han comprado en el Senado por 430000 eurazos” y te encuentras el sitio auténtico mostrando el inmortal clásico de las pintadas: “tonto el que lo lea”.

¿Es la nueva web del Senado insegura? ¿Hemos pagado casi medio millón de nuestros escasos fondos para que unos hackers vietnamitas modifiquen la constitución y hagan a Rambo jefe del Estado español —para echarse unas risas? Hasta donde sabemos, este fallo no ha permitido ejecutar código —ni maligno, ni de ninguna otra clase. Solo mostraba rótulos que debían estar pegados en una dirección “especial”, donde podían verse si se miraba con un poco de detenimiento. La web en sí no se vio alterada. Es una versión particularmente inocua de vulnerabilidad XSS no persistente.

¿Importa?

No, mientras nadie encuentre algo más grave. El problema concreto parece ser una soberana tontería, que sin duda podrá corregir un becario —o un programador senior de salario equivalente. Lo que no es ya nimio es que la calidad del código de la web sea tan pobre. Que se haya optado por desarrollar componentes en lugar de usar otros que ya existen en el mercado, incluso sin costes de licencia. Que todo el contenido del Senado anterior a la nueva web haya desaparecido de los buscadores. Que exista en la web una directiva que prohíba a esos mismos buscadores indexar sus nuevas páginas. Que, según las condiciones de uso, un usuario no pueda alterar la apariencia de la web —ni siquiera para usar tecnologías de accesibilidad para discapacitados. Que no se haya optado por tecnologías abiertas y auditables por cualquier interesado en una de las instituciones públicas más visibles del Estado (iba a escribir “importante”, pero me ha dado un calambre).

Todo eso es subsanable. Me gusta decir que en informática todo tiene solución: solo hay que echar horas y euros. Desgraciadamente, el Senado de España se comporta como si le sobraran los euros. Cualquiera diría que eso no se ajusta a la realidad. ¿Le sobrarán también muchas horas?