ENH: CISA KEV - Exploit module for CVE-2026-33017 - #21700
Conversation
| " display_name='X'\n" \ | ||
| " outputs=[Output(display_name='O',name='o',method='r')]\n" \ | ||
| " def r(self)->Data:\n" \ | ||
| " #{payload.encode.gsub("\n", "\n ")}\n" \ |
There was a problem hiding this comment.
If there's an issue with \n, would it work to add it to badchars?
There was a problem hiding this comment.
Hmmm I don't think so. Reason being: The payload is injected directly as Python source code rather than being placed inside a string literal. Multi-line payloads are supported intentionally, and the gsub("\n", "\n ") keeps the indentation correct so the generated method stays valid Python. Adding \n to BadChars would prevent otherwise valid payloads from working.
There was a problem hiding this comment.
@msutovsky-r7 Are you okay with this line of thought? Would you consider this resolved?
|
@msutovsky-r7 Ready for review |
|
Hi @adfoster-r7 I was wondering if you could help me move this PR forward? |
There was a problem hiding this comment.
Pull request overview
Adds a new Metasploit multi/http exploit module for unauthenticated RCE in Langflow (< 1.9.0, CVE-2026-33017), along with end-user module documentation under documentation/modules.
Changes:
- Introduces
exploit/multi/http/langflow_unauth_rce_cve_2026_33017with an AutoCheck-based version check and a JSON POST exploit path. - Adds module documentation covering installation, options, and a usage scenario.
Impact Analysis:
- Blast radius: low (new module + new documentation only; no shared library modifications identified in diff).
- Data and contract effects: none beyond adding a new module interface/options.
- Rollback and test focus: rollback is simple (remove the new files); validate
checkbehavior against non-Langflow JSON responses and validate exploit request success/failure handling via HTTP status codes.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 6 comments.
| File | Description |
|---|---|
| modules/exploits/multi/http/langflow_unauth_rce_cve_2026_33017.rb | New unauth RCE exploit module for Langflow via build_public_tmp/{flow_id}/flow. |
| documentation/modules/exploit/multi/http/langflow_unauth_rce_cve_2026_33017.md | New module documentation with setup, options, and an example run. |
|
@adfoster-r7 Should be good to go now |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated no new comments.
Suppressed comments (2)
modules/exploits/multi/http/langflow_unauth_rce_cve_2026_33017.rb:103
- Suggestion: Problem:
output_methodis generated from random letters and used as a Python method name without a guaranteed-safe prefix, which can produce an invalid identifier (e.g., a reserved keyword). Impact: exploit reliability can be non-deterministic due to Python syntax errors when Langflow evaluates the injected component. Fix: Prefix the generated method name with a constant string (or otherwise ensure it cannot be a keyword).
output_display_name = Rex::Text.rand_text_alpha(5)
output_name = Rex::Text.rand_text_alpha(5).downcase
output_method = Rex::Text.rand_text_alpha(5).downcase
documentation/modules/exploit/multi/http/langflow_unauth_rce_cve_2026_33017.md:55
- Important: Problem: The Scenarios transcript’s AutoCheck output does not match what this module’s
checkactually prints (Exploit::CheckCode::Appears("Version #{version} appears vulnerable.")). Impact: Users following the docs may think the module is behaving incorrectly when the output differs. Fix: Update the transcript line to reflect the real AutoCheck message.
[*] Started reverse TCP handler on 127.0.0.1:4444
[*] Running automatic check ("set AutoCheck false" to disable)
[+] The target appears to be vulnerable. Version 1.8.4 detected.
[*] Payload sent successfully.
Moved payload insertion into r()
d906728 to
9e36897
Compare
|
Hey @rmhowe425 , did test your module and I got this: Would you mind sharing more info on your environment setup? I've used the docker same as in module documentation. |
|
@msutovsky-r7 I just finished troubleshooting your issue. The requirement for a public flow to be used for this exploit is heavily implied in the NVD CVE description. Looks like the documentation that I provided in the pull request already explicitly calls out the need for public flow
|



Description
This pull request adds a new exploit module that exploits an unauth RCE vulnerability in the /api/v1/build_public_tmp/{flow_id}/flow endpoint in Langflow versions prior to 1.9.0
Addition of CVE to CISA KEV
Related Issue:
Fixes #21698
Breaking Changes
None
Verification Steps
use exploit/multi/http/langflow_unauth_rce_cve_2026_33017run LHOST=<lhost> RHOSTS=<rhost> FLOW_ID=<flow id>Test Evidence
Environment
AI Usage Disclosure
None
Pre-Submission Checklist
documentation/modules(new modules only)lib/changes)