CVE-2026-55447: Langflow: TAR symlink traversal enables full RCE

GHSA-ccv6-r384-xp75 CRITICAL
Published June 19, 2026
CISO Take

A critical path traversal via symlink-following in Langflow's TAR extraction (CVSS 9.6, Scope Changed) allows any user who can upload files to a RAG-enabled Langflow instance to read arbitrary files from the host filesystem — including the application's JWT signing secret. With no privileges required and a fully public PoC including a demo video, the blast radius is severe: once the JWT secret is exfiltrated via the RAG chatbot, an attacker can forge tokens for any user ID and achieve remote code execution through Langflow's built-in Python Interpreter node — all without any further vulnerability. This package carries 53 known CVEs and is widely deployed in enterprise RAG architectures, amplifying organizational exposure. Upgrade immediately to Langflow 1.9.2, which patches `BaseFileComponent._unpack_bundle` to reject symlinks and hardlinks; if patching is blocked, restrict file upload access to fully trusted users and rotate the JWT secret on any instance that processed untrusted TAR uploads.

Sources: NVD GitHub Advisory ATLAS

What is the risk?

Critical. The 4-stage kill chain is fully documented and weaponized: malicious TAR upload triggers symlink traversal, reads JWT secret into vector store, chatbot surfaces the secret on demand, forged admin JWT unlocks Python Interpreter RCE. The CVSS Scope Change (S:C) is the key signal — the compromise escapes the application boundary. No privileges are required to trigger the initial upload in typical public-facing RAG deployments. The combination of a public PoC, no KEV listing yet (meaning defenders may not be actively prioritizing it), and broad deployment in enterprise RAG scenarios makes this a high-urgency patching target. Containerized deployments offer partial mitigation only if the JWT secret is not on a host-mounted volume.

How does the attack unfold?

Malicious Upload
Attacker crafts a TAR archive containing a symlink targeting Langflow's JWT secret key file and uploads it via the public-facing RAG file ingestion endpoint — no authentication required.
AML.T0049
Symlink Traversal
Langflow's `BaseFileComponent._unpack_bundle` follows the symlink during extraction, reads the JWT secret from the host filesystem, and persists its contents in the connected vector database.
AML.T0037
Credential Exfiltration
Attacker prompts the RAG chatbot to surface the ingested document, causing the LLM to return the JWT signing secret verbatim from the vector store.
AML.T0082
Remote Code Execution
Attacker forges an admin JWT token using the stolen secret, creates a Langflow flow with a Python Interpreter node containing arbitrary code, and executes it to achieve full host compromise.
AML.T0050

What systems are affected?

Package Ecosystem Vulnerable Range Patched
Langflow pip < 1.9.2 1.9.2
149.6K Pushed 6d ago 42% patched ~50d to patch Full package profile →

Do you use Langflow? You're affected.

How severe is it?

CVSS 3.1
9.6 / 10
EPSS
N/A
Exploitation Status
No known exploitation
Sophistication
Moderate

What is the attack surface?

AV AC PR UI S C I A
AV Network
AC Low
PR None
UI Required
S Changed
C High
I High
A High

What should I do?

5 steps
  1. Patch immediately: upgrade to Langflow 1.9.2 (PR #12945 patches _unpack_bundle to reject symlinks, hardlinks, and non-regular TAR entries).

  2. If patching is blocked: disable or gate all BaseFileComponent-derived nodes (Read File, Docling, NvidiaIngest, UnstructuredAPI, VideoFile) behind admin-only access controls.

  3. Rotate secrets: audit and rotate the Langflow JWT signing secret (secret_key file) on any instance that processed untrusted file uploads prior to patching.

  4. Detection: query vector database contents for strings matching sensitive path patterns (/etc/passwd, secret_key, eyJ JWT header prefix) or unexpected base64 blobs; review ingestion logs for TAR uploads from external or untrusted users.

  5. Harden runtime: run the Langflow process as a non-root user with read-only bind mounts excluding the secret key path, limiting symlink traversal reach even if a bypass is discovered.

How is it classified?

Which compliance frameworks are affected?

This CVE is relevant to:

EU AI Act
Article 15 - Accuracy, Robustness and Cybersecurity Article 9 - Risk Management System
ISO 42001
A.6.1.2 - AI Risk Assessment A.8.2 - AI System Operation — Security Controls
NIST AI RMF
MANAGE 2.2 - Mechanisms to sustain AI system value and address negative impacts
OWASP LLM Top 10
LLM02:2025 - Sensitive Information Disclosure LLM03:2025 - Supply Chain

Frequently Asked Questions

What is CVE-2026-55447?

A critical path traversal via symlink-following in Langflow's TAR extraction (CVSS 9.6, Scope Changed) allows any user who can upload files to a RAG-enabled Langflow instance to read arbitrary files from the host filesystem — including the application's JWT signing secret. With no privileges required and a fully public PoC including a demo video, the blast radius is severe: once the JWT secret is exfiltrated via the RAG chatbot, an attacker can forge tokens for any user ID and achieve remote code execution through Langflow's built-in Python Interpreter node — all without any further vulnerability. This package carries 53 known CVEs and is widely deployed in enterprise RAG architectures, amplifying organizational exposure. Upgrade immediately to Langflow 1.9.2, which patches `BaseFileComponent._unpack_bundle` to reject symlinks and hardlinks; if patching is blocked, restrict file upload access to fully trusted users and rotate the JWT secret on any instance that processed untrusted TAR uploads.

Is CVE-2026-55447 actively exploited?

No confirmed active exploitation of CVE-2026-55447 has been reported, but organizations should still patch proactively.

How to fix CVE-2026-55447?

1. Patch immediately: upgrade to Langflow 1.9.2 (PR #12945 patches `_unpack_bundle` to reject symlinks, hardlinks, and non-regular TAR entries). 2. If patching is blocked: disable or gate all BaseFileComponent-derived nodes (Read File, Docling, NvidiaIngest, UnstructuredAPI, VideoFile) behind admin-only access controls. 3. Rotate secrets: audit and rotate the Langflow JWT signing secret (`secret_key` file) on any instance that processed untrusted file uploads prior to patching. 4. Detection: query vector database contents for strings matching sensitive path patterns (`/etc/passwd`, `secret_key`, `eyJ` JWT header prefix) or unexpected base64 blobs; review ingestion logs for TAR uploads from external or untrusted users. 5. Harden runtime: run the Langflow process as a non-root user with read-only bind mounts excluding the secret key path, limiting symlink traversal reach even if a bypass is discovered.

What systems are affected by CVE-2026-55447?

This vulnerability affects the following AI/ML architecture patterns: RAG pipelines, document ingestion pipelines, LLM application frameworks, AI chatbot deployments, multi-modal agent frameworks.

What is the CVSS score for CVE-2026-55447?

CVE-2026-55447 has a CVSS v3.1 base score of 9.6 (CRITICAL).

What is the AI security impact?

Affected AI Architectures

RAG pipelinesdocument ingestion pipelinesLLM application frameworksAI chatbot deploymentsmulti-modal agent frameworks

MITRE ATLAS Techniques

AML.T0037 Data from Local System
AML.T0049 Exploit Public-Facing Application
AML.T0050 Command and Scripting Interpreter
AML.T0082 RAG Credential Harvesting
AML.T0085.000 RAG Databases
AML.T0106 Exploitation for Credential Access

Compliance Controls Affected

EU AI Act: Article 15, Article 9
ISO 42001: A.6.1.2, A.8.2
NIST AI RMF: MANAGE 2.2
OWASP LLM Top 10: LLM02:2025, LLM03:2025

What are the technical details?

Original Advisory

### Summary All components based on `BaseFileComponent` are vulnerable to the following vulnerability: 1. Docling (`DoclingInlineComponent`) 2. Docling Serve (`DoclingRemoteComponent`) 3. Read File (`FileComponent`) 4. NVIDIA Retriever Extraction (`NvidiaIngestComponent`) 5. Video File (`VideoFileComponent`) 6. Unstructured API (`UnstructuredComponent`) For clarity, from now on I'll only refer to Read File component. The Read File node processes user-controlled files. Example scenario is a RAG chatbot - a system that allows users of an organization to ask questions about documents saved in the organizations. By controlling a files that are digested into the RAG, an attacker can direct the node to read *any* file on the file-system by absolute path. Using this vulnerability an attacker can acheive RCE: 1. Upload a file that directs the node to read Langflow's `secret_key` file containing the JWT token secret. 2. This would allow the attacker then to simply task the Chatbot for the JWT secret. 3. Using this secret, the attacker then crafts a JWT token for any user-id, bypassing authentication. 4. Code execution is then trivial - simply create a new flow with "Python Interpreter" node, fill it with arbitrary Python code and execute it. Tested on commit 2d67402b1dbaefcbce85a244d4a6cd5e4bda1cfe ### Details The vulnerability is in: `langflow/src/lfx/src/lfx/base/data/base_file.py` Specifically in `_unpack_bundle`. This function extracts tar files, which can contain a symlink. This symlink can point to any file in the filesystem. Then, in `self.process_files()`, the file pointed by the symlink will be parsed and saved into the RAG. This can be done with unlimited number of symlinks in the same tar which can also be useful in some scenarios. Suggestd fix - iterate over the files and make sure all are regular files or directories. ### PoC Reproduction: 1. Create a flow with Read File (or any other affected components), and connect its output to some storage such as Chroma DB. 2. Create a symlink pointing to any file. For the above exploit, point the symlink to langflow's JWT token file. 3. Compress this symlink with tar. 4. Upload it to the Read File component. 5. Check the database, or ask a Chatbot connected to this vector database for the contents of the file. Concrete PoC: ------------ - Flow with RAG ingestion and a Chatbot around it: [Vector Store RAG.json](https://github.com/user-attachments/files/25159960/Vector.Store.RAG.json) - Exploit tar: [archive.tar.txt](https://github.com/user-attachments/files/25159954/archive.tar.txt) (remove .txt, GitHub blocked .tar) - Create a file `/tmp/trip.docx` with any contents in it - Ingest the file in the flow above, and ask the Chatbot a question about this file. A demo showing the attack: https://github.com/user-attachments/assets/af00f700-f13f-4eac-848e-8afd11fb9297 In the demo the attacker steals `Langflow` secret key used to sign JWTs. The second stage of the attack, not shown in the demo, is using this key to sign a JWT token and executing Python code on the server using the Python code interpreter node. ### Impact Any Langflow user using any of the above mentioned components to ingest user-controlled data is affected. Depending on exact scenario, the user can also be exposed to an RCE risk. ### Patches Fixed in **1.9.2** via PR [#12945](https://github.com/langflow-ai/langflow/pull/12945). `BaseFileComponent._unpack_bundle` now rejects symlink and hardlink members (and any non-regular entries) during TAR extraction, with additional defensive symlink filtering during directory recursion and after extraction. Upgrade to **1.9.2 or later**. Ori Lahav Security Researcher @ Rubrik Inc.

Exploitation Scenario

An attacker targeting an enterprise's internal AI knowledge-base chatbot built on Langflow crafts a TAR archive containing a single symlink named `quarterly-report.docx` pointing to `/opt/langflow/.langflow/secret_key`. They upload this archive via the RAG ingestion endpoint — no authentication required in many deployments, as the endpoint is designed for employee document uploads. Langflow's `_unpack_bundle` extracts the archive and follows the symlink, reading the JWT secret and persisting it in the connected Chroma DB vector store alongside legitimate documents. The attacker then queries the chatbot: 'Summarize the document about the application secret key,' receiving the JWT signing secret verbatim in the LLM response. Using this secret, the attacker forges a JWT token with an arbitrary admin user ID, authenticates to the Langflow API, creates a new flow containing a Python Interpreter node pre-loaded with a reverse shell payload, executes the flow, and achieves persistent RCE on the host server.

Weaknesses (CWE)

CWE-200 — Exposure of Sensitive Information to an Unauthorized Actor: The product exposes sensitive information to an actor that is not explicitly authorized to have access to that information.

  • [Architecture and Design] Compartmentalize the system to have "safe" areas where trust boundaries can be unambiguously drawn. Do not allow sensitive data to go outside of the trust boundary and always be careful when interfacing with a compartment outside of the safe area. Ensure that appropriate compartmentalization is built into the system design, and the compartmentalization allows for and reinforces privilege separation functionality. Architects and designers should rely on the principle of least privilege to decide the appropriate time to use privileges and the time to drop privileges.

Source: MITRE CWE corpus.

CVSS Vector

CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Timeline

Published
June 19, 2026
Last Modified
June 19, 2026
First Seen
June 20, 2026

Related Vulnerabilities