Evangelizando la Mentira Correcta
Compilar antes era control total sobre lo que corría en tu máquina. Hoy es fe ciega en desconocidos con acceso root, y lo venden como "Seguridad y Progreso" cuando el anterior Modus operandi debería seguir siendo la puta línea roja, no la nostalgia del abuelo.
"Que el binario final sea seguro no significa una mierda si el proceso que lo parió está comprometido."
La industria lleva años invirtiendo en que el ejecutable no tenga buffer overflows, use-after-free, data races. Bien. Mientras tanto nadie audita qué scripts de desconocidos se ejecutan con tus privilegios cada vez que compilas. El auditor marca la casilla "sin vulnerabilidades de memoria" y se va a comer. Al becario que acaba de instalar la dependencia nadie le pregunta de dónde coño la sacó.
Es una causa formal disfrazada de causa final: el ecosistema te vende la forma del artefacto (type-safe, memory-safe) como si fuera la finalidad completa del sistema, cuando la finalidad real —que lo que se ejecuta en tu máquina sea confiable— depende de una causa eficiente que nadie está mirando: el propio proceso de build...
Puedes tener el binario más seguro del mundo y a la vez haber firmado con tus credenciales de root la ejecución de cien scripts que nunca leíste. (Facepalm)
El mismo cuento, tres veces
Python vendió "baterías incluidas" y nunca resolvió su infierno de packaging, solo lo maquilló cuatro veces distintas. Node.js vendió "un lenguaje para todo" y regaló postinstall como vector de malware a escala industrial, cortesía de un ejército de junior, contratados por baratos, que copian-pegan de Stack Overflow sin leer una línea. Ahora Rust vende "memory safety elimina toda una clase de bugs" mientras build.rs y las macros procedurales ejecutan lo que les salga de los huevos en tu máquina, y rust-analyzer las expande solo con abrir el proyecto en el editor. Ni hace falta compilar. No seas gilipollas, abre los ojos: basta con tener curiosidad.
Cada oleada, el mismo guion: evangelista con charla en conferencia pagada por la fundación, adopción corporativa en masa porque contratar es más barato que auditar, y el mismo agujero de siempre con maquillaje nuevo y un logo más bonito.
A un verdadero profesional, a uno que ama su profesión, esto le tiene que oler a mierda a la legua, porque ya lo vio con Python y con npm, y sabe reconocer un patrón cuando se repite por tercera vez con el mismo desenlace. Pero nadie señala el elefante porque señalarlo no vende: el vendor "auditamos tu build" no vende, vende "cambia de lenguaje y duerme tranquilo" —y esa mentira financia sueldos, conferencias, y contratos enterprise. El silencio no es ignorancia, es modelo de negocio. El día que RustSec o crates.io admitan en portada que no escanean malware en upload, se acaba la fiesta de la narrativa y empieza el trabajo real de auditar, que es lento, aburrido, y no cabe en una keynote de veinte minutos.
¿A quién le importa esto?
--> Al sysadmin de CI/CD que descubre que cargo build lleva seis meses filtrando secretos y se pregunta cómo coño se lo va a explicar al comité de seguridad.
--> Al dev que audita un árbol de 400 dependencias transitivas, ninguna revisada, y se da cuenta de que "confiar en la comunidad" es la misma frase que usaba el que le vendió humo en 2015.
--> Al auditor que firma el binario, jamás pregunta cómo se construyó, y luego se sorprende cuando el incidente sale en el CVE feed con su nombre debajo.
--> Al CTO que migró a Rust "porque es seguro", no tiene ni puta idea de qué hace build.rs, y se cree protegido porque lo leyó un ponente en una diapositiva con luces de neón.
--> Al Friki del homelab. Al Nerd. Al Prepper tecnológico. Al Rarito de la autosoberanía digital... A todos esos que llevan años evangelizando la soberanía tecnológica, tienen un clúster de Kubernetes en el garaje, un NAS con ECC y tres UPS redundantes. A esos que abandonaron la nube "por seguridad", cifran hasta la lista de la compra y se creen inmunes porque todo lo alojan ellos... Los mismos que luego compilan cualquier repo con más de 3.000 estrellas en GitHub, ejecutan build.rs de desconocidos con permisos sobre toda su red doméstica y descubren que la cadena de suministro enmierda también llega hasta el rack del trastero. Porque la única amenaza nunca fue Google.
Si no eres ninguno de estos, probablemente seas parte del problema y aún no lo sabes — o peor, lo sabes y prefieres no mirar, porque mirar significa auditar 400 crates a mano y eso no cabe en el planning.
Y luego está el otro perfil, el que de verdad me toca los cojones: el fanboy de turno que ha convertido el lenguaje en secta. Al que le enseñas un CVE documentado con fuente y advisory, y en vez de auditar su Cargo.lock te suelta que "eso es FUD" o que "eso ya está arreglado en nightly". Ese no tiene argumento, tiene fe. Y la fe no se refuta con datos porque no fue construida con datos —se construyó con marketing, con una charla bonita y con la necesidad de sentirse parte del bando ganador. A ese no le hablo...
Le hablo al que todavía es capaz de leer un advisory y cambiar de opinión si el dato lo justifica, que es la única línea roja que de verdad importa aquí: la que separa a quien audita de quien reza... ¿Eres tú?
Cómo lo haría "Papi" Occam (tras hablar con "Tito" Faraday)
Sin épica, sin auditoría de 400 crates a mano, sin joderte el planning.
No vengo a decirte que dejes Rust, Node o Python. Vengo a decirte que si vas a seguir jugando con fuego, al menos ponte condón.
Esto no es una checklist de compliance — es lo mínimo para que un build.rs comprometido no se folle tu ~/.ssh mientras tú miras tutoriales en YouTube.
-
El build no toca red, y punto.
docker run --network none --read-only -v $(pwd):/src:ro. Si tu dependencia necesita internet para compilar, ya tienes la primera señal de alarma y ni siquiera has llegado albuild.rs. Cero coste, una línea. -
Lockfile committeado y
--frozen/--lockeden CI, siempre.Cargo.lock,package-lock.json,poetry.lock. Si no fijas hash, cada build es una tómbola. Esto no es opcional. -
--ignore-scriptsen npm por defecto.Actívalo dependencia a dependencia solo cuando de verdad lo necesites, no porque
npm installte lo pida amablemente. Pero ojo:gitdeps siguen ejecutándose y un.npmrcmalicioso redirige el binario. En Rust no hay flag mágico —cargo-denylistabuild.rspero no audita su interior, ycargo-vetes registro manual. La única estrategia que frena unbuild.rsmalicioso: vuelve al punto 1. Que falle el pipeline, no que falle tu sistema. -
Usuario de build desechable, sin sudo, sin secretos.
Si el contenedor se compromete, lo matas y no se llevó nada. Kubernetes 101 aplicado a tu toolchain.
-
SBOM automático en el pipeline.
cargo-cyclonedx,npm sbommetidos en el mismo flujo. Se genera solo mientras compila. -
rust-analyzery compañía: el editor no es tu guardia de seguridad.No existe "modo ajeno" que desactive proc macros automáticamente. El peligro no es la expansión de macros, es el código arbitrario que ejecutan. Un becario que clona el repo del cliente y abre VS Code sin pensar sigue siendo tu vector de entrada gratis. Sandbox o nada — y el sandbox es el punto 1, no una config del editor.
Nada de esto te obliga a auditar dependencia a dependencia. La idea es que el proceso de build deje de tener las llaves de tu casa.
Esto no es nuevo: es el mismo Defense-In-Depth que aplicas en producción, solo que nadie te lo enseñó para el build.
No hace falta fe. Como diría "Tito" Faraday: ¡Hace falta una jaula!
Pónla de una puta vez, idiota.
No me creas. Rompe las fuentes.
Todo lo que has leído aquí es lo cagado tras digerir todos estos datos públicos, informes oficiales y CVEs documentados. No es opinión, no es fe, no es "vibe"... Si tras esto sigues compilando como si crates.io fuera la comunidad del pesebre, el problema ya no es la industria: eres tú.
Pincha, lee, saca tus propias conclusiones. O sigue siendo el becario que instala sin leer.
- 70% Microsoft Security Response Center — A proactive approach to more secure code (2019) "The majority of vulnerabilities fixed and with a CVE assigned are caused by developers inadvertently inserting memory corruption bugs into their C and C++ code."
- NSA NSA — Software Memory Safety (CSI, noviembre 2022) "We have to consistently use memory safe languages and other protections when developing software to eliminate these weaknesses from malicious cyber actors." — Neal Ziring, NSA Cybersecurity Technical Director.
- CISA NSA / CISA — Memory Safe Languages: Reducing Vulnerabilities (PDF, junio 2025) 14 páginas de presión oficial. El documento conjunto más reciente.
- CRATES Socket.dev — Malicious crate mimicking finch exfiltrates credentials (2025) Typosquatting, impersonación de desarrollador real (radioman), 8 versiones de malware en 2 semanas, dependencia desanclada que entrega la última versión automáticamente.
- MISMATCH Adam Harvey — Published crate analysis: when code on crates.io does not match the repo (2021) Solo el 64% de los 500 crates más descargados pasan la verificación "gold star". 5 crates (1%) contienen archivos que no aparecen en el repo upstream. Crates no firmados criptográficamente.
- XZ Andres Freund — oss-security: backdoor in upstream liblzma/xz (2024) El backdoor estaba SOLO en los tarballs distribuidos, no en el repo git. Detectado por un retraso de 500ms en SSH. El committer era el atacante o estaba gravemente comprometido.
- FOUND Rust Foundation — Our members believe in the power of Rust Platinum: AWS, Google, Huawei, Meta, Microsoft. Silver: Arm, Canonical, 1Password, JetBrains, Mozilla, Sentry... Quién paga la música.
- DARPA DARPA — TRACTOR: Translating All C to Rust "The preferred approach is to use safe programming languages that can reject unsafe programs at compile time." ~14M$. No a Ada. No a CHERI. A Rust.
- OPENSSF OpenSSF — Supply Chain Integrity Working Group (Google, IBM, Microsoft) Isaac Hepworth (Google), Jay White (Microsoft), Melba Lopez (IBM). SLSA, S2C2F, Sigstore. El pipeline cerrado.
- PROSS Prossimo (ISRG) — Memory Safety Initiative La ONG que paga a Rust for Linux. Financiada por Alpha-Omega (Google + Microsoft). Aceptan donaciones en criptomonedas.
- DUAL_EC Ars Technica — Security experts: NIST encryption standard may have NSA backdoor (2007) "We have no way of knowing whether the NSA knows the secret numbers that break Dual_EC-DRBG." — Bruce Schneier. Confirmado por Snowden en 2013.
Si tras leer esto sigues sin auditar tu build, no eres un profesional. Eres un creyente. Y los creyentes no necesitan argumentos, necesitan pastores. Yo no soy pastor. Soy el tío que te dice que el pastor cobra y defiende sus propios intereses.volver a [Bitácora]