Descripción de la vulnerabilidad
Saltcorn presenta una vulnerabilidad crítica de inyección SQL en sus rutas de sincronización móvil (POST /sync/load_changes y POST /sync/deletes). El problema radica en que los valores controlados por el usuario se interpolan directamente en plantillas SQL sin parametrización, validación de tipos o sanitización adecuada.
Mecanismo de explotación
La vulnerabilidad se encuentra específicamente en la función getSyncRows() del archivo packages/server/routes/sync.js, donde el parámetro maxLoadedId proveniente de req.body.syncInfos[tableName] se inserta directamente en consultas SQL sin validación. Cualquier usuario autenticado con role_id ≥ 80 (rol de usuario por defecto) que tenga acceso de lectura a al menos una tabla puede explotar esta falla.
Impacto y consecuencias
El impacto es crítico en múltiples dimensiones: Confidencialidad - permite la exfiltración completa de la base de datos incluyendo hashes de contraseñas de administradores, secretos de configuración y todos los datos de usuario; Integridad - en instancias con PostgreSQL permite ejecutar operaciones de escritura y DDL; Disponibilidad - posibilita la eliminación de tablas o corrupción de la base de datos. La vulnerabilidad también facilita la escalada de privilegios mediante el acceso a credenciales administrativas.
