Description
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.