<?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://db.gcve.eu</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>Fri, 02 Oct 2026 16:31:28 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-48053</title>
      <link>https://db.gcve.eu/vuln/fkie_cve-2026-48053</link>
      <description>&lt;p&gt;Kolibri is an offline-first education platform. Prior to version 0.19.4, several Kolibri API endpoints accept an unvalidated `baseurl` parameter and fetch attacker-controlled URLs from the Kolibri server, reflecting the response body back to the caller. The original report identified two endpoints on the `RemoteFacilityUser*` viewsets; remediation review found two further reflection points on the same pattern. The GET endpoint was unauthenticated. Version 0.19.4 fixes the vulnerability.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Kolibri is an offline-first education platform. Prior to version 0.19.4, several Kolibri API endpoints accept an unvalidated `baseurl` parameter and fetch attacker-controlled URLs from the Kolibri server, reflecting the response body back to the caller. The original report identified two endpoints on the `RemoteFacilityUser*` viewsets; remediation review found two further reflection points on the same pattern. The GET endpoint was unauthenticated. Version 0.19.4 fixes the vulnerability.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/fkie_cve-2026-48053</guid>
    </item>
    <item>
      <title>GHSA-4mj9-pf4r-cqrc — Kolibri has Unauthenticated Server-Side Request Forgery (SSRF) in RemoteFacilityUserViewset</title>
      <link>https://db.gcve.eu/vuln/ghsa-4mj9-pf4r-cqrc</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: kolibri&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;Several Kolibri API endpoints accept an unvalidated `baseurl` parameter and fetch attacker-controlled URLs from the Kolibri server, reflecting the response body back to the caller. The original report identified two endpoints on the `RemoteFacilityUser*` viewsets; remediation review found two further reflection points on the same pattern. The GET endpoint was unauthenticated.&lt;/p&gt;
&lt;p&gt;## Affected endpoints&lt;/p&gt;
&lt;p&gt;Reported:&lt;/p&gt;
&lt;p&gt;- `GET /api/auth/remotefacilityuser` → `RemoteFacilityUserViewset` (`kolibri/core/auth/api.py:1570`). No authentication required.
- `POST /api/auth/remotefacilityauthenticateduserinfo` → `RemoteFacilityUserAuthenticatedViewset` (`kolibri/core/auth/api.py:1594`). Authentication is checked against the *remote* server rather than the local Kolibri.&lt;/p&gt;
&lt;p&gt;Found during remediation:&lt;/p&gt;
&lt;p&gt;- `POST /api/public/setupwizard/loddata` → setup wizard&amp;#39;s remote-signup proxy (`kolibri/plugins/setup_wizard/api.py`). Reachable on unprovisioned devices.
- `GET /api/public/networklocation/&amp;lt;id&amp;gt;/facilities/` → `NetworkLocationFacilitiesView` (`kolibri/core/discovery/api.py`). Authenticated but with the same `Response(remote_payload)` pattern.&lt;/p&gt;
&lt;p&gt;## Root cause&lt;/p&gt;
&lt;p&gt;Two compounding issues:&lt;/p&gt;
&lt;p&gt;1. **Response reflection** — these endpoints returned the remote server&amp;#39;s JSON body more or less verbatim to the caller (`Response(response.json())`, `Response(facility_info[&amp;#34;users&amp;#34;])`, etc.).
2. **No restriction on the remote target** — `baseurl` was validated only by `URLValidator(schemes=[&amp;#34;http&amp;#34;, &amp;#34;https&amp;#34;])`…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: kolibri&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;Several Kolibri API endpoints accept an unvalidated `baseurl` parameter and fetch attacker-controlled URLs from the Kolibri server, reflecting the response body back to the caller. The original report identified two endpoints on the `RemoteFacilityUser*` viewsets; remediation review found two further reflection points on the same pattern. The GET endpoint was unauthenticated.&lt;/p&gt;
&lt;p&gt;## Affected endpoints&lt;/p&gt;
&lt;p&gt;Reported:&lt;/p&gt;
&lt;p&gt;- `GET /api/auth/remotefacilityuser` → `RemoteFacilityUserViewset` (`kolibri/core/auth/api.py:1570`). No authentication required.
- `POST /api/auth/remotefacilityauthenticateduserinfo` → `RemoteFacilityUserAuthenticatedViewset` (`kolibri/core/auth/api.py:1594`). Authentication is checked against the *remote* server rather than the local Kolibri.&lt;/p&gt;
&lt;p&gt;Found during remediation:&lt;/p&gt;
&lt;p&gt;- `POST /api/public/setupwizard/loddata` → setup wizard&amp;#39;s remote-signup proxy (`kolibri/plugins/setup_wizard/api.py`). Reachable on unprovisioned devices.
- `GET /api/public/networklocation/&amp;lt;id&amp;gt;/facilities/` → `NetworkLocationFacilitiesView` (`kolibri/core/discovery/api.py`). Authenticated but with the same `Response(remote_payload)` pattern.&lt;/p&gt;
&lt;p&gt;## Root cause&lt;/p&gt;
&lt;p&gt;Two compounding issues:&lt;/p&gt;
&lt;p&gt;1. **Response reflection** — these endpoints returned the remote server&amp;#39;s JSON body more or less verbatim to the caller (`Response(response.json())`, `Response(facility_info[&amp;#34;users&amp;#34;])`, etc.).
2. **No restriction on the remote target** — `baseurl` was validated only by `URLValidator(schemes=[&amp;#34;http&amp;#34;, &amp;#34;https&amp;#34;])`…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/ghsa-4mj9-pf4r-cqrc</guid>
    </item>
    <item>
      <title>PYSEC-2026-2554 — Kolibri has Unauthenticated Server-Side Request Forgery (SSRF) in RemoteFacilityUserViewset</title>
      <link>https://db.gcve.eu/vuln/pysec-2026-2554</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: kolibri&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;Several Kolibri API endpoints accept an unvalidated `baseurl` parameter and fetch attacker-controlled URLs from the Kolibri server, reflecting the response body back to the caller. The original report identified two endpoints on the `RemoteFacilityUser*` viewsets; remediation review found two further reflection points on the same pattern. The GET endpoint was unauthenticated.&lt;/p&gt;
