highCWE-269A01:2021

Escalacion de Privilegios

Endpoints de actualizacion de perfil que aceptan campos de rol o permisos del body del request permiten a los usuarios promoverse a admin agregando role: 'admin' a su request de actualizacion.

Cómo Funciona

La escalacion de privilegios ocurre cuando una aplicacion permite a los usuarios modificar su propio rol o permisos a traves de endpoints de actualizacion de perfil. Si el servidor pasa ciegamente el body del request a una actualizacion de base de datos, un atacante puede agregar campos extra como role: 'admin' o isAdmin: true a su request de actualizacion de perfil. El servidor actualiza todos los campos proporcionados, incluyendo el rol, efectivamente promoviendo al atacante a administrador. Esta es una forma de asignacion masiva que apunta especificamente a campos de autorizacion. Incluso si el formulario del frontend no incluye un campo de rol, el atacante puede agregarlo directamente al request de API usando curl o las herramientas de desarrollador del navegador.

Código Vulnerable
app.patch('/api/profile', auth, async (req, res) => {
  const updated = await db.user.update({
    where: { id: req.userId },
    data: req.body  // Attacker sends { name: 'Hacker', role: 'admin' }
  });
  res.json(updated);
});
Código Seguro
app.patch('/api/profile', auth, async (req, res) => {
  const { name, email, avatar } = req.body;
  const updated = await db.user.update({
    where: { id: req.userId },
    data: { name, email, avatar }  // Only allowed fields
  });
  res.json(updated);
});

Ejemplo Real

En 2022, una vulnerabilidad de escalacion de privilegios en GitLab (CVE-2022-1162) permitia a cualquier usuario autenticado establecer un password hardcodeado en cuentas provisionadas a traves de un proveedor OmniAuth. Esto efectivamente daba a los atacantes acceso a cualquier cuenta creada a traves de SSO, incluyendo cuentas de admin.

Cómo Prevenirlo

  • Desestructura explicitamente y permite solo campos autorizados del body del request
  • Nunca pases req.body directamente a operaciones de actualizacion de base de datos
  • Usa schemas Zod que solo incluyan campos editables por el usuario para actualizaciones de perfil
  • Implementa endpoints separados solo para admin para cambios de rol con verificaciones de autorizacion adicionales

Tecnologías Afectadas

Node.jsReactNext.jsPythonGoJavaPHP

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas