TL;DR

 - Análisis **estático** del artefacto publicado de draw.io Desktop 32.4.1: 1.292 ficheros, 82 paquetes, 3,2 millones de nodos AST. Nada ejecutado. - **0 CVE activos** entre 5 candidatos revisados · **0 secretos** en el alcance · **1 ventana** que no se puede verificar (se declara, no se adivina). - **92.468 desconocidos** registrados con ID y **10 límites** declarados. Cualquiera puede recalcular la evidencia. --- ### El problema con «no encontramos nada» Casi todos los informes de seguridad terminan igual: «0 vulnerabilidades». Esa frase esconde lo único interesante: **qué no se comprobó**. Un escáner de dependencias mira tu `package.json`. No mira el `.asar` que va dentro del instalador, ni el Chromium que arrastra, ni las opciones con las que se construyó cada ventana. Y eso es justo donde vive el riesgo de una app Electron. ### Qué hice Analicé el artefacto que se descarga el usuario (el `.deb` de la 32.4.1), en estático y sin ejecutar nada: - **1.292 ficheros** inventariados · **34 MB** de texto · **3.267.398** nodos AST · **0** errores de parseo. - **82 paquetes** resueltos · **5** avisos de seguridad candidatos revisados. ### Qué encontré | Comprobación | Resultado | |---|---| | CVE activos | **0** entre 5 candidatos | | Secretos en el alcance | **0** | | Ventanas de Electron | 5 · **4 de 4** verificables bien configuradas · **1** con opciones dinámicas | | Superficie IPC | 35 operaciones · 29 handlers · **2** candidatos de validación de remitente | La quinta ventana se construye con opciones dinámicas: no se puede resolver leyendo el código. **No la llamé insegura. La declaré desconocida.** Igual con los 27 handlers restantes: no digo que no validen, digo que **no pude demostrar que validen**. Esa diferencia —«no lo sé» frente a «está bien»— es todo el producto. ### Lo que no pude comprobar - **92.468 desconocidos** explícitamente registrados, cada uno con un identificador. - **10 límites** declarados en la §6 del informe: análisis estático, sin ejecución, sin opciones dinámicas resueltas, sobre una versión concreta (un *snapshot*, no «la app»). **La ausencia de evidencia no es evidencia de ausencia.** Un informe que no lo dice está mezclando las dos cosas. ### Cómo verificarlo sin creerme El bundle de evidencia es público y se recalcula solo: 
 ```bash git clone https://github.com/albrth647-png/electron-security-audit cd electron-security-audit node evidence/verify-evidence.mjs ``` 
 El script recomputa `evidence_id = "ev_" + sha256(canonicalJson(semanticProjection(ev)))` desde los documentos publicados. Si un dato no cuadra, el hash no cuadra. También están los *runs* públicos de CI con Ghidra, y el `.deb` original para comparar el hash.