1. Descripción técnica
HTTP Parameter Pollution consiste en enviar varias ocurrencias del mismo parámetro para provocar una interpretación inesperada. Frameworks, proxies, filtros y código de aplicación pueden conservar el primer valor, el último, todos los valores o una concatenación. Cuando dos componentes toman decisiones diferentes sobre la misma petición, un valor puede superar la validación y otro alcanzar la operación sensible.
Duplicar un parámetro no es automáticamente una vulnerabilidad. El problema aparece cuando la ambigüedad cambia una decisión de seguridad, como autorización, filtrado, redirección o selección de un recurso interno.
// renderizando diagrama…
2. Impacto
Puede permitir bypass de validaciones, modificación de lógica, acceso a recursos no previstos o encadenamientos con vulnerabilidades como SSRF y XSS. El impacto depende enteramente del consumidor final del valor ambiguo.
3. Condiciones necesarias
- La aplicación acepta parámetros repetidos.
- Dos etapas o componentes interpretan esas ocurrencias de forma diferente, o el código no maneja explícitamente la colección.
- La discrepancia afecta una decisión sensible.
- El atacante controla el orden y los valores enviados.
4. Validación y detección
Para cada parámetro se comparan al menos tres peticiones: valor original, valor alterado y ambas ocurrencias juntas. Se registra qué valor valida cada capa y cuál llega a la operación final. También deben probarse query strings, formularios y JSON cuando el parser admite claves duplicadas.
La mitigación y la detección requieren observar la petición antes y después de proxies o gateways, porque una capa puede normalizarla. Los logs que sólo conservan un valor pueden ocultar la discrepancia.
5. Explotación documentada en los writeups
5.1. 122-jan
/redirect recibe dos parámetros url idénticos dirigidos a /credz. La aplicación procesa las ocurrencias de forma inconsistente y termina solicitando el recurso desde su propio contexto. El resultado encadena HTTP Parameter Pollution con SSRF para superar la restricción de acceso interno.
6. Mitigación
- Rechazar parámetros duplicados cuando la operación espera un único valor.
- Normalizar la petición una sola vez antes de validar y ejecutar.
- Asegurar que proxy, framework y aplicación compartan la misma política de parsing.
- Validar el valor final que consumirá la operación sensible.
- Registrar todas las ocurrencias o la representación normalizada usada por el backend.
7. Clasificación
- CWE-235: Improper Handling of Extra Parameters
- Impacto contextual: bypass de controles y manipulación de lógica.