<?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>Mon, 05 Oct 2026 16:55:46 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-364159</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-364159</link>
      <description>EUVD-2026-364159</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-364159</guid>
    </item>
    <item>
      <title>fkie_cve-2026-75602</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-75602</link>
      <description>&lt;p&gt;OpenList a file list program that supports multiple storage. Prior to 4.2.3, OpenList&amp;#39;s offline-download feature at POST /api/fs/add_offline_download with tool: &amp;#34;SimpleHttp&amp;#34; accepts an attacker-supplied URL and saves its bytes under a per-task temporary directory before transferring them to the user&amp;#39;s destination storage. The temporary filename comes from the attacker-controlled Content-Disposition header, is passed from parseFilenameFromContentDisposition in internal/offline_download/http/util.go to filepath.Join(task.TempDir, filename) in SimpleHttp.Run in internal/offline_download/http/client.go, and is opened with os.Create without a containment check. Because filepath.Join cleans .. segments, a non-admin user with PermAddOfflineDownload on any path can traverse out of task.TempDir and create, truncate, or overwrite any file writable by the OpenList process whose parent directory already exists. The server/handles/offline_download.go AddOfflineDownload route uses normal user authentication rather than AuthAdmin, and local-storage destinations fall through tryPutUrl in internal/offline_download/tool/add.go to the vulnerable SimpleHttp.Run path. This issue is fixed in version 4.2.3.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;OpenList a file list program that supports multiple storage. Prior to 4.2.3, OpenList&amp;#39;s offline-download feature at POST /api/fs/add_offline_download with tool: &amp;#34;SimpleHttp&amp;#34; accepts an attacker-supplied URL and saves its bytes under a per-task temporary directory before transferring them to the user&amp;#39;s destination storage. The temporary filename comes from the attacker-controlled Content-Disposition header, is passed from parseFilenameFromContentDisposition in internal/offline_download/http/util.go to filepath.Join(task.TempDir, filename) in SimpleHttp.Run in internal/offline_download/http/client.go, and is opened with os.Create without a containment check. Because filepath.Join cleans .. segments, a non-admin user with PermAddOfflineDownload on any path can traverse out of task.TempDir and create, truncate, or overwrite any file writable by the OpenList process whose parent directory already exists. The server/handles/offline_download.go AddOfflineDownload route uses normal user authentication rather than AuthAdmin, and local-storage destinations fall through tryPutUrl in internal/offline_download/tool/add.go to the vulnerable SimpleHttp.Run path. This issue is fixed in version 4.2.3.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-75602</guid>
    </item>
    <item>
      <title>GHSA-h6cj-26g5-67fv — OpenList: Authenticated arbitrary file write via Content-Disposition path traversal in SimpleHttp offline-download tool</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-h6cj-26g5-67fv</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/OpenListTeam/OpenList&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;Alist&amp;#39;s offline-download feature (`POST /api/fs/add_offline_download` with `tool: &amp;#34;SimpleHttp&amp;#34;`) accepts an attacker-supplied URL, fetches it, and saves the bytes under a per-task temp directory before transferring to the user&amp;#39;s destination storage. The temp filename is taken from the response&amp;#39;s `Content-Disposition` header (attacker-controlled when the URL points to an attacker HTTP server), passed verbatim to `filepath.Join(tempDir, filename)`, and written via `os.Create` with no containment check. Go&amp;#39;s `filepath.Join` calls `Clean` on the result, which collapses `..` segments and lets the attacker traverse out of `tempDir` to write any file the alist process can write.&lt;/p&gt;
&lt;p&gt;A non-admin user with `PermAddOfflineDownload` permission on any path is sufficient.&lt;/p&gt;
&lt;p&gt;### Affected code&lt;/p&gt;
&lt;p&gt;`internal/offline_download/http/util.go` — filename returned verbatim from header:&lt;/p&gt;
&lt;p&gt;```go
func parseFilenameFromContentDisposition(contentDisposition string) (string, error) {
    if contentDisposition == &amp;#34;&amp;#34; {
        return &amp;#34;&amp;#34;, fmt.Errorf(&amp;#34;Content-Disposition is empty&amp;#34;)
    }
    _, params, err := mime.ParseMediaType(contentDisposition)
    if err != nil {
        return &amp;#34;&amp;#34;, err
    }
    filename := params[&amp;#34;filename&amp;#34;]
    if filename == &amp;#34;&amp;#34; {
        return &amp;#34;&amp;#34;, fmt.Errorf(&amp;#34;filename not found in Content-Disposition: [%s]&amp;#34;, contentDisposition)
    }
    return filename, nil   // ← no traversal stripping
}
```&lt;/p&gt;
&lt;p&gt;`internal/offline_download/http/client.go` (`SimpleHttp.Run`):&lt;/p&gt;
&lt;p&gt;```go
filename :=…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Go: github.com/OpenListTeam/OpenList&lt;/p&gt;
&lt;p&gt;### Summary&lt;/p&gt;
&lt;p&gt;Alist&amp;#39;s offline-download feature (`POST /api/fs/add_offline_download` with `tool: &amp;#34;SimpleHttp&amp;#34;`) accepts an attacker-supplied URL, fetches it, and saves the bytes under a per-task temp directory before transferring to the user&amp;#39;s destination storage. The temp filename is taken from the response&amp;#39;s `Content-Disposition` header (attacker-controlled when the URL points to an attacker HTTP server), passed verbatim to `filepath.Join(tempDir, filename)`, and written via `os.Create` with no containment check. Go&amp;#39;s `filepath.Join` calls `Clean` on the result, which collapses `..` segments and lets the attacker traverse out of `tempDir` to write any file the alist process can write.&lt;/p&gt;
&lt;p&gt;A non-admin user with `PermAddOfflineDownload` permission on any path is sufficient.&lt;/p&gt;
&lt;p&gt;### Affected code&lt;/p&gt;
&lt;p&gt;`internal/offline_download/http/util.go` — filename returned verbatim from header:&lt;/p&gt;
&lt;p&gt;```go
func parseFilenameFromContentDisposition(contentDisposition string) (string, error) {
    if contentDisposition == &amp;#34;&amp;#34; {
        return &amp;#34;&amp;#34;, fmt.Errorf(&amp;#34;Content-Disposition is empty&amp;#34;)
    }
    _, params, err := mime.ParseMediaType(contentDisposition)
    if err != nil {
        return &amp;#34;&amp;#34;, err
    }
    filename := params[&amp;#34;filename&amp;#34;]
    if filename == &amp;#34;&amp;#34; {
        return &amp;#34;&amp;#34;, fmt.Errorf(&amp;#34;filename not found in Content-Disposition: [%s]&amp;#34;, contentDisposition)
    }
    return filename, nil   // ← no traversal stripping
}
```&lt;/p&gt;
&lt;p&gt;`internal/offline_download/http/client.go` (`SimpleHttp.Run`):&lt;/p&gt;
&lt;p&gt;```go
filename :=…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-h6cj-26g5-67fv</guid>
    </item>
  </channel>
</rss>
