
@fcarvajalbrown
hace 64 días
82 bases MySQL expuestas: dos herramientas en Rust para que un municipio pueda cumplir la ley
El año pasado escaneé, con permiso y de forma pasiva, dominios de municipalidades chilenas. Encontré 82 bases MySQL escuchando a internet abierto, 221 paneles cPanel expuestos, 50 sitios sin SSL y 7 corriendo PHP 5, una versión que dejó de recibir parches de seguridad en 2019. Publiqué los hallazgos en Lupa Municipal. Ninguno de esos hallazgos era culpa del encargado de informática.
¿Por qué? Porque en la mayoría de esos municipios el encargado de informática es una persona, a veces con un ayudante a honorarios, que además arregla las impresoras del segundo piso. La Ley 21.663 le exige una postura de ciberseguridad defendible. La Ley 21.719 le va a exigir tratar el RUT de cada vecino con cuidado. Y el mercado le ofrece suites corporativas de veinte mil dólares al año que su presupuesto no paga y su equipo no puede operar.
Así que me puse a construir dos cosas. Las hice separadas y resultaron ser la misma pregunta partida en dos.
MuniANCI: la infraestructura
Escáner de cumplimiento para la Ley Marco de Ciberseguridad. Rust y Tauri 2, corre local, no manda un solo byte afuera.
Detecta software fuera de soporte con una base EOL empaquetada que funciona sin internet, revisa parches, antivirus, respaldo y configuración de red, y escupe un PDF. Tiene dos vistas, y esa fue la decisión de diseño que más me costó: Vista Municipal para el alcalde que necesita entender en qué está parado, Vista Técnica para quien tiene que arreglarlo el lunes. Una herramienta que solo habla en CVEs no sirve en una sala de concejo.
maskops: los datos
Plugin de Polars escrito en Rust. Enmascara datos personales dentro del dataframe, antes de que el CSV salga por correo.
Soporta IP, RUT chileno con validación de módulo 11, CPF brasileño y CURP mexicano. 39 tests. En mis benchmarks sobre un millón de filas corre unas cuatro mil veces más rápido que Presidio, y esa diferencia no es vanidad de benchmark: es la diferencia entre enmascarar en el pipeline y enmascarar "cuando haya tiempo".
pythonimport polars as pl
import maskops
df.with_columns(maskops.mask_rut("rut"))
Por qué van juntas
MuniANCI contesta "¿está mi infraestructura en regla?". maskops contesta "¿puedo trabajar con estos datos sin exponer a nadie?". Un municipio que pasa el escaneo y después le manda a un contratista externo un Excel con seis mil RUTs no cumplió nada. Movió el riesgo de lugar.
Las dos comparten la misma decisión de fondo, y no por casualidad: local, sin red, open source. Una herramienta de cumplimiento que sube tu inventario de vulnerabilidades a un servidor ajeno es, ella misma, una superficie de ataque. Un enmascarador de PII que llama a una API está exponiendo justo lo que dice proteger.
Las dos son gratis y las dos están a medio camino. Si trabajaste dentro de una institución pública, dime dónde se me fue la mano suponiendo capacidades que ahí no existen. Ese feedback vale más que una estrella en GitHub.
Los datos de un vecino no se protegen con una circular. Se protegen con código que corre.
Artículo más a fondo en LinkedIn: https://www.linkedin.com/pulse/82-municipios-con-mysql-expuesto-lo-que-la-anci-felipe-carvajal-brown-5riof/?trackingId=8Ya4t8dTQXmeC3JcZE73EQ%3D%3D

@fcarvajalbrown
hace 64 días
82 bases MySQL expuestas: dos herramientas en Rust para que un municipio pueda cumplir la ley
El año pasado escaneé, con permiso y de forma pasiva, dominios de municipalidades chilenas. Encontré 82 bases MySQL escuchando a internet abierto, 221 paneles cPanel expuestos, 50 sitios sin SSL y 7 corriendo PHP 5, una versión que dejó de recibir parches de seguridad en 2019. Publiqué los hallazgos en Lupa Municipal. Ninguno de esos hallazgos era culpa del encargado de informática.
¿Por qué? Porque en la mayoría de esos municipios el encargado de informática es una persona, a veces con un ayudante a honorarios, que además arregla las impresoras del segundo piso. La Ley 21.663 le exige una postura de ciberseguridad defendible. La Ley 21.719 le va a exigir tratar el RUT de cada vecino con cuidado. Y el mercado le ofrece suites corporativas de veinte mil dólares al año que su presupuesto no paga y su equipo no puede operar.
Así que me puse a construir dos cosas. Las hice separadas y resultaron ser la misma pregunta partida en dos.
MuniANCI: la infraestructura
Escáner de cumplimiento para la Ley Marco de Ciberseguridad. Rust y Tauri 2, corre local, no manda un solo byte afuera.
Detecta software fuera de soporte con una base EOL empaquetada que funciona sin internet, revisa parches, antivirus, respaldo y configuración de red, y escupe un PDF. Tiene dos vistas, y esa fue la decisión de diseño que más me costó: Vista Municipal para el alcalde que necesita entender en qué está parado, Vista Técnica para quien tiene que arreglarlo el lunes. Una herramienta que solo habla en CVEs no sirve en una sala de concejo.
maskops: los datos
Plugin de Polars escrito en Rust. Enmascara datos personales dentro del dataframe, antes de que el CSV salga por correo.
Soporta IP, RUT chileno con validación de módulo 11, CPF brasileño y CURP mexicano. 39 tests. En mis benchmarks sobre un millón de filas corre unas cuatro mil veces más rápido que Presidio, y esa diferencia no es vanidad de benchmark: es la diferencia entre enmascarar en el pipeline y enmascarar "cuando haya tiempo".
pythonimport polars as pl
import maskops
df.with_columns(maskops.mask_rut("rut"))
Por qué van juntas
MuniANCI contesta "¿está mi infraestructura en regla?". maskops contesta "¿puedo trabajar con estos datos sin exponer a nadie?". Un municipio que pasa el escaneo y después le manda a un contratista externo un Excel con seis mil RUTs no cumplió nada. Movió el riesgo de lugar.
Las dos comparten la misma decisión de fondo, y no por casualidad: local, sin red, open source. Una herramienta de cumplimiento que sube tu inventario de vulnerabilidades a un servidor ajeno es, ella misma, una superficie de ataque. Un enmascarador de PII que llama a una API está exponiendo justo lo que dice proteger.
Las dos son gratis y las dos están a medio camino. Si trabajaste dentro de una institución pública, dime dónde se me fue la mano suponiendo capacidades que ahí no existen. Ese feedback vale más que una estrella en GitHub.
Los datos de un vecino no se protegen con una circular. Se protegen con código que corre.
Artículo más a fondo en LinkedIn: https://www.linkedin.com/pulse/82-municipios-con-mysql-expuesto-lo-que-la-anci-felipe-carvajal-brown-5riof/?trackingId=8Ya4t8dTQXmeC3JcZE73EQ%3D%3D