Skip to content

Add vulnerability detection module for CVE-2026-33017 (Langflow unaut… - #1639

Closed
NSK-394 wants to merge 1 commit into
OWASP:masterfrom
NSK-394:add-langflow-cve-2026-33017
Closed

Add vulnerability detection module for CVE-2026-33017 (Langflow unaut…#1639
NSK-394 wants to merge 1 commit into
OWASP:masterfrom
NSK-394:add-langflow-cve-2026-33017

Conversation

@NSK-394

@NSK-394 NSK-394 commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Proposed change

New vulnerability detection module for CVE-2026-33017 (CVSS 9.8, added to CISA's
Known Exploited Vulnerabilities catalog) — an unauthenticated flow-data injection
flaw in Langflow's /api/v1/build_public_tmp/{flow_id}/flow endpoint.

The endpoint is designed to allow unauthenticated building of public flows, but
prior to 1.9.0 it incorrectly accepted an optional attacker-controlled data
parameter instead of using only the flow's stored data, allowing arbitrary
CustomComponent node definitions (including embedded Python code) to reach the
graph builder.

This module chains 3 HTTP requests:

  1. GET /api/v1/auto_login — Langflow's default AUTO_LOGIN=true config issues
    an unauthenticated bearer token to any caller
  2. POST /api/v1/flows/ — creates an empty public flow using that token, capturing
    the resulting flow_id
  3. POST /api/v1/build_public_tmp/{flow_id}/flow — submits a malicious
    CustomComponent node with a distinctive, uniquely-named node id

A 4th step then polls the job's build-event stream and checks whether that
distinctive node id appears — vulnerable instances process and reference the
injected node; patched instances discard it before processing entirely (empty
vertex list).

Detection scope — important, please read before reviewing: this module
confirms the endpoint processes attacker-controlled flow node data on vulnerable
versions (<=1.8.2) versus discarding it entirely on patched versions (>=1.9.0).
This was verified via manual curl testing and live Nettacker scans against both
a vulnerable (1.8.2) and patched (1.9.0) Docker container, with consistent,
repeatable results across the runs performed.

It does not independently confirm code execution. I was not able to get a
reliable execution-only signal (e.g. a file write or command output reflected
back) to fire in testing — the error observed during processing on the vulnerable
version appears to occur during graph/vertex construction, before the point where
the embedded code would actually be reached by exec(). Rather than overclaim
"RCE confirmed," the module and its description are scoped to what was actually
verified: detection of the input-validation flaw that is this CVE's root cause.
The module is non-destructive and safe to run against production targets.

Happy to iterate further on getting a genuine execution-proof signal if that's
important for merging — wanted to be upfront about the current scope rather than
overstate what's been confirmed.

Type of change

  • New or existing module/payload change

Checklist

  • I've followed the contributing guidelines
  • I've digitally signed all my commits in this PR
  • I've run make pre-commit and confirm it didn't generate any warnings/changes (ran ruff/isort directly and confirmed the module loads cleanly through the real TemplateLoader with zero errors — make unavailable on Windows)
  • I've run make test and I confirm all tests passed locally (ran the existing test suite; this is a new YAML module with no dedicated unit test, consistent with other CVE modules in nettacker/modules/vuln/)
  • I've added/updated any relevant documentation in the docs/ folder (N/A — new CVE modules aren't individually documented in docs/, consistent with existing modules in this directory)
  • I've linked this PR with an open issue (no open issue for this — proactively wrote this new module per @securestep9's guidance on issue IndexError in generate_loops() when a single-payload module's service isn't detected and --exclude-ports is used #1636 that new CISA KEV detection modules are higher-value than minor robustness fixes)
  • I've tested and verified that my code works as intended and resolves the issue as described (see Detection scope note above for exact scope of what was verified)
  • I've attached screenshots demonstrating that my code works as intended (N/A — not a UI change; verification was via curl output and Nettacker scan logs against live test containers, described above)
  • I've checked all other open PRs to avoid submitting duplicate work
  • I confirm that the code and comments in this PR are not direct unreviewed outputs of AI
  • I confirm that I am the Sole Responsible Author for every line of code, comment, and design decision

…henticated RCE)

- Detects the unauthenticated flow-data injection flaw in Langflow's
  /api/v1/build_public_tmp/{flow_id}/flow endpoint (CVSS 9.8, CISA KEV)
- Chains 3 requests: unauthenticated token via auto_login, flow creation,
  and malicious CustomComponent submission, then polls the job event
  stream for a distinctively-named injected node

Detection scope: confirms the endpoint processes attacker-controlled flow
node data on vulnerable versions (<=1.8.2) versus discarding it on patched
versions (>=1.9.0), tested against both live containers. Does not
independently verify code execution -- the underlying exec() call could
not be confirmed to fire in testing, so the module is scoped as detecting
the input-validation flaw that is the CVE's root cause, not confirmed RCE.
@github-actions

Copy link
Copy Markdown

PR validation failed: No linked issue and no valid closing issue reference in PR description

@github-actions github-actions Bot closed this Jul 27, 2026
@coderabbitai

coderabbitai Bot commented Jul 27, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro Plus

Run ID: ff4c304e-2815-4387-ab6a-c41cdda54dfd

📥 Commits

Reviewing files that changed from the base of the PR and between 8a5d41e and ad772a8.

📒 Files selected for processing (1)
  • nettacker/modules/vuln/langflow_cve_2026_33017.yaml

Summary by CodeRabbit

  • New Features
    • Added detection for CVE-2026-33017, an unauthenticated remote code execution vulnerability affecting Langflow versions up to 1.8.2.
    • Scans now validate vulnerable behavior through Langflow’s flow creation and build endpoints.
    • Included vulnerability metadata, severity rating, references, and relevant scanning categories.

Walkthrough

Changes

Langflow RCE Detection

Layer / File(s) Summary
Module metadata and access setup
nettacker/modules/vuln/langflow_cve_2026_33017.yaml
Registers CVE-2026-33017 metadata, retrieves an access token through the auto-login endpoint, and creates a public flow to obtain a flow_id.
Custom node payload submission
nettacker/modules/vuln/langflow_cve_2026_33017.yaml
Submits a crafted CustomComponent node with the nettacker_vuln_check identifier and stores the resulting job_id.
Build event validation
nettacker/modules/vuln/langflow_cve_2026_33017.yaml
Polls the build event stream and detects the injected node identifier in the response content.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Suggested labels: new module

Suggested reviewers: securestep9

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

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