Manipulacion de Precios
Aceptar precios del cliente en vez de buscarlos del lado del servidor permite a los atacantes modificar requests de checkout y comprar productos al precio que elijan.
Cómo Funciona
Cuando una aplicacion de e-commerce envia el precio al servidor como parte del request de checkout, los atacantes pueden interceptarlo y modificarlo. Usando las herramientas de desarrollador del navegador o un proxy como Burp Suite, cambian el precio de $99.99 a $0.01 antes de que el request llegue al servidor. Si el servidor confia en el precio proporcionado por el cliente y crea el payment intent de Stripe o procesa la orden con ese monto, el atacante obtiene el producto casi gratis. Esta vulnerabilidad es sorprendentemente comun en aplicaciones que pasan datos de precio a traves de campos de formulario ocultos, variables JavaScript o bodies de requests de API en vez de buscar el precio canonico de la base de datos del lado del servidor.
app.post('/api/checkout', async (req, res) => {
const { productId, price, quantity } = req.body;
const session = await stripe.checkout.sessions.create({
line_items: [{ price_data: {
currency: 'usd',
unit_amount: price, // Price from client!
product_data: { name: req.body.productName }
}, quantity }],
mode: 'payment'
});
res.json({ url: session.url });
});app.post('/api/checkout', async (req, res) => {
const { productId, quantity } = req.body;
const product = await db.product.findUnique({ where: { id: productId } });
if (!product) return res.status(404).json({ error: 'Product not found' });
const session = await stripe.checkout.sessions.create({
line_items: [{ price: product.stripePriceId, quantity }],
mode: 'payment'
});
res.json({ url: session.url });
});Ejemplo Real
En 2023, una vulnerabilidad de manipulacion de precios en una plataforma importante de delivery de comida permitia a los usuarios modificar totales de ordenes via requests de API. Los atacantes cambiaron precios a $0.01 y realizaron miles de ordenes antes de que el problema fuera detectado, resultando en perdidas financieras significativas para la empresa.
Cómo Prevenirlo
- Nunca aceptes precios del cliente — siempre busca los precios desde la base de datos del lado del servidor
- Usa Stripe Price IDs almacenados en tu base de datos en vez de montos dinamicos con price_data
- Valida los montos totales del lado del servidor antes de crear payment intents
- Registra y genera alertas en ordenes donde el monto cobrado difiere del precio esperado del catalogo
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Condicion de Carrera en Pagos
highOperaciones de lectura-modificacion-escritura en pagos sin transacciones de base de datos permiten a los atacantes explotar ventanas de tiempo y gastar el mismo saldo multiples veces.
Feature Flags Expuestos
lowFeature flags incluidos en el bundle de JavaScript del frontend revelan funciones no lanzadas, configuraciones internas de testing y superficies de ataque potenciales a cualquiera que inspeccione el codigo.
Rutas de Debug en Produccion
mediumRutas de desarrollo y testing como /debug, /test, /seed o /api/dev dejadas activas en produccion exponen datos internos, bypassean autenticacion o permiten manipulacion de estado.
Escalacion de Privilegios
highEndpoints 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.