CVE-2026-115878
HighCVSS 7.8Summary
In the Stanza Stanford NLP Python library, versions 1.14.0 through 1.15.0 allow loading an attacker-supplied lemmatizer checkpoint to execute arbitrary code because stanza/models/lemma/trainer.py stores pos_dict as gzip-compressed pickle bytes and Trainer.load passes the decompressed stream to unrestricted pickle.loads. The path is reachable during pipeline construction through a caller-influenced lemma_model_path before inference begins.
Risk Assessment
A malicious model checkpoint can lead to arbitrary code execution in the context of the data-processing process. The risk affects environments loading untrusted Stanza models.
Recommendation
Upgrade Stanza to version 1.15.0 or later. Load only models from trusted sources and verify their integrity.
Other vulnerabilities in Stanza
See all- CVE-2026-59974High
Stanza is a Stanford NLP Python library for tokenization, sentence segmentation, NER, and parsing of many human languages. Prior to 1.14.0, stanza.resources.common.unzip passes downloaded archives to zipfile.ZipFile.extractall without validating member paths, allowing a malicious archive with parent-directory traversal entries to write outside the intended model directory and potentially enable code execution. This issue is fixed in version 1.14.0.
- CVE-2026-54499High
A vulnerability in the Stanza NLP library allows arbitrary code execution via a malicious .pt model file. The model loading mechanism first attempts safe torch.load with weights_only=True, but falls back to unsafe weights_only=False on an attacker-controlled pickle.UnpicklingError, enabling arbitrary code execution when the model is loaded.
Original NVD description (English source)
Stanza is a Stanford NLP Python library for tokenization, sentence segmentation, NER, and parsing of many human languages. From 1.14.0 until 1.15.0, loading an attacker-supplied lemmatizer checkpoint can execute arbitrary code because stanza/models/lemma/trainer.py stores pos_dict as gzip-compressed pickle bytes and Trainer.load passes the decompressed stream to unrestricted pickle.loads. The outer torch.load call uses weights_only=True, but the nested bytes are treated as a primitive and are not inspected by that allowlist. The path is reachable during pipeline construction through a caller-influenced lemma_model_path, before inference begins. This issue is fixed in version 1.15.0.
Vulnerability data from NVD (NIST) · CISA KEV · EPSS

