Like leaving a root shell on a public web server with a sign that says 'type here'
CVE-2026-9198 affects IBM Langflow OSS versions 1.0.0 through 1.10.0. The vulnerability chains two default-enabled API endpoints: /api/v1/auto_login hands any unauthenticated caller a SUPERUSER JWT, and /api/v1/validate/code feeds attacker-supplied Python straight into exec(). The result is full remote code execution — typically as root inside the container — with zero credentials required. The fix is Langflow 1.10.1, which disables auto_login by default and sandboxes the code-validation endpoint.
IBM scored this 9.8 CRITICAL and CISA agreed emphatically, adding it to the KEV catalog on 2026-08-04 with a three-day remediation deadline (August 7). The vendor score is accurate and arguably generous to the defender — the attack requires no authentication, no user interaction, no special configuration, and works against every default Langflow deployment in the affected range. With ~1,200 internet-facing instances visible on Shodan as of July 2026, active exploitation campaigns deploying cryptominers and harvesting AWS credentials, and the JadePuffer ransomware gang leveraging related Langflow chains, this is a textbook CRITICAL.
4 steps from start to impact.
Discover exposed Langflow instance
- Langflow instance reachable over HTTP/HTTPS
- Instance behind VPN or authenticating reverse proxy blocks discovery
- Enterprises using IBM's managed deployment may not expose the raw API
http.title:"Langflow" port:7860. GreyNoise tags exist for Langflow scanning activity.Mint SUPERUSER token via auto_login
/api/v1/auto_login. In default configurations (LANGFLOW_AUTO_LOGIN=true), the endpoint returns a valid JWT with superuser privileges. No password, no MFA, no challenge — just a token. This is the authentication bypass half of the chain.- LANGFLOW_AUTO_LOGIN=true (default)
- Operator explicitly set LANGFLOW_AUTO_LOGIN=false
- WAF rule blocking the /auto_login path
/api/v1/auto_login from external IPs. WAF/IDS signatures for Langflow auto_login abuse.Submit malicious Python to validate/code
/api/v1/validate/code. The server passes the payload directly to exec() with no sandboxing, AST filtering, or allowlisting. The code runs in the Langflow server process context — typically root inside a Docker container or the service account on bare metal.- Valid SUPERUSER JWT (obtained in step 2)
- Network access to /api/v1/validate/code
- None in default deployments — this is the intended code-validation feature being abused
Achieve RCE and post-exploitation
- Successful code execution from step 3
- Network egress filtering blocks reverse shells
- Cloud IAM role has minimal permissions
- Secrets stored in external vault rather than Langflow flow definitions
The supporting signals.
| In-the-Wild Exploitation | Active. CISA added CVE-2026-9198 to KEV on 2026-08-04 with a 2026-08-07 deadline. Campaigns observed deploying cryptominers and harvesting AWS credentials. JadePuffer ransomware gang exploits related Langflow chains. |
|---|---|
| PoC / Exploit Availability | Public. Multiple PoC repos exist for the related auto_login→exec() chain (see z4yd3/PoC-CVE-2026-33017 for the nearly identical pattern). The exploit is trivial — two HTTP requests with curl. |
| EPSS | 0.01886 (top ~2% of all CVEs). Low relative to the actual exploitation activity, likely due to the niche install base. |
| KEV Status | Listed 2026-08-04. Due date: 2026-08-07. BOD 26-04 binding on FCEB agencies. |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — Network-accessible, no privileges, no interaction, full CIA impact. A textbook 9.8. |
| Affected Versions | IBM Langflow OSS 1.0.0 through 1.10.0. All default installations with LANGFLOW_AUTO_LOGIN=true (the default). |
| Fixed Version | Langflow OSS 1.10.1 or later. IBM advisory: node/7278927. |
| Exposure Data | ~1,200 internet-facing instances visible on Shodan (July 2026). Concentrations in US, China, Germany, Singapore, UK. VentureBeat reported ~7,000 total reachable Langflow instances across all related CVEs. |
| Disclosure Date | 2026-07-17 (IBM advisory published). |
| Credit | Not publicly attributed to a named researcher. IBM internal discovery and CISA coordination. |
noisgate verdict.
Active KEV listing with confirmed exploitation campaigns (cryptomining, credential theft, ransomware gang activity) against a default-exploitable, unauthenticated RCE — this is the single most decisive factor. The vendor's 9.8 CRITICAL is accurate and requires no adjustment.
Why this verdict
- Zero-friction exploit chain: Two HTTP requests — one to get a SUPERUSER token, one to execute arbitrary Python. No auth, no interaction, no special config. This is as low-complexity as RCE gets.
- Active exploitation confirmed: CISA KEV-listed 2026-08-04 with a 3-day deadline. Observed campaigns include cryptomining, AWS credential harvesting, and JadePuffer ransomware pivots.
- Default configuration is vulnerable:
LANGFLOW_AUTO_LOGIN=trueships as the default. Every unmodified Langflow deployment in the affected range is exploitable out of the box. - Role multiplier: Langflow is an AI pipeline orchestration server. In enterprise deployments it commonly stores LLM API keys, database credentials, cloud provider secrets, and connects to production data sources. Compromise of a Langflow instance grants lateral movement into cloud infrastructure, CI/CD pipelines, and data stores. This is functionally a build/orchestration server role — blast radius extends to fleet-scale credential compromise and supply-chain pivot via poisoned AI pipelines. ≥10% of Langflow installs serve this pipeline-orchestration role by definition, setting a CRITICAL floor.
Why not higher?
The score is already 9.8 CRITICAL, the maximum practical severity. The Scope metric is Unchanged (S:U) which is accurate — the vulnerability directly impacts the Langflow host, not a separate security domain. A 10.0 would require Changed scope.
Why not lower?
Downgrading is indefensible. The chain is unauthenticated, trivial to execute, actively exploited in the wild, KEV-listed with a 3-day deadline, and works against every default installation. The ~1,200 exposed instances represent a small but actively targeted population, and internal deployments behind corporate networks are equally vulnerable once an attacker has any internal foothold.
What to do — in priority order.
- Block /api/v1/auto_login and /api/v1/validate/code at WAF or reverse proxy — These two endpoints are the entire exploit chain. Blocking them at the network edge eliminates the attack path immediately. Deploy within hours — this is a KEV with a 3-day CISA deadline.
- Set LANGFLOW_AUTO_LOGIN=false and configure explicit authentication — Disabling auto_login breaks step 2 of the chain. Requires restarting the Langflow service and configuring a real authentication provider. Deploy immediately as a configuration change.
- Remove Langflow from direct internet exposure — Place behind an authenticating reverse proxy (e.g., OAuth2 Proxy, Cloudflare Access, Tailscale) or VPN. No Langflow instance should be directly internet-reachable. This reduces the attack surface to authenticated internal users only.
- Rotate all secrets stored in Langflow flows — Assume compromise if the instance was ever internet-exposed. Rotate LLM API keys, database credentials, cloud provider access keys, and any other secrets stored in flow definitions. Do this in parallel with patching.
- Deploy container runtime security — Tools like Falco, Sysdig Secure, or CrowdStrike Falcon for Containers can detect unexpected child processes spawned from the Langflow Python process, catching post-exploitation even if the initial exploit succeeds.
- Network segmentation alone — if Langflow is reachable from any network segment (including internal), the exploit works. Segmentation slows lateral movement but does not prevent initial RCE.
- Rate limiting — the exploit requires exactly two HTTP requests. Rate limiting is meaningless against a two-request chain.
- Standard WAF generic rulesets — unless specifically configured to block the auto_login and validate/code paths, generic SQL injection or XSS rules will not catch Python code injection in POST bodies.
Crowdsourced verification payload.
Run this on any host with curl and network access to the target Langflow instance. Usage: bash check_cve_2026_9198.sh https://langflow.example.com:7860. No special privileges required — it only tests the auto_login endpoint response.
#!/usr/bin/env bash
# check_cve_2026_9198.sh — Test for CVE-2026-9198 (Langflow auto_login RCE chain)
# Usage: bash check_cve_2026_9198.sh <LANGFLOW_BASE_URL>
# Exit codes: 1=VULNERABLE, 0=PATCHED, 2=UNKNOWN
set -euo pipefail
if [ $# -lt 1 ]; then
echo "Usage: $0 <LANGFLOW_BASE_URL>"
echo "Example: $0 https://langflow.example.com:7860"
exit 2
fi
BASE_URL="${1%/}"
AUTO_LOGIN_URL="${BASE_URL}/api/v1/auto_login"
echo "[*] Testing CVE-2026-9198 against: ${BASE_URL}"
echo "[*] Checking auto_login endpoint: ${AUTO_LOGIN_URL}"
# Attempt to hit the auto_login endpoint
HTTP_CODE=$(curl -sk -o /tmp/cve_2026_9198_response.json -w '%{http_code}' \
-X POST "${AUTO_LOGIN_URL}" \
-H 'Content-Type: application/json' \
--max-time 10 2>/dev/null || echo "000")
if [ "${HTTP_CODE}" = "000" ]; then
echo "UNKNOWN — Could not connect to ${BASE_URL}"
rm -f /tmp/cve_2026_9198_response.json
exit 2
fi
echo "[*] HTTP response code: ${HTTP_CODE}"
if [ "${HTTP_CODE}" = "200" ]; then
# Check if the response contains an access token
if grep -q '"access_token"' /tmp/cve_2026_9198_response.json 2>/dev/null; then
echo "VULNERABLE — auto_login returned a SUPERUSER token without credentials."
echo "[!] CVE-2026-9198 is exploitable on this instance."
echo "[!] Patch to Langflow >= 1.10.1 or set LANGFLOW_AUTO_LOGIN=false immediately."
rm -f /tmp/cve_2026_9198_response.json
exit 1
else
echo "UNKNOWN — auto_login returned 200 but no access_token found in response."
rm -f /tmp/cve_2026_9198_response.json
exit 2
fi
elif [ "${HTTP_CODE}" = "401" ] || [ "${HTTP_CODE}" = "403" ] || [ "${HTTP_CODE}" = "404" ] || [ "${HTTP_CODE}" = "405" ]; then
echo "PATCHED — auto_login endpoint is disabled or requires authentication (HTTP ${HTTP_CODE})."
rm -f /tmp/cve_2026_9198_response.json
exit 0
else
echo "UNKNOWN — Unexpected HTTP response code: ${HTTP_CODE}"
rm -f /tmp/cve_2026_9198_response.json
exit 2
fiIf you remember one thing.
/api/v1/auto_login and /api/v1/validate/code at your WAF or reverse proxy, set LANGFLOW_AUTO_LOGIN=false on every instance, and pull any internet-exposed Langflow behind an authenticating gateway. In parallel, begin upgrading to Langflow 1.10.1+ under the noisgate remediation SLA of ≤90 days, but given active exploitation you should treat the patch itself as urgent — target completion this week, not this quarter. Rotate every secret (LLM API keys, DB credentials, cloud access keys) stored in any Langflow instance that was ever network-reachable. If you find evidence of compromise, invoke your IR playbook immediately.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.