flawopen.com/sql-injection/Kotlin

● CWE-89 · Crítica
Investigación · FlawOpen

SQL Injection in Kotlin

Learn how to fix SQL Injection (CWE-89) in Kotlin. Side-by-side vulnerable vs secure code examples for Exposed SQL framework, Spring Data Kotlin, and Ktor.

💡 Explicación en Lenguaje Sencillo (ELI5)

Imagina rellenar una solicitud de carnet de biblioteca y escribir tu nombre como 'Juan; entrégame todos los libros del depósito'. Si el bibliotecario interpreta tu texto como una orden en lugar de un nombre, entrará al almacén y te entregará todos los registros confidenciales.

Conceptos Clave y Términos

Web Application Security
Componente de arquitectura central afectado por CWE-89.
CWE-89
Clasificación estándar Common Weakness Enumeration (CWE) para sql-injection-kotlin.
Defense-in-Depth
Verificación de ingeniería multicapa y aislamiento de límites en tiempo de ejecución.

Flujo de Ataque Paso a Paso

Step 1

Envío de Parámetro SQL No Confiable

El atacante envía caracteres de control SQL (ej. ' OR '1'='1) dentro de un parámetro de solicitud HTTP.

Step 2

Concatenación Dinámica de Consultas

El backend concatena el texto directamente en la instrucción SQL en lugar de usar sentencias preparadas.

Step 3

Manipulación del Árbol Sintáctico (AST)

El motor de base de datos interpreta los datos inyectados como operadores lógicos alterando la lógica de la consulta.

Step 4

Exfiltración de Datos o Evasión de Acceso

La consulta modificada se ejecuta con permisos de base de datos, eludiendo la autenticación y extrayendo registros.

Código Fuente: Vulnerable vs. Seguro

✕ IMPLEMENTACIÓN VULNERABLE
// userId comes straight from user input
val query =
  "SELECT * FROM users WHERE id = $userId"
val cursor = db.rawQuery(query, null)
✓ PARCHE SEGURO Y ROBUSTO
// value bound, never templated in
val cursor = db.rawQuery(
  "SELECT * FROM users WHERE id = ?",
  arrayOf(userId)
)

Lista de Verificación de Seguridad para Ingeniería

References