Miggo Logo

CVE-2025-3108:
LlamaIndex has Incomplete Documentation of Program Execution related to JsonPickleSerializer component

5

CVSS Score

Basic Information

EPSS Score
-
Published
7/7/2025
Updated
7/7/2025
KEV Status
No
Technology
TechnologyPython

Technical Details

CVSS Vector
CVSS:3.0/AV:N/AC:H/PR:N/UI:R/S:U/C:L/I:L/A:L
Package NameEcosystemVulnerable VersionsFirst Patched Version
llama-index-corepip>= 0.11.15, <= 0.12.400.12.41

Vulnerability Intelligence
Miggo AIMiggo AI

Miggo AIRoot Cause Analysis

The vulnerability lies in the JsonPickleSerializer component of the LlamaIndex library, specifically within its deserialize method. This method attempts to deserialize a given string by first trying pickle.loads() after base64 decoding. The use of pickle.loads() on data that could be controlled by an attacker is a well-known security risk, as it can allow for arbitrary code execution. The provided patch from commit 702e4340623092fac4cf2fe95eb9465034856da3 addresses this issue not by removing the dangerous functionality, but by renaming the class to PickleSerializer and adding a prominent warning in the docstring of the deserialize method. This change signals to developers that the method is unsafe and should only be used with trusted data. The core vulnerable operation, pickle.loads(base64.b64decode(value)), remains in the code. Therefore, any runtime profile during an exploit of this vulnerability would show the deserialize method of the JsonPickleSerializer (or PickleSerializer in patched versions) as the key function processing the malicious input.

Vulnerable functions

llama_index.core.workflow.context_serializers.JsonPickleSerializer.deserialize
llama-index-core/llama_index/core/workflow/context_serializers.py
The function `deserialize` within the `JsonPickleSerializer` class (renamed to `PickleSerializer` in the patch) uses `pickle.loads()` on a base64-decoded input string. Deserializing untrusted data with `pickle` can lead to arbitrary code execution, as a malicious payload can be crafted to execute arbitrary commands. The patch renames the class and adds a warning but does not remove the dangerous `pickle.loads` call, which is the root cause of the vulnerability.

WAF Protection Rules

WAF Rule

In*ompl*t* *o*um*nt*tion o* Pro*r*m *x**ution *xists in t** run-ll*m*/ll*m*_in**x li*r*ry's JsonPi*kl*S*ri*liz*r *ompon*nt, *****tin* v*rsions v*.**.** t*rou** v*.**.**. T*is vuln*r**ility *llows r*mot* *o** *x**ution *u* to *n ins**ur* **ll***k to P

Reasoning

T** vuln*r**ility li*s in t** `JsonPi*kl*S*ri*liz*r` *ompon*nt o* t** Ll*m*In**x li*r*ry, sp**i*i**lly wit*in its `**s*ri*liz*` m*t*o*. T*is m*t*o* *tt*mpts to **s*ri*liz* * *iv*n strin* *y *irst tryin* `pi*kl*.lo**s()` **t*r **s*** ***o*in*. T** us*