// SECURITY AUDIT

Informe de auditoría de seguridad

Confía, pero verifica — cada conclusión de la auditoría se publica aquí.

Resumen de la auditoría

3.ª ronda de revisión · 2026-08-18
📅 Fechas de auditoría: 2026-08-16 / 17 / 18 (tres rondas)📄 Alcance: los 279 archivos .dart de lib/ · android/ (servicio de grabación de pantalla revisado al completo) · docs/ · test/ (351 ejecutados)🔬 Método: verificación cruzada + lectura línea a línea + Semgrep SAST (634 reglas / 510 archivos) + comprobaciones dinámicas
0
Alto · todo corregido
0
Medio · todo corregido
0
Bajo · todo corregido
0
Info · confirmado
0
Diseños seguros

Veredicto: convergencia tras tres rondas — superficie de ataque a cero. Cifrado de sobre, comprobaciones de red salto a salto, sandbox con permisos y migración segura ante caídas se mantuvieron sólidos en las tres rondas; las nuevas zonas auditadas (grabación / flujos / traducción / empaquetador / voz) sin altos ni medios; Semgrep SAST: cero coincidencias en lib/. Listo para publicar.

🔧
Tres rondas, todo corregido: ronda 1 el 08-16 (secciones A–T, las 20) → auditoría cruzada 08-17 → re-verificación 08-18. En total 2 altos / 14 medios / 9 bajos + 4 informativos — todos los altos/medios cerrados, los bajos restantes corregidos el mismo día. Detalles en el registro de cambios.

Recorrido de auditoría y correcciones

Ronda 1 · 2026-08-16 (secciones A–T, las 20)

Alto · corregido
Las peticiones de IA seguían redirecciones — una cadena secuestrada podía alterar respuestas. Corrección: followRedirects=false explícito + excepción en 3xx (ai_task_client.dart:27-54).
Alto · corregido
Portapapeles sin protección para datos sensibles — cualquier herramienta podía leer. Corrección: protegido por defecto, requiere verificación del centro de seguridad.
Medio · corregido
Bypass de SSRF por variantes — IP octales / cortas / hexagonales sorteaban el bloqueo de redes privadas. Corrección: resolveIpLiteral analiza todas las variantes + 6 pruebas unitarias (http_safe.dart:72-127).
Medio · corregido
Puente de plugins sin límite de tamaño — un plugin malicioso podía agotar la memoria. Corrección: 10 MB almacenamiento / 50 MB archivo.
Medio · corregido
Escritura del portapapeles durante la restauración — podía contaminar datos nuevos. Corrección: mutex restorePaused (backup_service.dart).
Medio · corregido
Copiar archivos grandes bloqueaba el hilo principal — riesgo de ANR. Corrección: hilo en segundo plano + @Volatile (MainActivity.kt:1331-1343).
Bajo · corregido
6 hallazgos bajos — residuos de contraseña antes del bloqueo, URL en notificaciones, registros redundantes; todos corregidos.

Ronda 2 · 2026-08-17 (auditoría cruzada)

Alto · corregido
Cadena de inyección HTML en traducción (H1) — traducciones sin escapar al WebView. Corrección: escape HTML + CSP meta script-src 'none'.
Alto · mitigado
tool_keys en claro (H2) — claves de plugins en Hive sin cifrar. Mitigado: cifrado externo con contraseña de copia + guía de exportación forzada.
Medio · corregido
Endpoints IA http no-loopback — puntos de acceso en claro configurables. Corrección: isAllowedEndpoint aplicado a nivel global, de proyecto y de petición.
Medio · corregido
La importación externa sobrescribía datos — grave riesgo de pérdida. Corrección: importación combinada + reemplazo atómico.
Medio · corregido
Entradas en claro restantes (WebDAV / puente) — todas convertidas a HTTPS obligatorio o lista blanca de bucle local.

Ronda 3 · 2026-08-18 (re-verificación + nuevas zonas)

Superado
Nuevas zonas sin altos/medios — servicio de grabación / acciones de flujo / cadena de traducción / empaquetador APK / asistente de voz, todo limpio.
Bajo · corregido
3 hallazgos bajos corregidos el mismo día — retardo de flujo ilimitado (limitado a 10 min), redirecciones de traducción (_postNoRedirect), fuga de URL en notificaciones (solo host).
Superado
Escaneo Semgrep SAST — 634 reglas / 510 archivos, cero coincidencias en lib/.
Superado
Verificación en dispositivo: 10/10 — arranque / configuración de contraseña / reinicio tras cierre / bloqueo de portapapeles / rebloqueo de AppLock / confirmación de compartir.
Superado
Comprobaciones dinámicas — flutter analyze 0 errores · 351/351 pruebas superadas · compilación release OK.

Diseños confirmados como seguros

Los siguientes mecanismos superaron la verificación cruzada entre archivos y se confirman como seguros y eficaces:

#MecanismoVía de verificaciónEstado
1Protección por hardware de las claves de cifrado de HiveFlutterSecureStorage → Android Keystore / iOS Keychain
27/7 cajas sensibles cifradasverificado en main.dart; las cajas sensibles se abren todas con cipher
3Copias de seguridad forzosamente cifradassin contraseña → UnencryptedBackupException
4Algoritmo de cifrado de copiasPBKDF2 (300k rondas) + AES-256-GCM
5Cero overhead de registro en releasetodas las salidas de registro dentro de kDebugMode
6WebDAV con HTTPS forzadolas configuraciones HTTP se rechazan directamente
7eval / Function desactivados en el sandboxcobertura total con Object.defineProperty
8Inyección de CSP en el sandboxmeta tag + encabezado HTTP, doble vía
9Protección anti path traversalcomprobaciones de seguridad en importación de plugins y restauración de copias
10Otros puntos confirmadoscifrado de copias v3, flujo de restauración atómico, FLAG_SECURE en páginas sensibles, etc.
🔬
El informe completo (con ubicaciones de código y correcciones) está en docs/security_audit_report_2026-08-18_ZCode.md del proyecto.La seguridad es nuestro cimiento — informe cualquier problema a través de los comentarios.
MODO MATRIX: ACTIVADO — repite o pulsa ESC para salir