Hackearon el ecosistema Rust en vivo: la librería arrayref fue tu enemigo por 86 minutos

Hackearon el ecosistema Rust en vivo: la librería arrayref fue tu enemigo por 86 minutos

Hackearon el ecosistema Rust en vivo: la librería arrayref fue tu enemigo por 86 minutos

Hoy desperté con un mensaje en el canal de Rust que me heló la sangre. Un crate llamado proc-macro1, subido a crates.io esta madrugada, estaba ejecutando un payload malicioso durante el build de proyectos enteros. Como si eso fuera poco, descubrieron que la librería arrayref — usada por miles de proyectos en producción — había sido republicada con una dependencia oculta hacia ese crate malicioso.

El ataque que no duró ni una película

Según el reporte oficial del Rust Security Response Team, la versión arrayref@0.3.10 estuvo online solo 86 minutos. Parece poco, pero en el mundo de los sistemas de CI/CD es una eternidad. Cuantos builds corrieron en ese lapso? Cuantos desarrolladores ejecutaron cargo build sin sospechar que estaban descargando malware?

El atacante no solo subió un crate nuevo. Se las arregló para comprometer la cuenta del autor original de arrayref, internment y append-only-vec. Eso es lo más turbio: no fue una cuenta fake con nombre raro. Fue una cuenta legítima, con historia, con reputación. El equipo de seguridad de Rust no cree que el autor sea malicioso, sino que su computadora o credenciales fueron comprometidas.

Y eso me pone más nervioso que un ataque directo. Porque si el tipo que mantiene una librería popular puede ser víctima, cualquiera de nosotros puede serlo.

Los crates que hay que revisar

El equipo de Rust borró estas versiones de crates.io, pero si tu máquina ya las descargó, el daño puede estar hecho:

  • arrayref@0.3.10 (86 minutos online)
  • append-only-vec@0.1.9 (107 minutos online)
  • internment@0.8.7 (90 minutos online)
  • proc-macro1, proc-macro-en, aovine, arone, aronenao, tinymember (cualquier versión)

Si usas Rust, revisa tu carpeta ~/.cargo/registry/cache. Es caleta, pero puede salvarte.

Mi opinión: esto es solo la punta del iceberg

Yo trabajo con sistemas todos los días y la verdad es que confiamos ciegamente en registries de paquetes. npm, PyPI, crates.io, RubyGems… todos tienen el mismo problema: cualquiera puede publicar una nueva versión y tu pipeline la descarga y ejecuta sin preguntar. En Rust el riesgo es aún mayor porque los build.rs corren código nativo en tu máquina durante la compilación.

Hace un tiempo ya había visto ataques similares en npm y PyPI, pero verlo en Rust duele distinto. Rust se jacta de ser seguro por diseño, de evitar memory leaks y race conditions. Pero la cadena de suministro no la protege el borrow checker. La protege un login y una contraseña que, evidentemente, no son suficientes.

Creo que es hora de que los ecosistemas open source implementen firma de paquetes obligatoria, reproducible builds por defecto y alertas inmediatas cuando un mantenedor publica algo fuera de horario. No es paranoia: es sobrevivencia.

Hoy fue arrayref. Mañana puede ser tu librería favorita. Y probablemente ni te darás cuenta.

Fuente de inspiración: Supply chain attack on arrayref — Rust Blog

Comentarios

Aún no hay comentarios. ¿Por qué no comienzas el debate?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *