<?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>Tue, 27 Oct 2026 15:03:30 +0000</lastBuildDate>
    <item>
      <title>CVE-2023-47890</title>
      <link>https://cve.radiocsirt.org/vuln/cve-2023-47890</link>
      <description>&lt;p&gt;pyLoad 0.5.0 is vulnerable to Unrestricted File Upload.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;pyLoad 0.5.0 is vulnerable to Unrestricted File Upload.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/cve-2023-47890</guid>
    </item>
    <item>
      <title>PYSEC-2026-1819 — Download to arbitrary folder can lead to RCE</title>
      <link>https://cve.radiocsirt.org/vuln/pysec-2026-1819</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pyload-ng&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;A web UI user can store files anywhere on the pyLoad server and gain command execution by abusing scripts.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;When a user creates a new package, a subdirectory is created within the /downloads folder to store files. This new directory name is derived from the package name, except a filter is applied to make sure it can&amp;#39;t traverse directories and stays within /downloads.&lt;/p&gt;
&lt;p&gt;src/pyload/core/api/__init__.py::add_package::L432&lt;/p&gt;
&lt;p&gt;```python
  folder = (
      folder.replace(&amp;#34;http://&amp;#34;, &amp;#34;&amp;#34;)
      .replace(&amp;#34;https://&amp;#34;, &amp;#34;&amp;#34;)
      .replace(&amp;#34;:&amp;#34;, &amp;#34;&amp;#34;)
      .replace(&amp;#34;/&amp;#34;, &amp;#34;_&amp;#34;)
      .replace(&amp;#34;\\&amp;#34;, &amp;#34;_&amp;#34;)
  )
```&lt;/p&gt;
&lt;p&gt;So if a package were created with the name ```&amp;#34;../&amp;#34;``` the application would instead create the folder ```&amp;#34;/downloads/.._/&amp;#34;```&lt;/p&gt;
&lt;p&gt;However, when editing packages there is no prevention in place and a user can just pick any arbitrary directory in the filesystem.&lt;/p&gt;
&lt;p&gt;src/pyload/webui/app/blueprints/json_blueprint.py::edit_package::L195&lt;/p&gt;
&lt;p&gt;```python
  id = int(flask.request.form[&amp;#34;pack_id&amp;#34;])
  data = {
      &amp;#34;name&amp;#34;: flask.request.form[&amp;#34;pack_name&amp;#34;],
      &amp;#34;_folder&amp;#34;: flask.request.form[&amp;#34;pack_folder&amp;#34;],
      &amp;#34;password&amp;#34;: flask.request.form[&amp;#34;pack_pws&amp;#34;],
  }&lt;/p&gt;
&lt;p&gt;api.set_package_data(id, data)
```&lt;/p&gt;
&lt;p&gt;### Steps to reproduce&lt;/p&gt;
&lt;p&gt;1. Login to a pyLoad instance
2. Go to &amp;#34;Queue&amp;#34; and create a new package with any name and a valid link
3. Click &amp;#34;Edit Package&amp;#34; on the newly created package and set the folder as &amp;#34;/config/scripts/download_finished/&amp;#34;
4. Restart the package 
5. Check the server filesy…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: pyload-ng&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;A web UI user can store files anywhere on the pyLoad server and gain command execution by abusing scripts.&lt;/p&gt;
&lt;p&gt;### Details&lt;/p&gt;
&lt;p&gt;When a user creates a new package, a subdirectory is created within the /downloads folder to store files. This new directory name is derived from the package name, except a filter is applied to make sure it can&amp;#39;t traverse directories and stays within /downloads.&lt;/p&gt;
&lt;p&gt;src/pyload/core/api/__init__.py::add_package::L432&lt;/p&gt;
&lt;p&gt;```python
  folder = (
      folder.replace(&amp;#34;http://&amp;#34;, &amp;#34;&amp;#34;)
      .replace(&amp;#34;https://&amp;#34;, &amp;#34;&amp;#34;)
      .replace(&amp;#34;:&amp;#34;, &amp;#34;&amp;#34;)
      .replace(&amp;#34;/&amp;#34;, &amp;#34;_&amp;#34;)
      .replace(&amp;#34;\\&amp;#34;, &amp;#34;_&amp;#34;)
  )
```&lt;/p&gt;
&lt;p&gt;So if a package were created with the name ```&amp;#34;../&amp;#34;``` the application would instead create the folder ```&amp;#34;/downloads/.._/&amp;#34;```&lt;/p&gt;
&lt;p&gt;However, when editing packages there is no prevention in place and a user can just pick any arbitrary directory in the filesystem.&lt;/p&gt;
&lt;p&gt;src/pyload/webui/app/blueprints/json_blueprint.py::edit_package::L195&lt;/p&gt;
&lt;p&gt;```python
  id = int(flask.request.form[&amp;#34;pack_id&amp;#34;])
  data = {
      &amp;#34;name&amp;#34;: flask.request.form[&amp;#34;pack_name&amp;#34;],
      &amp;#34;_folder&amp;#34;: flask.request.form[&amp;#34;pack_folder&amp;#34;],
      &amp;#34;password&amp;#34;: flask.request.form[&amp;#34;pack_pws&amp;#34;],
  }&lt;/p&gt;
&lt;p&gt;api.set_package_data(id, data)
```&lt;/p&gt;
&lt;p&gt;### Steps to reproduce&lt;/p&gt;
&lt;p&gt;1. Login to a pyLoad instance
2. Go to &amp;#34;Queue&amp;#34; and create a new package with any name and a valid link
3. Click &amp;#34;Edit Package&amp;#34; on the newly created package and set the folder as &amp;#34;/config/scripts/download_finished/&amp;#34;
4. Restart the package 
5. Check the server filesy…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/pysec-2026-1819</guid>
    </item>
  </channel>
</rss>
