<?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 04:05:59 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-268854</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-268854</link>
      <description>EUVD-2026-268854</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-268854</guid>
    </item>
    <item>
      <title>fkie_cve-2026-25527</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-25527</link>
      <description>&lt;p&gt;changedetection.io is a free open source web page change detection tool. In versions prior to 0.53.2, the `/static/&amp;lt;group&amp;gt;/&amp;lt;filename&amp;gt;` route accepts `group=&amp;#34;..&amp;#34;`, which causes `send_from_directory(&amp;#34;static/..&amp;#34;, filename)` to execute. This moves the base directory up to `/app/changedetectionio`, enabling unauthenticated local file read of application source files (e.g., `flask_app.py`). Version 0.53.2 fixes the issue.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;changedetection.io is a free open source web page change detection tool. In versions prior to 0.53.2, the `/static/&amp;lt;group&amp;gt;/&amp;lt;filename&amp;gt;` route accepts `group=&amp;#34;..&amp;#34;`, which causes `send_from_directory(&amp;#34;static/..&amp;#34;, filename)` to execute. This moves the base directory up to `/app/changedetectionio`, enabling unauthenticated local file read of application source files (e.g., `flask_app.py`). Version 0.53.2 fixes the issue.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-25527</guid>
    </item>
    <item>
      <title>GHSA-9jj8-v89v-xjvw — changedetection.io is vulnerable to unauthenticated static path traversal</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-9jj8-v89v-xjvw</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: changedetection.io&lt;/p&gt;
&lt;p&gt;## Summary
The `/static/&amp;lt;group&amp;gt;/&amp;lt;filename&amp;gt;` route accepts `group=&amp;#34;..&amp;#34;`, which causes `send_from_directory(&amp;#34;static/..&amp;#34;, filename)` to execute. This moves the base directory up to `/app/changedetectionio`, enabling **unauthenticated local file read** of application source files (e.g., `flask_app.py`). Severity is **low information disclosure (C:L)**.&lt;/p&gt;
&lt;p&gt;### Details
The vulnerable code is in `changedetectionio/flask_app.py` inside `static_content()`:&lt;/p&gt;
&lt;p&gt;```
group = re.sub(r&amp;#39;[^\w.-]+&amp;#39;, &amp;#39;&amp;#39;, group.lower())
filename = re.sub(r&amp;#39;[^\w.-]+&amp;#39;, &amp;#39;&amp;#39;, filename.lower())
...
return send_from_directory(f&amp;#34;static/{group}&amp;#34;, path=filename)
```&lt;/p&gt;
&lt;p&gt;The `group` sanitization allows dots, so `group=&amp;#34;..&amp;#34;` passes validation.  
This results in `send_from_directory(&amp;#34;static/..&amp;#34;, filename)`, effectively shifting the base directory to `/app/changedetectionio` and allowing reads of files in that directory.  
The route is unauthenticated, so **any user can retrieve source files** without logging in.&lt;/p&gt;
&lt;p&gt;&amp;gt; Limitation: the route only matches `/static/&amp;lt;group&amp;gt;/&amp;lt;filename&amp;gt;` and rejects slashes inside `filename`, so it cannot traverse further to arbitrary system paths like `/etc/passwd`. It is limited to files inside the application package directory.&lt;/p&gt;
&lt;p&gt;### PoC
1) Start an instance (example: Docker on port 5050)
```
docker run -d --name cdio -p 127.0.0.1:5050:5000 -v cdio-data:/datastore cdio-local
```&lt;/p&gt;
&lt;p&gt;2) Reproduce  
**(URL-encoded traversal)**
```
curl -i http://127.0.0.1:5050/static/%2e%2e/flask_app.py
```&lt;/p&gt;
&lt;p&gt;**(curl path passt…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: changedetection.io&lt;/p&gt;
&lt;p&gt;## Summary
The `/static/&amp;lt;group&amp;gt;/&amp;lt;filename&amp;gt;` route accepts `group=&amp;#34;..&amp;#34;`, which causes `send_from_directory(&amp;#34;static/..&amp;#34;, filename)` to execute. This moves the base directory up to `/app/changedetectionio`, enabling **unauthenticated local file read** of application source files (e.g., `flask_app.py`). Severity is **low information disclosure (C:L)**.&lt;/p&gt;
&lt;p&gt;### Details
The vulnerable code is in `changedetectionio/flask_app.py` inside `static_content()`:&lt;/p&gt;
&lt;p&gt;```
group = re.sub(r&amp;#39;[^\w.-]+&amp;#39;, &amp;#39;&amp;#39;, group.lower())
filename = re.sub(r&amp;#39;[^\w.-]+&amp;#39;, &amp;#39;&amp;#39;, filename.lower())
...
return send_from_directory(f&amp;#34;static/{group}&amp;#34;, path=filename)
```&lt;/p&gt;
&lt;p&gt;The `group` sanitization allows dots, so `group=&amp;#34;..&amp;#34;` passes validation.  
This results in `send_from_directory(&amp;#34;static/..&amp;#34;, filename)`, effectively shifting the base directory to `/app/changedetectionio` and allowing reads of files in that directory.  
The route is unauthenticated, so **any user can retrieve source files** without logging in.&lt;/p&gt;
&lt;p&gt;&amp;gt; Limitation: the route only matches `/static/&amp;lt;group&amp;gt;/&amp;lt;filename&amp;gt;` and rejects slashes inside `filename`, so it cannot traverse further to arbitrary system paths like `/etc/passwd`. It is limited to files inside the application package directory.&lt;/p&gt;
&lt;p&gt;### PoC
1) Start an instance (example: Docker on port 5050)
```
docker run -d --name cdio -p 127.0.0.1:5050:5000 -v cdio-data:/datastore cdio-local
```&lt;/p&gt;
&lt;p&gt;2) Reproduce  
**(URL-encoded traversal)**
```
curl -i http://127.0.0.1:5050/static/%2e%2e/flask_app.py
```&lt;/p&gt;
&lt;p&gt;**(curl path passt…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-9jj8-v89v-xjvw</guid>
    </item>
    <item>
      <title>PYSEC-2026-2124</title>
      <link>https://cve.radiocsirt.org/vuln/pysec-2026-2124</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: changedetection-io&lt;/p&gt;
&lt;p&gt;changedetection.io is a free open source web page change detection tool. In versions prior to 0.53.2, the `/static/&amp;lt;group&amp;gt;/&amp;lt;filename&amp;gt;` route accepts `group=&amp;#34;..&amp;#34;`, which causes `send_from_directory(&amp;#34;static/..&amp;#34;, filename)` to execute. This moves the base directory up to `/app/changedetectionio`, enabling unauthenticated local file read of application source files (e.g., `flask_app.py`). Version 0.53.2 fixes the issue.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: changedetection-io&lt;/p&gt;
&lt;p&gt;changedetection.io is a free open source web page change detection tool. In versions prior to 0.53.2, the `/static/&amp;lt;group&amp;gt;/&amp;lt;filename&amp;gt;` route accepts `group=&amp;#34;..&amp;#34;`, which causes `send_from_directory(&amp;#34;static/..&amp;#34;, filename)` to execute. This moves the base directory up to `/app/changedetectionio`, enabling unauthenticated local file read of application source files (e.g., `flask_app.py`). Version 0.53.2 fixes the issue.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/pysec-2026-2124</guid>
    </item>
  </channel>
</rss>
