HTTP Parameter Pollution

circle-exclamation

Understanding HTTP Parameter Pollution (HPP)

What is HTTP Parameter Pollution?

HTTP Parameter Pollution (HPP) is a vulnerability that occurs when web applications accept and process multiple HTTP parameters with the same name in unexpected ways. Different technologies (web servers, application frameworks, WAFs) may handle duplicate parameters differently, leading to security bypasses, authentication issues, and application logic flaws.

Vulnerable Scenario Example

GET /search?category=books&category=electronics&price=100 HTTP/1.1
Host: example.com

Different Technology Handling:

  • PHP: Takes the last value β†’ category=electronics

  • ASP.NET: Takes the first value β†’ category=books

  • Python Flask: Creates an array β†’ category=['books', 'electronics']

  • Java Servlet: Takes the first value β†’ category=books

  • Node.js: Takes the last value β†’ category=electronics

How HPP Works

HPP exploits the inconsistent handling of duplicate HTTP parameters across different technologies in the application stack. When multiple components process the same HTTP request differently, attackers can craft requests that bypass security controls or alter application logic.

Parameter Processing Flow

  1. Client Request - Sends HTTP request with duplicate parameters

  2. Load Balancer/WAF - May process parameters one way

  3. Web Server - May process parameters differently

  4. Application Framework - May have different processing logic

  5. Backend Logic - Receives processed parameters

Impact and Consequences

  • Authentication Bypass - Bypassing login mechanisms

  • Authorization Bypass - Accessing restricted resources

  • Input Validation Bypass - Circumventing security filters

  • Logic Flaw Exploitation - Manipulating business logic

  • WAF/IDS Evasion - Bypassing security controls

  • Cache Poisoning - Polluting cache with malicious content

Technology-Specific Parameter Handling

Web Server Behavior

Apache HTTP Server:

  • Default: Concatenates parameters with &

  • Example: param=value1&param=value2 β†’ param=value1&value2

  • mod_rewrite: May behave differently based on configuration

Nginx:

  • Default: Takes the last parameter value

  • Example: param=value1&param=value2 β†’ param=value2

  • Can be configured to handle differently

IIS (Internet Information Services):

  • Default: Concatenates parameters with ,

  • Example: param=value1&param=value2 β†’ param=value1,value2

Application Framework Behavior

PHP:

ASP.NET:

Java Servlet:

Python Flask:

Node.js (Express):

Ruby on Rails:


Basic HPP Attack Techniques

Authentication Bypass

Login Form Parameter Pollution

Basic Authentication Bypass:

Scenario Analysis:

  • WAF/Security Filter: Sees username=admin&password=wrong β†’ Allows (wrong password)

  • Application Backend: Processes username=guest&password=guest β†’ Authenticates successfully

Advanced Login Bypass:

Real-World Example:

Multi-Factor Authentication Bypass

2FA Token Pollution:

SMS Code Bypass:

Authorization Bypass

Role-Based Access Control Bypass

Admin Role Escalation:

Permission Override:

Resource Access Control Bypass

File Access Control:

Database Record Access:

Input Validation Bypass

WAF/Security Filter Evasion

SQL Injection Filter Bypass:

WAF Processing:

  • First parameter: query=legitimate β†’ Passes validation

  • Application receives: query=' OR '1'='1 β†’ SQL injection executes

XSS Filter Bypass:

Command Injection Bypass:

Content Security Policy Bypass

CSP Header Manipulation:

CORS Policy Bypass:


Advanced HPP Exploitation

Business Logic Manipulation

E-commerce Price Manipulation

Shopping Cart Manipulation:

Discount Code Stacking:

Payment Amount Manipulation:

User Profile Manipulation

Email Address Pollution:

Permission Escalation:

Cache Poisoning via HPP

Web Cache Deception

Cache Key Manipulation:

CDN Cache Poisoning:

Cache Poisoning Attack Chain

Step 1: Poison Cache

Step 2: Victim Request

Result: Victim receives cached malicious response

Load Balancer and Reverse Proxy Exploitation

Backend Server Manipulation

Server Selection Bypass:

Load Balancer Routing:

Request Smuggling via HPP

HTTP Request Smuggling:


Framework-Specific HPP Vulnerabilities

PHP Applications

PHP Parameter Processing Quirks

Array vs String Confusion:

PHP Session Manipulation:

PHP Configuration Bypass:

WordPress HPP Vulnerabilities

WordPress Parameter Pollution:

Plugin Parameter Pollution:

ASP.NET Applications

ViewState Manipulation

ViewState Parameter Pollution:

Control State Manipulation:

ASP.NET Core HPP

Model Binding Confusion:

Route Parameter Pollution:

Java Web Applications

Java Servlet Parameter Handling

Spring Framework HPP:

Struts Action Parameter Pollution:

JSP Parameter Processing

JSP Request Parameter Pollution:

Node.js Applications

Express.js Parameter Handling

Query Parser Configuration:

Custom Middleware Pollution:

Fastify Parameter Handling

Fastify Schema Bypass:


HTTP Method-Specific HPP

GET Parameter Pollution

URL Query String Manipulation

Basic GET HPP:

URL Fragment Pollution:

Mixed GET Parameters:

POST Parameter Pollution

Form Data Manipulation

application/x-www-form-urlencoded:

multipart/form-data:

JSON Parameter Pollution

JSON Body Manipulation:

JSON Array Pollution:

HTTP Header Pollution

Custom Header Manipulation

X-Forwarded-For Pollution:

Authorization Header Pollution:

Custom Application Headers:


Advanced Attack Scenarios

Multi-Stage HPP Attacks

HPP + CSRF Attack Chain

Stage 1: CSRF Token Bypass

Stage 2: Session Fixation

HPP + SQL Injection Chain

WAF Bypass + SQL Injection:

Parameter Smuggling:

Microservices Architecture HPP

Service Mesh Parameter Pollution

Inter-Service Communication:

API Gateway Bypass:

Container Orchestration HPP

Kubernetes Service Discovery:

Docker Swarm Service Routing:

Last updated

Was this helpful?