<?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://vulnerability.circl.lu</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>Fri, 02 Oct 2026 08:10:37 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-100843 — MONAI before 1.6.0 Remote Code Execution via algo_from_pickle</title>
      <link>https://vulnerability.circl.lu/vuln/cve-2026-100843</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Project-MONAI MONAI&lt;/p&gt;
&lt;p&gt;MONAI versions before 1.6.0 contain a remote code execution vulnerability in the algo_from_pickle() function due to unsafe pickle.loads() deserialization in monai/auto3dseg/utils.py. Attackers can craft malicious pickle files that execute arbitrary system commands when deserialized by the vulnerable function.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Project-MONAI MONAI&lt;/p&gt;
&lt;p&gt;MONAI versions before 1.6.0 contain a remote code execution vulnerability in the algo_from_pickle() function due to unsafe pickle.loads() deserialization in monai/auto3dseg/utils.py. Attackers can craft malicious pickle files that execute arbitrary system commands when deserialized by the vulnerable function.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/cve-2026-100843</guid>
    </item>
    <item>
      <title>GHSA-qxq5-qhx6-94qw — Incomplete Fix in MONAI: algo_from_pickle() pickle.loads() RCE still present in v1.5.2 despite GHSA-89gg-p5r5-q6r4 clai…</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-qxq5-qhx6-94qw</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: monai&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;GHSA-89gg-p5r5-q6r4 claims the pickle deserialization vulnerability in
  `algo_from_pickle()` was fixed in v1.5.2. However, `monai/auto3dseg/utils.py`
  has not been modified since 2024-07-12 — 18 months before v1.5.2 was released
  (2026-01-29). All three `pickle.loads()` calls remain unchanged. The fix was
  never implemented.&lt;/p&gt;
&lt;p&gt;## Vulnerable Code&lt;/p&gt;
&lt;p&gt;File: `monai/auto3dseg/utils.py` (last commit: 2024-07-12, unchanged in v1.5.2)&lt;/p&gt;
&lt;p&gt;```python
  def algo_from_pickle(pkl_filename: str, ...):
      with open(pkl_filename, &amp;#34;rb&amp;#34;) as f_pi:
          data_bytes = f_pi.read()
      data = pickle.loads(data_bytes)          # SINK 1 — line 321, RCE fires here&lt;/p&gt;
&lt;p&gt;# isinstance/key checks happen AFTER deserialization — already too late&lt;/p&gt;
&lt;p&gt;algo_bytes = data.pop(&amp;#34;algo_bytes&amp;#34;)
      ...
      if len(template_paths_candidates) == 0:
          algo = pickle.loads(algo_bytes)      # SINK 2 — line 350
      else:
          for p in template_paths_candidates:
              algo = pickle.loads(algo_bytes)  # SINK 3 — line 356&lt;/p&gt;
&lt;p&gt;No Unpickler subclass, no find_class restriction, no allowlist.&lt;/p&gt;
&lt;p&gt;Why the Fix is Incomplete&lt;/p&gt;
&lt;p&gt;- monai/auto3dseg/utils.py last commit: 2024-07-12 (&amp;#34;drop python 3.8&amp;#34;)
  - v1.5.2 released: 2026-01-29 — release notes contain no pickle-related changes
  - v1.5.1 and v1.5.2 contain identical code at lines 321, 350, 356
  - GHSA-89gg-p5r5-q6r4 references a Zip Slip fix (unrelated) as the patch&lt;/p&gt;
&lt;p&gt;PoC&lt;/p&gt;
&lt;p&gt;import pickle, os&lt;/p&gt;
&lt;p&gt;class Exploit:
      def __re…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: monai&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;GHSA-89gg-p5r5-q6r4 claims the pickle deserialization vulnerability in
  `algo_from_pickle()` was fixed in v1.5.2. However, `monai/auto3dseg/utils.py`
  has not been modified since 2024-07-12 — 18 months before v1.5.2 was released
  (2026-01-29). All three `pickle.loads()` calls remain unchanged. The fix was
  never implemented.&lt;/p&gt;
&lt;p&gt;## Vulnerable Code&lt;/p&gt;
&lt;p&gt;File: `monai/auto3dseg/utils.py` (last commit: 2024-07-12, unchanged in v1.5.2)&lt;/p&gt;
&lt;p&gt;```python
  def algo_from_pickle(pkl_filename: str, ...):
      with open(pkl_filename, &amp;#34;rb&amp;#34;) as f_pi:
          data_bytes = f_pi.read()
      data = pickle.loads(data_bytes)          # SINK 1 — line 321, RCE fires here&lt;/p&gt;
&lt;p&gt;# isinstance/key checks happen AFTER deserialization — already too late&lt;/p&gt;
&lt;p&gt;algo_bytes = data.pop(&amp;#34;algo_bytes&amp;#34;)
      ...
      if len(template_paths_candidates) == 0:
          algo = pickle.loads(algo_bytes)      # SINK 2 — line 350
      else:
          for p in template_paths_candidates:
              algo = pickle.loads(algo_bytes)  # SINK 3 — line 356&lt;/p&gt;
&lt;p&gt;No Unpickler subclass, no find_class restriction, no allowlist.&lt;/p&gt;
&lt;p&gt;Why the Fix is Incomplete&lt;/p&gt;
&lt;p&gt;- monai/auto3dseg/utils.py last commit: 2024-07-12 (&amp;#34;drop python 3.8&amp;#34;)
  - v1.5.2 released: 2026-01-29 — release notes contain no pickle-related changes
  - v1.5.1 and v1.5.2 contain identical code at lines 321, 350, 356
  - GHSA-89gg-p5r5-q6r4 references a Zip Slip fix (unrelated) as the patch&lt;/p&gt;
&lt;p&gt;PoC&lt;/p&gt;
&lt;p&gt;import pickle, os&lt;/p&gt;
&lt;p&gt;class Exploit:
      def __re…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-qxq5-qhx6-94qw</guid>
    </item>
  </channel>
</rss>
