<?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://cve.radiocsirt.org</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>Sat, 17 Oct 2026 04:04:21 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-308466</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-308466</link>
      <description>EUVD-2026-308466</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-308466</guid>
    </item>
    <item>
      <title>fkie_cve-2026-42078</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-42078</link>
      <description>&lt;p&gt;PPTAgent is an agentic framework for reflective PowerPoint generation. Prior to commit 418491a, PPTAgent is vulnerable to arbitrary file write and directory creation via markdown_table_to_image. This issue has been patched via commit 418491a.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;PPTAgent is an agentic framework for reflective PowerPoint generation. Prior to commit 418491a, PPTAgent is vulnerable to arbitrary file write and directory creation via markdown_table_to_image. This issue has been patched via commit 418491a.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-42078</guid>
    </item>
    <item>
      <title>GHSA-hrcw-xc63-g29m — PPTAgent: Arbitrary File Write + Directory Creation via markdown_table_to_image</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-hrcw-xc63-g29m</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pptagent&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The `markdown_table_to_image` tool accepts a caller-controlled path parameter and passes it directly to `get_html_table_image`:&lt;/p&gt;
&lt;p&gt;```python
# pptagent/mcp_server.py:127-143
def markdown_table_to_image(markdown_table: str, path: str, css: str) -&amp;gt; str:
    &amp;#34;&amp;#34;&amp;#34;
    Args:
        path (str): The file path where the image will be saved
    &amp;#34;&amp;#34;&amp;#34;
    html = markdown_to_html(markdown_table)
    get_html_table_image(html, path, css)           # ← no path validation
    return f&amp;#34;Markdown table converted to image and saved to {path}&amp;#34;&lt;/p&gt;
&lt;p&gt;# pptagent/utils.py:337-366
def get_html_table_image(html: str, output_path: str, css: str = None):
    parent_dir, base_name = os.path.split(output_path)
    if parent_dir and not os.path.exists(parent_dir):
        os.makedirs(parent_dir)                     # ← creates arbitrary directories
    hti = Html2Image(...)
    hti.screenshot(
        html_str=html,
        css_str=css,
        save_as=base_name,                          # ← writes image to any directory
        size=(1000, 600),
    )
```&lt;/p&gt;
&lt;p&gt;`os.makedirs(parent_dir)` creates arbitrary directory trees, and `Html2Image.screenshot` writes the rendered image to `parent_dir/base_name`. Unlike `download_file` in the same project, there is no `is_relative_to(workspace)` guard. This behaviour can be fixed with the same pattern as the above.&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;The concrete attack scenarios include&lt;/p&gt;
&lt;p&gt;- SSH key replacement: `path = &amp;#34;/home/user/.ssh/authorized_keys&amp;#34;` — replaces the authorized_keys fil…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pptagent&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The `markdown_table_to_image` tool accepts a caller-controlled path parameter and passes it directly to `get_html_table_image`:&lt;/p&gt;
&lt;p&gt;```python
# pptagent/mcp_server.py:127-143
def markdown_table_to_image(markdown_table: str, path: str, css: str) -&amp;gt; str:
    &amp;#34;&amp;#34;&amp;#34;
    Args:
        path (str): The file path where the image will be saved
    &amp;#34;&amp;#34;&amp;#34;
    html = markdown_to_html(markdown_table)
    get_html_table_image(html, path, css)           # ← no path validation
    return f&amp;#34;Markdown table converted to image and saved to {path}&amp;#34;&lt;/p&gt;
&lt;p&gt;# pptagent/utils.py:337-366
def get_html_table_image(html: str, output_path: str, css: str = None):
    parent_dir, base_name = os.path.split(output_path)
    if parent_dir and not os.path.exists(parent_dir):
        os.makedirs(parent_dir)                     # ← creates arbitrary directories
    hti = Html2Image(...)
    hti.screenshot(
        html_str=html,
        css_str=css,
        save_as=base_name,                          # ← writes image to any directory
        size=(1000, 600),
    )
```&lt;/p&gt;
&lt;p&gt;`os.makedirs(parent_dir)` creates arbitrary directory trees, and `Html2Image.screenshot` writes the rendered image to `parent_dir/base_name`. Unlike `download_file` in the same project, there is no `is_relative_to(workspace)` guard. This behaviour can be fixed with the same pattern as the above.&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;The concrete attack scenarios include&lt;/p&gt;
&lt;p&gt;- SSH key replacement: `path = &amp;#34;/home/user/.ssh/authorized_keys&amp;#34;` — replaces the authorized_keys fil…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-hrcw-xc63-g29m</guid>
    </item>
    <item>
      <title>PYSEC-2026-2893 — PPTAgent: Arbitrary File Write + Directory Creation via markdown_table_to_image</title>
      <link>https://cve.radiocsirt.org/vuln/pysec-2026-2893</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pptagent&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The `markdown_table_to_image` tool accepts a caller-controlled path parameter and passes it directly to `get_html_table_image`:&lt;/p&gt;
