Introducció

La deserialització insegura és una vulnerabilitat que es produeix quan una aplicació deserialitza dades no confiables. Aquest procés pot permetre a un atacant executar codi arbitrari, manipular dades o provocar altres comportaments maliciosos. La deserialització és el procés de convertir dades d'un format serialitzat (com JSON, XML o binari) en un objecte utilitzable per l'aplicació.

Conceptes Clau

  • Serialització: Procés de convertir un objecte en un format que es pot emmagatzemar o transmetre.
  • Deserialització: Procés invers a la serialització, on les dades serialitzades es converteixen de nou en un objecte.
  • Dades no confiables: Dades que provenen de fonts externes o no verificades, com ara usuaris finals, API externes, etc.

Exemples de Deserialització Insegura

Exemple 1: Deserialització de JSON en Python

import json

# Dades JSON no confiables
dades_json = '{"nom": "Usuari", "rol": "admin"}'

# Deserialització insegura
usuari = json.loads(dades_json)

print(usuari['nom'])
print(usuari['rol'])

En aquest exemple, si les dades JSON provenen d'una font no confiable, un atacant podria manipular el contingut per incloure codi maliciós.

Exemple 2: Deserialització d'Objectes en Java

import java.io.*;

class Usuari implements Serializable {
    public String nom;
    public String rol;
}

public class DeserialitzacioInsegura {
    public static void main(String[] args) {
        try {
            // Dades binàries no confiables
            byte[] dades = obtenirDadesNoConfiables();

            // Deserialització insegura
            ByteArrayInputStream bis = new ByteArrayInputStream(dades);
            ObjectInputStream ois = new ObjectInputStream(bis);
            Usuari usuari = (Usuari) ois.readObject();

            System.out.println(usuari.nom);
            System.out.println(usuari.rol);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static byte[] obtenirDadesNoConfiables() {
        // Simulació de dades no confiables
        return new byte[]{/* dades binàries */};
    }
}

En aquest cas, si les dades binàries provenen d'una font no confiable, un atacant podria enviar dades manipulades per executar codi maliciós en el sistema.

Exercici Pràctic

Exercici: Identificació de Deserialització Insegura

  1. Objectiu: Identificar i corregir una vulnerabilitat de deserialització insegura en un fragment de codi.
  2. Codi Insegur:
import pickle

# Dades binàries no confiables
dades_binàries = obtenirDadesNoConfiables()

# Deserialització insegura
objecte = pickle.loads(dades_binàries)

print(objecte)
  1. Tasques:
    • Identificar per què el codi és insegur.
    • Proposar una solució per evitar la deserialització insegura.

Solució Proposada

  1. Identificació de la Vulnerabilitat:

    • El mòdul pickle en Python permet la deserialització d'objectes arbitràriament, cosa que pot ser explotada per executar codi maliciós si les dades provenen d'una font no confiable.
  2. Solució:

    • Utilitzar formats de dades més segurs per a la deserialització, com JSON, i validar les dades abans de deserialitzar-les.
import json

# Dades JSON no confiables
dades_json = obtenirDadesNoConfiables()

# Validació de les dades
try:
    objecte = json.loads(dades_json)
    print(objecte)
except json.JSONDecodeError:
    print("Dades no vàlides")

Errors Comuns i Consells

  • No validar les dades abans de deserialitzar-les: Sempre valida les dades abans de deserialitzar-les per assegurar-te que són segures.
  • Utilitzar formats de deserialització insegurs: Evita utilitzar formats de deserialització que permetin l'execució de codi arbitrari, com pickle en Python o objectes serialitzats en Java.
  • No aplicar controls d'accés: Assegura't que només les dades de fonts confiables es deserialitzin.

Conclusió

La deserialització insegura és una vulnerabilitat crítica que pot tenir conseqüències greus per a la seguretat de les aplicacions web. És essencial comprendre els riscos associats amb la deserialització de dades no confiables i implementar mesures de seguretat adequades per mitigar aquests riscos. En el proper tema, explorarem l'ús de components amb vulnerabilitats conegudes i com evitar aquest tipus de problemes.

Curs d'OWASP: Directrius i Estàndards per a la Seguretat en Aplicacions Web

Mòdul 1: Introducció a OWASP

Mòdul 2: Principals Projectes d'OWASP

Mòdul 3: OWASP Top Ten

Mòdul 4: OWASP ASVS (Application Security Verification Standard)

Mòdul 5: OWASP SAMM (Software Assurance Maturity Model)

Mòdul 6: OWASP ZAP (Zed Attack Proxy)

Mòdul 7: Bones Pràctiques i Recomanacions

Mòdul 8: Exercicis Pràctics i Casos d'Estudi

Mòdul 9: Avaluació i Certificació

© Copyright 2024. Tots els drets reservats