Introducción

La exposición de datos sensibles es una de las vulnerabilidades más críticas en aplicaciones web. Ocurre cuando una aplicación no protege adecuadamente la información confidencial, como datos personales, credenciales, información financiera, etc. Esto puede llevar a robos de identidad, fraudes y otras actividades maliciosas.

Conceptos Clave

  1. Datos Sensibles: Información que, si se expone, puede causar daño a individuos o organizaciones. Ejemplos incluyen números de tarjetas de crédito, números de seguridad social, credenciales de usuario, etc.
  2. Cifrado: Proceso de convertir datos en un formato ininteligible para protegerlos de accesos no autorizados.
  3. Hashing: Técnica para transformar datos en una cadena de caracteres de longitud fija, que no puede revertirse a su forma original.
  4. Transmisión Segura: Uso de protocolos como HTTPS para proteger los datos mientras se transmiten entre el cliente y el servidor.

Ejemplos de Exposición de Datos Sensibles

  1. Almacenamiento Inseguro: Guardar datos sensibles en texto plano en bases de datos, archivos de log, etc.
  2. Transmisión Insegura: Enviar datos sensibles a través de conexiones no cifradas (HTTP en lugar de HTTPS).
  3. Falta de Protección en el Frontend: Exponer datos sensibles en el código fuente del lado del cliente (JavaScript, HTML).

Ejemplo Práctico

Código Inseguro

// Almacenamiento inseguro de contraseñas en texto plano
String password = "userPassword";
database.save(password);

Código Seguro

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

// Almacenamiento seguro de contraseñas usando hashing
public class SecureStorage {
    public static String hashPassword(String password) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] hash = md.digest(password.getBytes());
        StringBuilder hexString = new StringBuilder();
        for (byte b : hash) {
            hexString.append(String.format("%02x", b));
        }
        return hexString.toString();
    }

    public static void main(String[] args) throws NoSuchAlgorithmException {
        String password = "userPassword";
        String hashedPassword = hashPassword(password);
        database.save(hashedPassword);
    }
}

Ejercicio Práctico

Ejercicio 1: Identificación de Datos Sensibles

Instrucciones:

  1. Revisa el siguiente fragmento de código y señala las partes donde se manejan datos sensibles de manera insegura.
  2. Propón soluciones para mejorar la seguridad.
import sqlite3

# Conexión a la base de datos
conn = sqlite3.connect('example.db')
c = conn.cursor()

# Creación de tabla
c.execute('''CREATE TABLE users (username text, password text)''')

# Inserción de datos sensibles en texto plano
c.execute("INSERT INTO users VALUES ('user1', 'password123')")

# Recuperación de datos sensibles sin cifrado
c.execute("SELECT * FROM users")
print(c.fetchall())

conn.commit()
conn.close()

Solución

  1. Identificación de Problemas:

    • Las contraseñas se almacenan en texto plano.
    • No se utiliza cifrado para proteger los datos en la base de datos.
  2. Propuesta de Soluciones:

    • Utilizar hashing para almacenar las contraseñas.
    • Asegurar la conexión a la base de datos si es remota.

Código Mejorado

import sqlite3
import hashlib

# Función para hashear contraseñas
def hash_password(password):
    return hashlib.sha256(password.encode()).hexdigest()

# Conexión a la base de datos
conn = sqlite3.connect('example.db')
c = conn.cursor()

# Creación de tabla
c.execute('''CREATE TABLE users (username text, password text)''')

# Inserción de datos sensibles con hashing
hashed_password = hash_password('password123')
c.execute("INSERT INTO users VALUES ('user1', ?)", (hashed_password,))

# Recuperación de datos sensibles (hash)
c.execute("SELECT * FROM users")
print(c.fetchall())

conn.commit()
conn.close()

Resumen

En esta sección, hemos aprendido sobre la exposición de datos sensibles, una de las vulnerabilidades más críticas en aplicaciones web. Hemos discutido conceptos clave como cifrado y hashing, y hemos visto ejemplos prácticos de cómo proteger datos sensibles tanto en almacenamiento como en transmisión. Además, hemos realizado un ejercicio práctico para identificar y solucionar problemas de seguridad relacionados con la exposición de datos sensibles.

En la siguiente sección, exploraremos otra vulnerabilidad crítica: A4: Entidades Externas XML (XXE).

Curso de OWASP: Directrices y Estándares para la Seguridad en Aplicaciones Web

Módulo 1: Introducción a OWASP

Módulo 2: Principales Proyectos de OWASP

Módulo 3: OWASP Top Ten

Módulo 4: OWASP ASVS (Application Security Verification Standard)

Módulo 5: OWASP SAMM (Software Assurance Maturity Model)

Módulo 6: OWASP ZAP (Zed Attack Proxy)

Módulo 7: Buenas Prácticas y Recomendaciones

Módulo 8: Ejercicios Prácticos y Casos de Estudio

Módulo 9: Evaluación y Certificación

© Copyright 2024. Todos los derechos reservados