mediumCWE-915API3:2023

Autorización de Propiedades de Objeto Rota

La API permite a usuarios leer o modificar propiedades a las que no deberían tener acceso — mass assignment, exposición excesiva de datos o falta de control de acceso a nivel de campo.

Cómo Funciona

Esta vulnerabilidad combina dos problemas: mass assignment (el usuario puede setear propiedades como role o isAdmin incluyéndolas en el body del request) y exposición excesiva de datos (la API retorna más campos de los que el cliente necesita, incluyendo datos internos sensibles). Cuando una API acepta ciegamente todos los campos del body y los guarda en la base de datos, o retorna objetos completos sin filtrar, crea agujeros de seguridad serios.

Código Vulnerable
// Mass assignment — accepts any field
app.put('/api/profile', auth, async (req, res) => {
  await User.updateOne(
    { _id: req.user.id },
    { $set: req.body } // Accepts role, isAdmin, etc!
  );
});
Código Seguro
// Whitelist allowed fields
app.put('/api/profile', auth, async (req, res) => {
  const { name, email, avatar } = req.body;
  await User.updateOne(
    { _id: req.user.id },
    { $set: { name, email, avatar } }
  );
});

Ejemplo Real

En 2012, una vulnerabilidad de mass assignment en GitHub permitió a un usuario agregar su SSH key al repositorio de cualquier organización incluyendo el ID de la organización en el body del request. Fue descubierta por un investigador que agregó su key al repo de Rails.

Cómo Prevenirlo

  • Nunca pases req.body directo a operaciones de base de datos
  • Haz whitelist de campos permitidos por cada endpoint
  • Usa DTOs o schemas Zod para validar y filtrar input
  • Retorna solo campos necesarios en respuestas de API

Tecnologías Afectadas

Node.jsPythonGoJavaPHPC#

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas