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.
Top comments (0)