<?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, 03 Oct 2026 00:24:01 +0000</lastBuildDate>
    <item>
      <title>CVE-2026-67429 — Flyto2 Core: Arbitrary file write via image.download (and other file-writing modules)</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2026-67429</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; flytohub flyto-core&lt;/p&gt;
&lt;p&gt;Flyto2 Core is an execution kernel for automation and AI-agent workflows. Prior to 2.26.6, image.download and related file-writing modules use caller-controlled output_dir instead of validate_path_with_env_config and its FLYTO_SANDBOX_DIR confinement, allowing attacker-controlled response bytes to be written to arbitrary filesystem paths the process can access. This issue is fixed in version 2.26.6.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; flytohub flyto-core&lt;/p&gt;
&lt;p&gt;Flyto2 Core is an execution kernel for automation and AI-agent workflows. Prior to 2.26.6, image.download and related file-writing modules use caller-controlled output_dir instead of validate_path_with_env_config and its FLYTO_SANDBOX_DIR confinement, allowing attacker-controlled response bytes to be written to arbitrary filesystem paths the process can access. This issue is fixed in version 2.26.6.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2026-67429</guid>
    </item>
    <item>
      <title>GHSA-2956-977x-2w3r — Flyto2 Core: Arbitrary file write via image.download (and other file-writing modules)</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-2956-977x-2w3r</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: flyto-core&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`image.download` fetches a URL and writes the response to disk. It does not use the central path guard (`validate_path_with_env_config`, which confines writes to `FLYTO_SANDBOX_DIR`); instead it confines the output to `output_dir`, but `output_dir` is itself a caller parameter. Since the attacker sets both the target and the base it is checked against, the check is meaningless, and attacker-controlled bytes (the HTTP response) land at any absolute path the process can write.&lt;/p&gt;
&lt;p&gt;## Affected code&lt;/p&gt;
&lt;p&gt;`src/core/modules/atomic/image/download.py`:&lt;/p&gt;
&lt;p&gt;```python
output_path = params.get(&amp;#39;output_path&amp;#39;)
output_dir  = params.get(&amp;#39;output_dir&amp;#39;, &amp;#39;/tmp&amp;#39;)   # caller-controlled base
...
base_real   = os.path.realpath(output_dir)
target_real = os.path.realpath(output_path)
if os.path.commonpath([base_real, target_real]) != base_real:
    raise Exception(&amp;#39;Invalid file path&amp;#39;)          # base is attacker-chosen, so always passes
...
content = await response.read()                   # attacker-hosted bytes
with open(target_real, &amp;#39;wb&amp;#39;) as f:
    f.write(content)
```&lt;/p&gt;
&lt;p&gt;`commonpath` is used correctly, but the base is caller-supplied, so setting `output_dir=&amp;#39;/&amp;#39;` passes any target. `file.write`, by contrast, uses `validate_path_with_env_config()` and stays inside `FLYTO_SANDBOX_DIR`.&lt;/p&gt;
&lt;p&gt;This is not isolated to `image.download`. Most other file-writing modules write to a caller `output_path` with no path check at all: `image.convert`, `image.resize`, `image.crop`, `image.compress`, `image.rotate`, `…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: flyto-core&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;`image.download` fetches a URL and writes the response to disk. It does not use the central path guard (`validate_path_with_env_config`, which confines writes to `FLYTO_SANDBOX_DIR`); instead it confines the output to `output_dir`, but `output_dir` is itself a caller parameter. Since the attacker sets both the target and the base it is checked against, the check is meaningless, and attacker-controlled bytes (the HTTP response) land at any absolute path the process can write.&lt;/p&gt;
&lt;p&gt;## Affected code&lt;/p&gt;
&lt;p&gt;`src/core/modules/atomic/image/download.py`:&lt;/p&gt;
&lt;p&gt;```python
output_path = params.get(&amp;#39;output_path&amp;#39;)
output_dir  = params.get(&amp;#39;output_dir&amp;#39;, &amp;#39;/tmp&amp;#39;)   # caller-controlled base
...
base_real   = os.path.realpath(output_dir)
target_real = os.path.realpath(output_path)
if os.path.commonpath([base_real, target_real]) != base_real:
    raise Exception(&amp;#39;Invalid file path&amp;#39;)          # base is attacker-chosen, so always passes
...
content = await response.read()                   # attacker-hosted bytes
with open(target_real, &amp;#39;wb&amp;#39;) as f:
    f.write(content)
```&lt;/p&gt;
&lt;p&gt;`commonpath` is used correctly, but the base is caller-supplied, so setting `output_dir=&amp;#39;/&amp;#39;` passes any target. `file.write`, by contrast, uses `validate_path_with_env_config()` and stays inside `FLYTO_SANDBOX_DIR`.&lt;/p&gt;
&lt;p&gt;This is not isolated to `image.download`. Most other file-writing modules write to a caller `output_path` with no path check at all: `image.convert`, `image.resize`, `image.crop`, `image.compress`, `image.rotate`, `…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-2956-977x-2w3r</guid>
    </item>
  </channel>
</rss>