&lt;p&gt;## Affected endpoints&lt;/p&gt;
&lt;p&gt;Reported:&lt;/p&gt;
&lt;p&gt;- `GET /api/auth/remotefacilityuser` → `RemoteFacilityUserViewset` (`kolibri/core/auth/api.py:1570`). No authentication required.
- `POST /api/auth/remotefacilityauthenticateduserinfo` → `RemoteFacilityUserAuthenticatedViewset` (`kolibri/core/auth/api.py:1594`). Authentication is checked against the *remote* server rather than the local Kolibri.&lt;/p&gt;
&lt;p&gt;Found during remediation:&lt;/p&gt;
&lt;p&gt;- `POST /api/public/setupwizard/loddata` → setup wizard&amp;#39;s remote-signup proxy (`kolibri/plugins/setup_wizard/api.py`). Reachable on unprovisioned devices.
- `GET /api/public/networklocation/&amp;lt;id&amp;gt;/facilities/` → `NetworkLocationFacilitiesView` (`kolibri/core/discovery/api.py`). Authenticated but with the same `Response(remote_payload)` pattern.&lt;/p&gt;
&lt;p&gt;## Root cause&lt;/p&gt;
&lt;p&gt;Two compounding issues:&lt;/p&gt;
&lt;p&gt;1. **Response reflection** — these endpoints returned the remote server&amp;#39;s JSON body more or less verbatim to the caller (`Response(response.json())`, `Response(facility_info[&amp;#34;users&amp;#34;])`, etc.).
2. **No restriction on the remote target** — `baseurl` was validated only by `URLValidator(schemes=[&amp;#34;http&amp;#34;, &amp;#34;https&amp;#34;])`…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; PyPI: kolibri&lt;/p&gt;
&lt;p&gt;## Summary&lt;/p&gt;
&lt;p&gt;Several Kolibri API endpoints accept an unvalidated `baseurl` parameter and fetch attacker-controlled URLs from the Kolibri server, reflecting the response body back to the caller. The original report identified two endpoints on the `RemoteFacilityUser*` viewsets; remediation review found two further reflection points on the same pattern. The GET endpoint was unauthenticated.&lt;/p&gt;
&lt;p&gt;## Affected endpoints&lt;/p&gt;
&lt;p&gt;Reported:&lt;/p&gt;
&lt;p&gt;- `GET /api/auth/remotefacilityuser` → `RemoteFacilityUserViewset` (`kolibri/core/auth/api.py:1570`). No authentication required.
- `POST /api/auth/remotefacilityauthenticateduserinfo` → `RemoteFacilityUserAuthenticatedViewset` (`kolibri/core/auth/api.py:1594`). Authentication is checked against the *remote* server rather than the local Kolibri.&lt;/p&gt;
&lt;p&gt;Found during remediation:&lt;/p&gt;
&lt;p&gt;- `POST /api/public/setupwizard/loddata` → setup wizard&amp;#39;s remote-signup proxy (`kolibri/plugins/setup_wizard/api.py`). Reachable on unprovisioned devices.
- `GET /api/public/networklocation/&amp;lt;id&amp;gt;/facilities/` → `NetworkLocationFacilitiesView` (`kolibri/core/discovery/api.py`). Authenticated but with the same `Response(remote_payload)` pattern.&lt;/p&gt;
&lt;p&gt;## Root cause&lt;/p&gt;
&lt;p&gt;Two compounding issues:&lt;/p&gt;
&lt;p&gt;1. **Response reflection** — these endpoints returned the remote server&amp;#39;s JSON body more or less verbatim to the caller (`Response(response.json())`, `Response(facility_info[&amp;#34;users&amp;#34;])`, etc.).
2. **No restriction on the remote target** — `baseurl` was validated only by `URLValidator(schemes=[&amp;#34;http&amp;#34;, &amp;#34;https&amp;#34;])`…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://db.gcve.eu/vuln/pysec-2026-2554</guid>
    </item>
  </channel>
</rss>
