<?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://vulnerability.circl.lu</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, 29 Sep 2026 15:27:47 +0000</lastBuildDate>
    <item>
      <title>fkie_cve-2026-63642</title>
      <link>https://vulnerability.circl.lu/vuln/fkie_cve-2026-63642</link>
      <description>&lt;p&gt;MagicMirror² is an open source modular smart mirror platform. Prior to 2.37.0, checkArticleUrl in defaultmodules/newsfeed/node_helper.js accepts the CHECK_ARTICLE_URL notification through the unauthenticated Socket.IO namespace /newsfeed and performs fetch(url, { method: &amp;#34;HEAD&amp;#34; }) without validating the attacker-controlled URL. The helper returns ARTICLE_URL_STATUS containing the URL and framing result, providing a response and timing oracle that can identify internal hosts and ports and trigger side effects on services that react to HEAD requests. This issue is fixed in version 2.37.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;MagicMirror² is an open source modular smart mirror platform. Prior to 2.37.0, checkArticleUrl in defaultmodules/newsfeed/node_helper.js accepts the CHECK_ARTICLE_URL notification through the unauthenticated Socket.IO namespace /newsfeed and performs fetch(url, { method: &amp;#34;HEAD&amp;#34; }) without validating the attacker-controlled URL. The helper returns ARTICLE_URL_STATUS containing the URL and framing result, providing a response and timing oracle that can identify internal hosts and ports and trigger side effects on services that react to HEAD requests. This issue is fixed in version 2.37.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/fkie_cve-2026-63642</guid>
    </item>
    <item>
      <title>GHSA-998g-7v5w-cr7g — MagicMirror newsfeed Socket.IO notification allows blind server-side request forgery</title>
      <link>https://vulnerability.circl.lu/vuln/ghsa-998g-7v5w-cr7g</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: magicmirror&lt;/p&gt;
&lt;p&gt;# Vulnerability — Blind SSRF via `CHECK_ARTICLE_URL` (MagicMirror² newsfeed)&lt;/p&gt;
&lt;p&gt;&amp;gt; Analysis of the PoC `exploit-ssrf-newsfeed.js`.
&amp;gt; Target: `newsfeed/node_helper.js` of MagicMirror², socket.io namespace `/newsfeed`.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Identification&lt;/p&gt;
&lt;p&gt;| Field | Value |
|-------|-------|
| **PoC file** | `exploit-ssrf-newsfeed.js` |
| **Endpoint** | socket.io namespace `/newsfeed`, notification `CHECK_ARTICLE_URL` |
| **Precondition** | reach the mirror&amp;#39;s HTTP port (no authentication required) |&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Description&lt;/p&gt;
&lt;p&gt;The `checkArticleUrl()` function in `newsfeed/node_helper.js` runs `fetch(url, { method: &amp;#34;HEAD&amp;#34; })` with **zero validation** of the URL and returns `ARTICLE_URL_STATUS { url, canFrame }`.&lt;/p&gt;
&lt;p&gt;This gives the attacker a **boolean + timing oracle** to map internal hosts and ports: presence, absence, and response time reveal which internal services are alive. It is a &amp;#34;blind-ish&amp;#34; SSRF — the attacker doesn&amp;#39;t see the body, but forces the server-side request and observes the effect on the target.&lt;/p&gt;
&lt;p&gt;The actual proof is observed **on the target side** (the server-side HEAD shows up in the internal service&amp;#39;s log), since the `canFrame` field alone leaks little.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Root cause: unauthenticated socket.io channel + permissive CORS&lt;/p&gt;
&lt;p&gt;The socket.io server accepts connections from **any origin** and with **no authentication**:&lt;/p&gt;
&lt;p&gt;```js
const io = new Server(server, {
  cors: { origin: /.*$/, credentials: true }
});
```&lt;/p&gt;
&lt;p&gt;The `/newsfeed` namespace registers the handler without checking who is conn…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; npm: magicmirror&lt;/p&gt;
&lt;p&gt;# Vulnerability — Blind SSRF via `CHECK_ARTICLE_URL` (MagicMirror² newsfeed)&lt;/p&gt;
&lt;p&gt;&amp;gt; Analysis of the PoC `exploit-ssrf-newsfeed.js`.
&amp;gt; Target: `newsfeed/node_helper.js` of MagicMirror², socket.io namespace `/newsfeed`.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Identification&lt;/p&gt;
&lt;p&gt;| Field | Value |
|-------|-------|
| **PoC file** | `exploit-ssrf-newsfeed.js` |
| **Endpoint** | socket.io namespace `/newsfeed`, notification `CHECK_ARTICLE_URL` |
| **Precondition** | reach the mirror&amp;#39;s HTTP port (no authentication required) |&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Description&lt;/p&gt;
&lt;p&gt;The `checkArticleUrl()` function in `newsfeed/node_helper.js` runs `fetch(url, { method: &amp;#34;HEAD&amp;#34; })` with **zero validation** of the URL and returns `ARTICLE_URL_STATUS { url, canFrame }`.&lt;/p&gt;
&lt;p&gt;This gives the attacker a **boolean + timing oracle** to map internal hosts and ports: presence, absence, and response time reveal which internal services are alive. It is a &amp;#34;blind-ish&amp;#34; SSRF — the attacker doesn&amp;#39;t see the body, but forces the server-side request and observes the effect on the target.&lt;/p&gt;
&lt;p&gt;The actual proof is observed **on the target side** (the server-side HEAD shows up in the internal service&amp;#39;s log), since the `canFrame` field alone leaks little.&lt;/p&gt;
&lt;p&gt;---&lt;/p&gt;
&lt;p&gt;## Root cause: unauthenticated socket.io channel + permissive CORS&lt;/p&gt;
&lt;p&gt;The socket.io server accepts connections from **any origin** and with **no authentication**:&lt;/p&gt;
&lt;p&gt;```js
const io = new Server(server, {
  cors: { origin: /.*$/, credentials: true }
});
```&lt;/p&gt;
&lt;p&gt;The `/newsfeed` namespace registers the handler without checking who is conn…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://vulnerability.circl.lu/vuln/ghsa-998g-7v5w-cr7g</guid>
    </item>
  </channel>
</rss>
