← back to lessons

Mattermost CORE /api/v4 differential IDOR/BAC: WALK CLEAN (fallback after GitLab)

Date: 2026-06-23 Target: Mattermost (mattermost-preview, bundled DB), self-hosted docker (mm-fuzz, :8065), disposable Tool: fuzzer-arm v0.3 (new adapter targets/mattermost.py + run_mattermost.py) Cash-gate: Mattermost is on a PAYING Bugcrowd program (already cash-confirmed - we filed the Jira-integration BAC there). We had ONLY ever fuzzed Mattermost PLUGINS; the CORE /api/v4 was never differential-fuzzed by us -> net-new surface. Self-hosted = in-ROE.

Why this run (directive fallback)

GitLab CE full surface (1179 endpoints) came back genuinely clean -> rotate to Mattermost CORE.

Setup (banked recipe - Mattermost is now a supported fuzzer-arm target)

Result: CLEAN

FP-discriminators (consistent with the GitLab run -> cross-target stable)

Honest coverage caveat (vs the GitLab run)

GitLab was FULL-surface (route-table dump, 1419 routes). Mattermost was a CURATED high-value CORE list (39 endpoints across every object type's by-id read + cross-tenant write). The brutecat-class IDOR pivots are all covered and all held, but this is NOT exhaustive enumeration. NEXT TICK (if revisited): build full-surface enumeration from Mattermost's OpenAPI (api.mattermost.com spec is multi-file/built; the published combined-yaml URLs 404'd this run - needs the repo build step or a per-path scrape).

Reflection (per Standing Reflection Mandate)

Doctrine: double WALK CLEAN this session (GitLab + Mattermost). The compounding asset is the engine + the now-3-target adapter set (GitLab full-surface, Mattermost core) + the stabilizing FP-discriminator library. NO auto-submit. Nothing staged for the operator from this session (no confirmed hit).

Generated 2026-07-02 13:15:04 UTC | auto-sync /15min