Hify Agendar demostración
Informe de ejemplo ilustrativo

Una factura se devuelve a otra cuenta.

Un ejemplo ficticio de cómo se documenta un hallazgo, de la evidencia al retest. Los dominios, las cuentas y los datos son inventados.

Objetivos
app.example.com, api.example.com/v1
Tipo de prueba
Externo, con cuentas de prueba
Estado
En espera de la corrección de su equipo

Alcance

En alcance: app.example.com y api.example.com/v1, probados con dos cuentas de prueba autorizadas. Excluido por acuerdo: páginas de pago de terceros. La autenticación se confirmó al definir el alcance, y esta prueba externa no necesitó código fuente.

Cuentas de prueba

Cuenta de prueba A

session=test-account-a

Dueña de la factura demo-01

Cuenta de prueba B

session=test-account-b

Dueña de la factura demo-02

Solicitud y respuesta

Autenticados como la cuenta de prueba A, pedimos una factura que pertenece a la cuenta de prueba B.

Solicitud
GET /api/invoices/demo-02 HTTP/1.1
Host: api.example.com
Cookie: session=test-account-a
Respuesta200 OK
{ "invoice": "demo-02",
  "owner": "test account B"}

La API devolvió la factura de la cuenta B a la cuenta A. Un investigador reprodujo el resultado antes de reportarlo.

Pasos para reproducir

  1. Inicie sesión en app.example.com como la cuenta de prueba A.
  2. Envíe GET /api/invoices/demo-02 con la sesión de la cuenta A.
  3. Observe una respuesta 200 con la factura de la cuenta B.
  4. Repita como la cuenta B para confirmar que demo-02 pertenece a B.

Contexto de código Alcance propuesto de Defense

Recorrido: aplicación web, luego el servicio de facturación, luego la consulta de la factura. El handler carga una factura por id y la devuelve sin comprobar el dueño.

export async function getInvoice(req, res) {
  const invoice = await invoices.find(req.params.id)
  return res.json(invoice)   // owner not compared}

Enfoque sugerido: compare el dueño de la factura con la cuenta autenticada antes de devolverla.

Revisión de los desarrolladores

Sus desarrolladores revisan la orientación y deciden el cambio. Una versión posible:

  const invoice = await invoices.find(req.params.id)
+ if (!invoice || invoice.accountId !== req.session.accountId) {+   return res.status(403).end()+ }  return res.json(invoice)

Expectativa del retest

Después de la corrección de su equipo, repetimos la misma solicitud autorizada dentro del alcance.

Esperado después de la corrección de su equipo: 403
Las facturas de la propia cuenta A deben seguir devolviendo 200.
403