8000 Evitar que múltiples comunidades compartan canal de ofertas para prevenir suplantación y gestión ilegítima de disputas · Issue #678 · lnp2pBot/bot · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
Evitar que múltiples comunidades compartan canal de ofertas para prevenir suplantación y gestión ilegítima de disputas #678
Open
@Santy182

Description

@Santy182

Actualmente existe una vulnerabilidad que permite a un usuario malicioso crear una nueva comunidad y configurar como canal de ofertas un canal que ya pertenece a una comunidad legítima, pero establecer su propio canal de disputas. Esto permite que el usuario publique órdenes en el canal legítimo y gestione sus propias disputas (como solver de su comunidad), comprometiendo la integridad del sistema.

Propuesta de solución

1. Validar unicidad del canal de ofertas

Al momento de crear o actualizar una comunidad, debe verificarse que el canal de ofertas no esté ya registrado en otra comunidad. Si ya está en uso, debe mostrarse un error y requerir otro canal.

Archivo: bot/modules/community/scenes.ts

// Ejemplo dentro del paso de asignación de canal de ofertas
const existingCommunity = await Community.findOne({ order_channel: channel });
if (existingCommunity) {
  return ctx.reply('Este canal ya está en uso por otra comunidad. Elige otro canal.');
}

2. Validar solver en disputas

En la lógica de toma/resolución de disputas, se debe asegurar que sólo solvers de la comunidad propietaria de la orden puedan tomar o resolver la disputa, usando una validación estricta entre el solver y la comunidad de la orden.

Archivo: bot/modules/dispute/actions.ts

import { isDisputeSolver } from '../../../util'; // Asumiendo que existe

export const takeDispute = async (ctx: MainContext) : Promise<void> => {
  // ...código previo...
  const order = await Order.findOne({ _id: orderId });
  if (order === null) throw new Error("order not found");
  const dispute = await Dispute.findOne({ order_id: orderId });
  if (dispute === null) throw new Error("dispute not found");

  // Validar que el usuario sea solver de la comunidad de la orden
  const community = await Community.findOne({ _id: order.community_id });
  const solver = await User.findOne({ tg_id: tgId });
  if (!isDisputeSolver(community, solver)) {
    return await globalMessages.notAuthorized(ctx, tgId);
  }

  // ...resto del código...
};

3. Auditoría y limpieza

Revisar las comunidades existentes para detectar canales de ofertas duplicados y corregirlas manualmente si es necesario.


Esto evitará que un usuario pueda suplantar la legitimidad de otra comunidad y gestionar disputas de órdenes que no le pertenecen.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workinghelp wantedExtra attention is needed

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0