Strobesstrobes
Platform
Solutions
Resources
Customers
Company
Pricing
Book a Demo
Strobesstrobes

Strobes connects every exposure signal to autonomous action, so security teams fix what matters, prove what works, and stop chasing noise.

Book a DemoTalk to an expert
ISO 27001SOC 2CREST
  • Platform
  • Platform Overview
  • Agentic Exposure Management
  • AI Agents
  • Integrations
  • API & Developers
  • Workflows & Automation
  • Analytics & Reporting
  • Solutions
  • Exposure Assessment (EAP)
  • Attack Surface Management
  • Application Security Posture
  • Risk-Based Vulnerability Management
  • Adversarial Exposure Validation (AEV)
  • AI Pentesting
  • Pentesting as a Service
  • CTEM Framework
  • By Industry
  • Financial Institutions
  • Technology
  • Retail
  • Healthcare
  • Manufacturing
  • By Roles
  • CISOs
  • Security Directors
  • Cloud Security Leaders
  • App Sec Leaders
  • Resources
  • Blog
  • Customer Stories
  • eBooks
  • Datasheets
  • Videos & Demos
  • Exposure Management Academy
  • CTEM Maturity Assessment
  • Pentest Health Check
  • Security Tool ROI Calculator
  • Company
  • About Strobes
  • Meet the Team
  • Trust & Security
  • Contact Us
  • Careers
  • Become a Partner
  • Technology Partner
  • Partner Deal Registration
  • Press Release

Weekly insight for security leaders

CTEM research, agentic AI trends, and what's actually moving the needle.

© 2026 Strobes Security Inc. All rights reserved.

Privacy PolicyTerms of ServiceCookie PolicyAccessibilitySitemap
Back to Blog
HTTP Parameter Pollution and Mass Assignment Attacks
Application Security

HTTP Parameter Pollution and Mass Assignment Attacks

Shubham JhaMarch 11, 20257 min read

Table of Contents

  • What is HTTP parameter pollution?
  • How do different frameworks handle duplicate parameters?
  • What is a mass assignment vulnerability?
  • How do you test for mass assignment?
  • How do you prevent parameter pollution and mass assignment?
  • Frequently asked questions
  • Sources and references

Authors

S
Shubham Jha

Share

Table of Contents

  • What is HTTP parameter pollution?
  • How do different frameworks handle duplicate parameters?
  • What is a mass assignment vulnerability?
  • How do you test for mass assignment?
  • How do you prevent parameter pollution and mass assignment?
  • Frequently asked questions
  • Sources and references

Authors

S
Shubham Jha

Share

TL;DR
  • ✓HTTP Parameter Pollution (HPP) sends the same parameter name more than once, exploiting inconsistent handling between the app, framework, and backend to bypass filters or change logic.
  • ✓Mass assignment (over-posting / autobinding) adds extra fields to a request that bind to internal object properties, like isAdmin or role, the developer never meant to expose.
  • ✓Mass assignment is API6:2023 in the OWASP API Top 10; both flaws are tested in WSTG input-validation checks and map to broken access control.
  • ✓Test HPP by duplicating parameters and observing which value wins; test mass assignment by adding privileged fields to JSON bodies and checking if they persist.
  • ✓Prevent both with explicit allowlists: bind only named fields server-side and reject or normalize duplicate parameters.

HTTP Parameter Pollution (HPP) and mass assignment are two input-binding flaws that look minor on the surface and routinely lead to privilege escalation in practice. HPP exploits the fact that web stacks disagree on what to do when a parameter appears twice, while mass assignment exploits frameworks that automatically bind every field in a request to an object, including fields the developer never intended to expose.

This post explains how each works with concrete payloads, how to test for them with Burp Suite, how they map to the OWASP API Top 10 (API6:2023) and broken access control, and the allowlist approach that fixes both. If your app uses Rails, Spring, Laravel, or any framework with autobinding, these are bugs you should be probing for.

What is HTTP parameter pollution?

HTTP Parameter Pollution is sending the same parameter name multiple times in a single request and relying on the inconsistent way different components pick a value. Some frameworks take the first occurrence, some the last, some concatenate them, and a WAF in front may evaluate a different one than the application behind it, which is what makes HPP useful for filter evasion.

For example, ?role=user&role=admin might be seen as user by a validation layer and admin by the backend, or a WAF might inspect only the first value while the app uses the last. HPP shows up in query strings, POST bodies, and even within a single value via array syntax like role[]=user&role[]=admin. It is a standard check in any thorough web application pentesting checklist.

How do different frameworks handle duplicate parameters?

The danger of HPP comes from the fact that there is no standard, so each stack resolves duplicates differently and a request that passes one layer can mean something else at the next. Knowing the behavior of your target's stack tells you which value to weaponize.

# Request:  color=red&color=blue
ASP.NET (classic) ->  "red,blue"   (concatenated)
PHP / Apache      ->  "blue"       (last wins)
JSP / Tomcat      ->  "red"        (first wins)
Node.js (express) ->  ["red","blue"] (array)
Python (Flask)    ->  "red"        (first via .get)

A practical exploit: a payment WAF rule inspects the first amount parameter, but the backend reads the last. Send amount=100&amount=1 and you may pay 1 while the filter sees 100. Always confirm the actual resolution against your specific target rather than trusting the table.

What is a mass assignment vulnerability?

Mass assignment, also called over-posting or autobinding, is when a framework automatically maps all incoming request fields onto an internal object, letting an attacker set properties that should be off-limits. If a user-update endpoint binds the whole JSON body to a User model, adding a field the form never showed can flip privileges.

PATCH /api/users/me HTTP/1.1
Content-Type: application/json

