<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://db.gcve.eu</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 05 Nov 2026 06:51:58 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-115878</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-115878</link>
      <description>&lt;p&gt;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.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;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.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-115878</guid>
    </item>
    <item>
      <title>GHSA-gh9r-c94j-cmp5 — Stanza: RCE via pickle deserialization in the lemmatizer</title>
      <link>https://db.gcve.eu/vuln/ghsa-gh9r-c94j-cmp5</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: stanza&lt;/p&gt;
&lt;p&gt;## TL;DR&lt;/p&gt;
&lt;p&gt;Loading an attacker-supplied lemma `.pt` runs arbitrary code as the loading user. Since 1.14.0 the lemmatizer stores `pos_dict` as a gzip-compressed pickle in the checkpoint&amp;#39;s `dicts` field (a `bytes` value). `torch.load(weights_only=True)` treats `bytes` as a primitive and passes it through unexamined, so its allowlist never sees the inner stream. `Trainer.load` then feeds those bytes to an **unrestricted `pickle.loads`**: the only bare `pickle.loads` in the tree. Result: `weights_only=True` gives no protection here, and model loading executes code.&lt;/p&gt;
&lt;p&gt;Confirmed end-to-end against stanza 1.14.0 / PyTorch 2.13.0 / CPython 3.13.7: a crafted checkpoint whose payload `__reduce__` returns `(os.system, (cmd,))` ran the command at load time (marker file showed `uid=501(...)`, `executed_by=...`).&lt;/p&gt;
&lt;p&gt;A downstream user is vulnerable whenever they build a pipeline that loads a caller-supplied lemmatizer checkpoint. i.e. `stanza.Pipeline(lang=..., processors=&amp;#34;tokenize,pos,lemma&amp;#34;, lemma_model_path=&amp;#34;&amp;lt;attacker-influenced .pt&amp;gt;&amp;#34;)` (or any equivalent load of an untrusted/shared lemma model through a custom registry) - since that call routes straight into `Trainer.load` -&amp;gt; `_unpack_pos_dict` and executes the embedded pickle at construction time.&lt;/p&gt;
&lt;p&gt;## The vulnerable path&lt;/p&gt;
&lt;p&gt;`stanza/models/lemma/trainer.py`:&lt;/p&gt;
&lt;p&gt;```python
# _pack_pos_dict (write side): pos_dict -&amp;gt; pickle -&amp;gt; gzip -&amp;gt; bytes, stored under checkpoint[&amp;#39;dicts&amp;#39;]&lt;/p&gt;
&lt;p&gt;def _unpack_pos_dict(data):                 # line 54
    buf = io.BytesI…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: stanza&lt;/p&gt;
&lt;p&gt;## TL;DR&lt;/p&gt;
&lt;p&gt;Loading an attacker-supplied lemma `.pt` runs arbitrary code as the loading user. Since 1.14.0 the lemmatizer stores `pos_dict` as a gzip-compressed pickle in the checkpoint&amp;#39;s `dicts` field (a `bytes` value). `torch.load(weights_only=True)` treats `bytes` as a primitive and passes it through unexamined, so its allowlist never sees the inner stream. `Trainer.load` then feeds those bytes to an **unrestricted `pickle.loads`**: the only bare `pickle.loads` in the tree. Result: `weights_only=True` gives no protection here, and model loading executes code.&lt;/p&gt;
&lt;p&gt;Confirmed end-to-end against stanza 1.14.0 / PyTorch 2.13.0 / CPython 3.13.7: a crafted checkpoint whose payload `__reduce__` returns `(os.system, (cmd,))` ran the command at load time (marker file showed `uid=501(...)`, `executed_by=...`).&lt;/p&gt;
&lt;p&gt;A downstream user is vulnerable whenever they build a pipeline that loads a caller-supplied lemmatizer checkpoint. i.e. `stanza.Pipeline(lang=..., processors=&amp;#34;tokenize,pos,lemma&amp;#34;, lemma_model_path=&amp;#34;&amp;lt;attacker-influenced .pt&amp;gt;&amp;#34;)` (or any equivalent load of an untrusted/shared lemma model through a custom registry) - since that call routes straight into `Trainer.load` -&amp;gt; `_unpack_pos_dict` and executes the embedded pickle at construction time.&lt;/p&gt;
&lt;p&gt;## The vulnerable path&lt;/p&gt;
&lt;p&gt;`stanza/models/lemma/trainer.py`:&lt;/p&gt;
&lt;p&gt;```python
# _pack_pos_dict (write side): pos_dict -&amp;gt; pickle -&amp;gt; gzip -&amp;gt; bytes, stored under checkpoint[&amp;#39;dicts&amp;#39;]&lt;/p&gt;
&lt;p&gt;def _unpack_pos_dict(data):                 # line 54
    buf = io.BytesI…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-gh9r-c94j-cmp5</guid>
    </item>
  </channel>
</rss>
