DEV Community

Audit with Proof
Audit with Proof

Posted on

Auditorio de draw.io segunda parte

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:
Enter fullscreen mode Exit fullscreen mode
 ```bash
 git clone https://github.com/albrth647-png/electron-security-audit
 cd electron-security-audit
 node evidence/verify-evidence.mjs
 ```
Enter fullscreen mode Exit fullscreen mode
 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.
Enter fullscreen mode Exit fullscreen mode

Top comments (0)