{
  "displayName": "Alex",
  "isAdmin": true,          // never exposed in the UI
  "role": "superadmin",     // bound anyway by autobinder
  "emailVerified": true,
  "accountBalance": 999999
}

Rails (update_attributes without strong parameters), Spring (@ModelAttribute binding the whole entity), and Laravel (unguarded $fillable) have all shipped this by default. Mass assignment is API6:2023 in the OWASP API Top 10, so it belongs in every API penetration testing scope.

HTTP Parameter Pollution vs Mass Assignment
AspectHTTP Parameter PollutionMass Assignment
Core trickSame parameter sent twiceExtra fields added to body
Root causeInconsistent duplicate handlingAutomatic object binding
Typical payloadrole=user&role=admin{"isAdmin": true}
OWASP mappingInjection / WAF bypassAPI6:2023, Broken Access Control
Primary fixNormalize duplicate paramsAllowlist bound fields (DTO/strong params)

How do you test for mass assignment?

Test mass assignment by discovering an object's full field set, then submitting privileged fields the endpoint did not advertise and checking whether they stick. The fastest way to learn the model's properties is to read a GET response for the same object, because the read API often returns fields the write API silently accepts.

Concretely: capture a legitimate update in Burp Suite, then add candidate fields (isAdmin, role, verified, balance, user_id, tenant_id) to the JSON body and resend. Re-fetch the object to confirm the change persisted. Try nested objects too ("owner":{"id":1}) and watch for IDOR-style cross-tenant assignment by setting an ID that belongs to someone else. This is exactly the kind of binding logic that a continuous, reasoning-driven approach like agentic pentesting is well suited to probe across hundreds of endpoints.

Strobes insight
The GET response is your mass-assignment cheat sheet. Whatever fields a read endpoint returns are the fields the write endpoint probably binds, isAdmin and role included.

How do you prevent parameter pollution and mass assignment?

Fix both with explicit allowlists rather than trusting framework defaults. For mass assignment, bind only the fields you intend to accept: use Rails strong parameters (params.require(:user).permit(:name, :email)), Spring DTOs instead of binding entities directly, Laravel $fillable with a tight list, and dedicated request/response schemas in your API layer.

For HPP, normalize duplicate parameters at the edge (decide first-wins or reject-on-duplicate and apply it consistently across WAF and app), validate that each parameter appears once where it should, and make sure your WAF and application resolve parameters the same way. Both flaws come down to the same principle from the OWASP Top 10: never let the client decide which internal properties get written.

Frequently asked questions

What is HTTP parameter pollution?
HTTP parameter pollution (HPP) is supplying the same parameter name more than once in a request to exploit inconsistent handling across the WAF, framework, and backend. Because stacks disagree on whether the first, last, or concatenated value wins, HPP can bypass input filters or alter application logic.
What is the difference between HPP and mass assignment?
HPP duplicates a single parameter to exploit ambiguous resolution between layers, mainly for filter evasion. Mass assignment adds entirely new fields to a request that bind to internal object properties like isAdmin. HPP abuses how values are chosen; mass assignment abuses which fields are accepted.
Is mass assignment in the OWASP API Top 10?
Yes. Mass assignment is part of API6:2023 Unrestricted Access to Sensitive Business Flows in the 2023 OWASP API Security Top 10, having been a standalone entry (API6:2019) previously. It commonly leads to privilege escalation and broken access control.
How do you test for mass assignment?
Capture a legitimate update request, read the object's GET response to learn its full field set, then add privileged fields such as isAdmin, role, or another user's ID to the body and resend. Re-fetch the object to confirm whether the unauthorized fields persisted.
Which frameworks are prone to mass assignment?
Frameworks with automatic binding are most at risk: Ruby on Rails without strong parameters, Spring when binding entities directly, Laravel with loose $fillable settings, and many ORMs that map whole request bodies to models. Using explicit DTOs or allowlists removes the exposure.
How do you prevent HTTP parameter pollution?
Normalize duplicate parameters at the edge with a consistent policy (first-wins or reject-on-duplicate), make sure the WAF and application resolve parameters identically, and validate that each parameter appears only where expected. Inconsistent handling between layers is the entire root cause.

Sources and references

  • OWASP Mass Assignment Cheat Sheet
  • OWASP API Security Top 10
  • OWASP WSTG: Testing for HTTP Parameter Pollution
S
Shubham Jha
Security Researcher, Strobes
Shubham Jha leads offensive security research at Strobes, focused on web and API exploitation and red team tradecraft.
Tags
Web SecurityAPI SecurityOWASP

Stop chasing vulnerabilities Start reducing exposure

See how Strobes AI agents validate and fix your most critical exposures automatically.

Book a Demo
Continue Reading

Related Posts

How to Catch Blind Bugs Scanners Miss
Penetration TestingOffensive Security

How to Catch the Blind Bugs Scanners Miss

Out-of-band validation detects blind SSRF, blind SQLi, and out-of-band XXE that return no in-band response. Learn how it works and why it matters.

May 29, 202613 min
5 Vulnerabilities in Every Vibe-Coded App
Application SecurityLLM Security

5 Vulnerabilities in Every Vibe-Coded App

The 5 security flaws AI coding assistants ship by default: missing authz, leaked secrets, weak JWTs, IDOR, eval RCE — with detection queries and fixes for each.

May 29, 202613 min
Threat Modeling Explained: STRIDE and Methodology
Application SecurityVulnerability Management

Threat Modeling Explained: STRIDE and Methodology

Threat modeling finds design flaws before code exists. Learn STRIDE, data flow diagrams, trust boundaries, and how STRIDE compares to DREAD, PASTA, and attack trees.

Mar 21, 20269 min