&lt;p&gt;```python
# pptagent/mcp_server.py:127-143
def markdown_table_to_image(markdown_table: str, path: str, css: str) -&amp;gt; str:
    &amp;#34;&amp;#34;&amp;#34;
    Args:
        path (str): The file path where the image will be saved
    &amp;#34;&amp;#34;&amp;#34;
    html = markdown_to_html(markdown_table)
    get_html_table_image(html, path, css)           # ← no path validation
    return f&amp;#34;Markdown table converted to image and saved to {path}&amp;#34;&lt;/p&gt;
&lt;p&gt;# pptagent/utils.py:337-366
def get_html_table_image(html: str, output_path: str, css: str = None):
    parent_dir, base_name = os.path.split(output_path)
    if parent_dir and not os.path.exists(parent_dir):
        os.makedirs(parent_dir)                     # ← creates arbitrary directories
    hti = Html2Image(...)
    hti.screenshot(
        html_str=html,
        css_str=css,
        save_as=base_name,                          # ← writes image to any directory
        size=(1000, 600),
    )
```&lt;/p&gt;
&lt;p&gt;`os.makedirs(parent_dir)` creates arbitrary directory trees, and `Html2Image.screenshot` writes the rendered image to `parent_dir/base_name`. Unlike `download_file` in the same project, there is no `is_relative_to(workspace)` guard. This behaviour can be fixed with the same pattern as the above.&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;The concrete attack scenarios include&lt;/p&gt;
&lt;p&gt;- SSH key replacement: `path = &amp;#34;/home/user/.ssh/authorized_keys&amp;#34;` — replaces the authorized_keys fil…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pptagent&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;The `markdown_table_to_image` tool accepts a caller-controlled path parameter and passes it directly to `get_html_table_image`:&lt;/p&gt;
&lt;p&gt;```python
# pptagent/mcp_server.py:127-143
def markdown_table_to_image(markdown_table: str, path: str, css: str) -&amp;gt; str:
    &amp;#34;&amp;#34;&amp;#34;
    Args:
        path (str): The file path where the image will be saved
    &amp;#34;&amp;#34;&amp;#34;
    html = markdown_to_html(markdown_table)
    get_html_table_image(html, path, css)           # ← no path validation
    return f&amp;#34;Markdown table converted to image and saved to {path}&amp;#34;&lt;/p&gt;
&lt;p&gt;# pptagent/utils.py:337-366
def get_html_table_image(html: str, output_path: str, css: str = None):
    parent_dir, base_name = os.path.split(output_path)
    if parent_dir and not os.path.exists(parent_dir):
        os.makedirs(parent_dir)                     # ← creates arbitrary directories
    hti = Html2Image(...)
    hti.screenshot(
        html_str=html,
        css_str=css,
        save_as=base_name,                          # ← writes image to any directory
        size=(1000, 600),
    )
```&lt;/p&gt;
&lt;p&gt;`os.makedirs(parent_dir)` creates arbitrary directory trees, and `Html2Image.screenshot` writes the rendered image to `parent_dir/base_name`. Unlike `download_file` in the same project, there is no `is_relative_to(workspace)` guard. This behaviour can be fixed with the same pattern as the above.&lt;/p&gt;
&lt;p&gt;### Impact&lt;/p&gt;
&lt;p&gt;The concrete attack scenarios include&lt;/p&gt;
&lt;p&gt;- SSH key replacement: `path = &amp;#34;/home/user/.ssh/authorized_keys&amp;#34;` — replaces the authorized_keys fil…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/pysec-2026-2893</guid>
    </item>
  </channel>
</rss>
