highCWE-862

Funciones RPC Sin Autenticación

Las funciones de base de datos de Supabase (RPC) son invocables desde el cliente sin verificar auth.uid(), permitiendo a usuarios anónimos ejecutar operaciones privilegiadas.

Cómo Funciona

Supabase expone funciones PostgreSQL a través del endpoint RPC, haciéndolas invocables desde la librería cliente. Si una función no verifica auth.uid() o no checa el rol del usuario, cualquier usuario anónimo puede invocarla. Esto es especialmente peligroso para funciones que modifican datos, realizan operaciones admin o retornan información sensible. A diferencia de tablas con RLS, las funciones se ejecutan con los privilegios del owner de la función (típicamente el superusuario postgres), bypaseando todas las políticas RLS.

Código Vulnerable
CREATE OR REPLACE FUNCTION delete_user_data(target_user_id uuid)
RETURNS void AS $$
BEGIN
  DELETE FROM public.profiles WHERE id = target_user_id;
  DELETE FROM public.documents WHERE user_id = target_user_id;
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;
Código Seguro
CREATE OR REPLACE FUNCTION delete_user_data()
RETURNS void AS $$
BEGIN
  IF auth.uid() IS NULL THEN
    RAISE EXCEPTION 'Not authenticated';
  END IF;
  DELETE FROM public.profiles WHERE id = auth.uid();
  DELETE FROM public.documents WHERE user_id = auth.uid();
END;
$$ LANGUAGE plpgsql SECURITY DEFINER;

Ejemplo Real

En 2024, una app de gestión de tareas construida en Supabase tenía una función RPC que otorgaba roles admin. La función aceptaba un user_id como parámetro sin verificar auth.uid(), permitiendo a cualquier usuario anónimo promoverse a admin y acceder a todos los datos del workspace.

Cómo Prevenirlo

  • Siempre verifica auth.uid() IS NOT NULL al inicio de cada función RPC
  • Usa auth.uid() en vez de aceptar user IDs como parámetros
  • Prefiere SECURITY INVOKER sobre SECURITY DEFINER cuando sea posible
  • Revoca EXECUTE en funciones de los roles anon y authenticated si no se necesitan

Tecnologías Afectadas

SupabaseNode.jsNext.jsReact

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas