Skip to content

v2.2.0: lean BApp build — remove native-duplicating checks, cross-reference instead - #8

Merged
liam-portswigger merged 1 commit into
mainfrom
lean-rework
Jun 30, 2026
Merged

v2.2.0: lean BApp build — remove native-duplicating checks, cross-reference instead#8
liam-portswigger merged 1 commit into
mainfrom
lean-rework

Conversation

@liam-portswigger

Copy link
Copy Markdown
Owner

What & why

Repositions the extension as the lean, BApp-Store build: it now covers only the API-specific OWASP categories Burp's native scanner does not already test. Native duplication is the single most common BApp-Store rejection reason, so the duplicating checks are removed here and cross-referenced statically instead.

DAST cannot read or add to the site map, so dynamic cross-referencing (audit-issue listener, own issue table) is not possible — confirmed with PortSwigger review. The viable approach is a static "Related Burp Scanner checks" line on the surviving part-overlap issues plus a README/DAST-guide OWASP → native mapping.

The complete re-detecting build (15 checks) is preserved on the full branch and the v2.1.2 tag for anyone who wants a one-extension sweep and accepts the overlap.

Removed (duplicated the native scanner)

Removed check Native coverage to use instead
InjectionCheck (+ injection/ helpers) SQL / OS command / JS injection, reflected XSS
SsrfCheck Out-of-band resource load (HTTP), file path traversal
MethodFuzzingCheck HTTP TRACE / PUT method enabled
BrokenAuthCheck JWT checks, unencrypted communications
FunctionLevelAuthCheck Broken access control
SecurityMisconfigCheck CORS, CSP, HSTS, clickjacking, source disclosure

Trimmed part-duplicates

  • BrokenObjectAuthCheck — dropped the unauthenticated-access sub-test (that's native Broken access control). ID-manipulation and enumeration now require a different object vs baseline (content comparison), not just a 2xx — which is what justifies Firm confidence on a single observation. Adds a Related Burp checks line.
  • ExcessiveDataExposureCheck — dropped sensitive-field-by-name detection (native reports specific value leaks at higher confidence). Keeps the response-shape signals native doesn't: unbounded arrays, excessive field counts. Adds a Related Burp checks line.

Confidence / severity adjustments

  • MassAssignmentCheck — combo + priv-esc issues now note echoed ≠ persisted; combo lowered Critical/Certain → High/Firm.
  • ResourceConsumptionCheck — large-response Medium/Certain → Low/Tentative; missing-rate-limit → Information/Tentative.
  • UnsafeApiConsumptionCheck — webhook pointer Medium → Information.
  • ParameterPollutionCheckreverts the v2.1.2 over-correction that suppressed 2xx → 4xx. For HPP, a marker-induced 200 → 400 means the server reads the last value and discards the legitimate first one — a genuine override primitive (a reviewer confirmed a suppressed case was real). Now fires on any status change, kept at Tentative.
  • InventoryManagementCheck — dropped /v1/ from the deprecated pattern (it's the current version on most APIs → false positive on nearly every modern API); dropped /swagger, /api-docs, /openapi from debug paths (intentional published docs, overlap native).

Docs

  • README and BURP_DAST_GUIDE lead with scope and an explicit OWASP → native mapping.
  • VALIDATION_GUIDE rewritten for the 9 lean checks (removed-check entries gone; BOLA/EDE/HPP entries updated).
  • CLAUDE.md documents the main (lean, 9 checks) vs full (15 checks) split and fixes the HPP row in the detection-discipline checklist (it previously encoded the over-correction this PR reverts).
  • Version 2.1.22.2.0 across pom.xml, CI, banner, and docs.

Verification

  • mvn clean package -DskipTests is clean; default build produces burp-api-scanner-2.2.0.jar (the BApp pipeline builds the default).
  • Check inventory: 4 active + 5 passive = 9.

🤖 Generated with Claude Code

…erence instead

Reframes the extension to cover only the API-specific categories Burp's
native scanner does not test. Native duplication is the #1 BApp-Store
rejection reason, so the duplicating checks are removed here and
cross-referenced statically instead (DAST cannot read the site map, so
dynamic linking is not possible — per PortSwigger review).

Removed (duplicated native scanner):
- InjectionCheck (+ injection/AuthBypassTester, InjectionPayloads) — SQL/
  command/JS injection, reflected XSS → native injection checks
- SsrfCheck → native out-of-band resource load / file path traversal
- MethodFuzzingCheck → native HTTP TRACE/PUT method checks
- BrokenAuthCheck → native JWT / unencrypted-communications checks
- FunctionLevelAuthCheck → native Broken access control
- SecurityMisconfigCheck → native CORS / CSP / HSTS / clickjacking /
  source-disclosure checks

Trimmed part-duplicates:
- BrokenObjectAuthCheck: drop the unauthenticated-access sub-test
  (= native Broken access control); ID-manipulation and enumeration now
  require a *different object* vs baseline (content comparison), not just
  a 2xx — justifies Firm confidence. Adds a "Related Burp checks" line.
- ExcessiveDataExposureCheck: drop sensitive-field-by-name detection
  (= native value-leak issues); keep response-shape signals (unbounded
  arrays, excessive field counts). Adds a "Related Burp checks" line.

Confidence / severity adjustments:
- MassAssignmentCheck: combo + privesc issues note echoed != persisted;
  combo lowered Critical/Certain -> High/Firm.
- ResourceConsumptionCheck: large-response Medium/Certain -> Low/Tentative;
  missing-rate-limit -> Information/Tentative.
- UnsafeApiConsumptionCheck: webhook pointer Medium -> Information.
- ParameterPollutionCheck: revert the over-correction that suppressed
  2xx->4xx. For HPP a marker-induced 200->400 means the server reads the
  last value and discards the first — a real override primitive (reviewer-
  confirmed). Now fires on any status change, kept at Tentative.
- InventoryManagementCheck: drop /v1/ from the deprecated pattern (it is
  the current version on most APIs); drop /swagger, /api-docs, /openapi
  from debug paths (intentional published docs, overlap native).

Docs: README + BURP_DAST_GUIDE now lead with scope and an OWASP->native
mapping; VALIDATION_GUIDE rewritten for the 9 lean checks; CLAUDE.md notes
the main (lean, 9) vs full (15) branch split and fixes the HPP detection-
discipline row. Version 2.1.2 -> 2.2.0. The complete build is preserved on
the `full` branch and the v2.1.2 tag.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@liam-portswigger
liam-portswigger merged commit cfeee80 into main Jun 30, 2026
1 check passed
@liam-portswigger
liam-portswigger deleted the lean-rework branch June 30, 2026 12:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant