<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>Stanza 1.14.0 (&lt; 1.15.0) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/stanza-1.14.0--1.15.0/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Tue, 03 Nov 2026 22:15:37 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/stanza-1.14.0--1.15.0/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Stanza: RCE via pickle deserialization in lemmatizer (CVE-2026-115878)</title><link>https://feed.craftedsignal.io/briefs/2026-11-stanza-rce-deserialization/</link><pubDate>Tue, 03 Nov 2026 22:15:37 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-11-stanza-rce-deserialization/</guid><description>Stanza version 1.14.0 is vulnerable to remote code execution (RCE) because the lemmatizer component processes a gzip-compressed pickle stream via an unrestricted pickle.loads() call during pipeline initialization.</description><content:encoded><![CDATA[<p>Stanza version 1.14.0 contains a vulnerability where the lemmatizer component processes an embedded pickle stream without restriction. While the initial model load uses <code>torch.load(weights_only=True)</code>, the internal <code>dicts</code> field (a gzip-compressed pickle) is extracted and passed to an unrestricted <code>pickle.loads()</code> function. An attacker supplying a crafted lemma checkpoint can execute arbitrary code with the privileges of the process loading the pipeline. This vulnerability is triggered during <code>stanza.Pipeline</code> construction.</p>
<h2 id="attack-mechanism">Attack Mechanism</h2>
<ol>
<li>Stanza's <code>Trainer.load</code> performs <code>torch.load(weights_only=True)</code>. The outer <code>weights_only</code> check passes because the payload is hidden as <code>bytes</code> in the <code>dicts</code> field.</li>
<li><code>Trainer.load</code> invokes <code>_unpack_pos_dict</code> with the <code>dicts</code> bytes.</li>
<li><code>_unpack_pos_dict</code> decompresses the gzip stream and executes <code>pickle.loads()</code>.</li>
<li>Execution is confirmed end-to-end where a crafted checkpoint returning <code>os.system</code> via <code>__reduce__</code> successfully executes the command at load time.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows for arbitrary code execution on the system running the Stanza pipeline. This occurs at initialization time before any processing or inference is performed.</p>
<h2 id="recommendation">Recommendation</h2>
<p>Patch Stanza by replacing the <code>pickle.loads()</code> call in <code>stanza/models/lemma/trainer.py</code> with a restricted unpickler that only allows primitive types.</p>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category></item></channel></rss>