Muchas empresas españolas participan en los procedimientos de contratación pública puestos en marcha por las administraciones (de hecho, no son pocas aquellas cuya actividad depende en gran parte de dicha participación).
Para ellas, hace ya algunos años se puso en marcha el ROLECE (Registro Oficial de Licitadores y Empresas Clasificadas del Sector Público), que les permite reducir la burocracia agrupando toda la información necesaria para la administración pública en un único documento, tramitado electrónicamente.
¿Qué interés puede tener ROLECE para un hacktivista?
Pero, al mismo tiempo que facilita los trámites a las empresas, la información contenida en dicho registro podría resultar de gran utilidad a periodistas y activistas permitiendo cruzar información con otras bases de datos, y detectando así patrones 'curiosos'…
…por ejemplo: que determinados administradores de empresas tiendan a ser 'premiados' con contratos públicos con mayor frecuencia en regiones o municipios de determinado color político.
Así las cosas, no es de extrañar que el ROLECE haya terminado atrayendo la atención de Jaime Gómez-Obregón, ingeniero y 'hacktivista' conocido por haber puesto en marcha una plataforma de transparencia sobre la contratación pública en Cantabria y, más tarde, otra sobre las donaciones irregulares de Juan Carlos I:
"Uso la informática y los datos abiertos para aflorar, exponer y arrasar con chanchullos y corruptelas del Sector Público".
De modo que rápidamente detectó que se está incumpliendo la Ley de Contratos del Sector Público, que establece que el ROLECE "será público y se podrá acceder de forma abierta previa identificación", y que un reglamento "determinará modalidades y requisitos para la publicidad del Registro"… pero el acceso (mediante certificado digital) sólo da acceso a tu propia inscripción en el registro (si lo tuvieras), no al conjunto del mismo.
Así se 'hackeó' el ROLECE desde la web de Hacienda
Pero Gómez-Obregón ha explicado en un hilo de Twitter cómo logró descargar todos los datos del ROLECE 'hackeando' la web del servicio de Consulta de Expedientes de Clasificación de Empresas, que extrae sus datos del mismo.
"El buscador me obliga a consignar un mínimo de cuatro letras del nombre del contratista. ¿Por qué hacen esto? ¡Qué ganas de entorpecer el acceso a los datos públicos!".
"Podría descargar todo el listado por fuerza bruta, automatizando búsquedas iterativas (AAAA, AAAB … ZZZY, ZZZZ), pero sería una cochinada ineficiente: 26×26×26×26 = 456.976 búsquedas. Tiene que haber otra manera".
Nuestro protagonista pensó que la validación de los datos de entrada de un formulario web puede hacerse en dos puntos del ciclo petición-respuesta: bien en el cliente (el navegador del usuario), bien en el servidor (la aplicación de Hacienda).
"Siempre se recomienda validar los datos al menos en el servidor. Observo que el buscador de Hacienda valida los datos en el cliente. Mi única esperanza es que no estén haciendo validación también en el servidor".
A continuación, el hilo relata cómo un poco de código JavaScript le permitió sortear la validación de datos desde la consola de su navegador, reduciendo exponencialmente el número de búsquedas, primero, y facilitándole luego detectar una llamada GET al servidor mediante Ajax a la que el servidor respondía con un archivo JSON con la información que buscaba.
El siguiente paso fue lograr proporcionar un único carácter al servidor que fuera capaz de devolver todos los registros de la base de datos. Tras fallar el uso del espacio en blanco, el visualmente indistinguible caracter Unicode U+2800 (espacio vacío en Braille), logra el milagro:
Añado ocho filas más al cerdoscript y me reclino satisfecho en el estrado imaginario de mi putoamismo mientras descargan a mi portatil todos los registros.
— Jaime Gómez-Obregón (@JaimeObregon) March 20, 2022
¡Ahora tengo 10.747 expedientes más para cruzar con los datos de contratación! 🥳
Síganme para más recetas. 🤣 pic.twitter.com/3mcfFtwPwh
Ahora, y desde la maña de ayer, el servicio que Gómez-Obregón usó para acceder la base de datos está misteriosa y repentinamente inaccesible ('Service Unavailable') en la web del Ministerio de Hacienda. "Demasiado tarde", afirma en Twitter nuestro protagonista, "aquí tenéis el dataset liberado".
Para completar la jugada, se ha puesto en contacto (también a través de Twitter) con el portal EU Open Data para que deje de enlazar a la web de Hacienda y empiece a hacerlo al dataset abierto que descargó.
Ver 3 comentarios