Skip to main content
Vulnerability Database/CVE-2026-95928

CVE-2026-95928: Recommenders RCE Deserialization Vulnerability

CVE-2026-95928 is a deserialization flaw in recommenders-team recommenders up to version 1.2.1 that enables remote code execution through pickle.load manipulation. This post explains its technical details, affected versions, impact, and mitigation steps.

Published:

CVE-2026-95928 Overview

CVE-2026-95928 is an insecure deserialization vulnerability affecting the recommenders-team recommenders library through version 1.2.1. The flaw resides in the pickle.load call within recommenders/models/newsrec/io/mind_iterator.py, part of the Dict Loading component. Loading an attacker-controlled pickle file triggers arbitrary Python object reconstruction, enabling code execution in the context of the loading process. The issue is tracked as [CWE-20] Improper Input Validation. A public exploit exists, and the project maintainers have not responded to the upstream issue report at the time of publication.

Critical Impact

An attacker who can influence the pickle input loaded by mind_iterator.py can achieve arbitrary code execution within the Python process using the recommenders library.

Affected Products

  • recommenders-team recommenders versions up to and including 1.2.1
  • Component: recommenders/models/newsrec/io/mind_iterator.py (Dict Loading)
  • Python environments importing the vulnerable MIND iterator

Discovery Timeline

  • 2026-09-23 - CVE-2026-95928 published to the National Vulnerability Database
  • 2026-09-23 - Last updated in NVD database

Technical Details for CVE-2026-95928

Vulnerability Analysis

The recommenders library provides tooling for building recommendation systems, including the MIND news recommendation dataset iterator. The mind_iterator.py module reads cached dictionary artifacts using Python's pickle.load. Python's pickle module is not a safe deserializer. It reconstructs arbitrary objects by invoking constructors and __reduce__ methods embedded in the byte stream. When an untrusted pickle file reaches this code path, the deserializer executes the attacker's chosen callables during load.

The advisory categorizes the flaw as improper input validation [CWE-20]. No integrity check, signature verification, or safe-loader wrapper protects the deserialization call. Exploitation requires that the attacker supply or replace the pickle file consumed by the iterator, which may occur through shared dataset directories, downloaded artifacts, or multi-tenant training environments.

Root Cause

The root cause is the direct use of pickle.load on file-backed dictionary data without validating source authenticity or restricting the object graph. Any process that invokes the MIND iterator against attacker-controlled pickle content inherits the deserialization risk.

Attack Vector

Exploitation is network-reachable in scenarios where pickle artifacts are pulled from remote storage, shared model registries, or collaborative notebooks. The attacker crafts a malicious pickle payload containing a __reduce__ gadget that executes arbitrary commands when the recommenders code path loads the dictionary. User interaction — typically running a training or inference notebook — is required to trigger the load. See GitHub Issue #2368 and the VulDB entry for CVE-2026-95928 for additional context.

Stop Remote Code Execution Before It Runs

Singularity™ Endpoint detects and blocks exploit attempts at machine speed, including zero-days and novel attack techniques.

Stop Exploit Attempts

Detection Methods for CVE-2026-95928

Indicators of Compromise

  • Unexpected child processes spawned by Python interpreters running recommenders training or inference jobs.
  • Pickle files in MIND dataset cache directories with recent modification timestamps that do not match dataset provisioning workflows.
  • Outbound network connections initiated during pickle.load execution in mind_iterator.py.

Detection Strategies

  • Instrument Python environments to log invocations of pickle.load and pickle.loads against files under recommenders dataset paths.
  • Hash and inventory expected pickle artifacts, and alert on any deviation prior to load.
  • Correlate process-lineage telemetry to identify shell, curl, wget, or interpreter spawns from data-science workloads.

Monitoring Recommendations

  • Monitor file integrity on MIND dataset cache directories and training artifact stores.
  • Watch for anomalous egress from Jupyter, Airflow, or training-runner hosts that use the recommenders library.
  • Review CI/CD logs for pipelines that pull recommendation datasets from untrusted mirrors.

How to Mitigate CVE-2026-95928

Immediate Actions Required

  • Restrict the recommenders MIND iterator to pickle files produced by trusted, authenticated pipelines only.
  • Isolate training and inference jobs that use recommenders in sandboxed containers with minimal network egress and no secrets access.
  • Audit shared dataset directories and model registries for unverified pickle artifacts and remove or quarantine unknown files.

Patch Information

No vendor patch is referenced in the advisory. The upstream project was notified through GitHub Issue #2368 but has not responded. Track the recommenders-team repository for a fixed release, and pin the library to a known-safe internal build once available.

Workarounds

  • Replace pickle.load usage with a safer serialization format such as JSON or safetensors for dictionary artifacts where feasible.
  • Wrap deserialization in a restricted unpickler that whitelists allowed classes and rejects __reduce__ gadgets outside a small allowlist.
  • Sign pickle artifacts and verify signatures before load, refusing any file whose signature does not match the trusted signer.
  • Run recommenders workloads under least-privilege service accounts to constrain the impact of successful deserialization.
bash
# Configuration example: verify artifact integrity before invoking the MIND iterator
EXPECTED_SHA256="<known-good-hash>"
ACTUAL_SHA256=$(sha256sum ./mind_cache/dict.pkl | awk '{print $1}')
if [ "$EXPECTED_SHA256" != "$ACTUAL_SHA256" ]; then
  echo "Refusing to load: pickle artifact hash mismatch"
  exit 1
fi

Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

Experience the Most Advanced Cybersecurity Platform

See how the world’s most intelligent, autonomous cybersecurity platform can protect your organization today and into the future.