Curated security research, vulnerabilities, advisories and tools for practitioners.

[Pt-Br] Por Trás do Espelho: Investigando Vulnerabilidades no MagicMirror² (CVE-2026-63642, CVE-2026-63643)

Summary

# [Pt-Br] Por Trás do Espelho: Investigando Vulnerabilidades no MagicMirror² (CVE-2026-63642, CVE-2026-63643) RESEARCHER **Gabriel Alves** READ TIME**6 MINUTES** PUBLISHED**01 Oct 2026**...
CVE
CVE-2026-63642
Published
Collected

📦 Full-Text Content Snapshot

R2 Archive · Full Article Preserved119 lines · 6.3 KB
📄 Raw .md⬇️ Download .md

Researcher: Gabriel Alves · Published: October 1, 2026 · Source: yokai.hakaisecurity.io

MagicMirror Research Banner
MagicMirror Research Banner

During source code analysis of MagicMirror², an open-source platform used to transform semi-transparent mirrors into smart displays, the Yokai team at Hakai Security identified two Server-Side Request Forgery (SSRF) vulnerabilities: CVE-2026-63642 and CVE-2026-63643.

These flaws reside in different modules and allow externally controlled HTTP requests to be processed by the server:

  • CVE-2026-63642 affects the newsfeed module, allowing server-side HEAD requests via article URL verification (Blind SSRF).
  • CVE-2026-63643 affects the calendar module, allowing full SSRF where responses can be retrieved.

What is MagicMirror²?

MagicMirror² is an open-source modular smart mirror platform that runs on Raspberry Pi and other systems to display time, weather, news headlines, and calendars.

Reference: MagicMirror²

MagicMirror Display
MagicMirror Display

Vulnerability Details

1. Blind SSRF in newsfeed (CVE-2026-63642)

The checkArticleUrl() function in defaultmodules/newsfeed/node_helper.js performs an HTTP HEAD request to a user-provided URL without adequate destination validation:

javascript
// defaultmodules/newsfeed/node_helper.js
checkArticleUrl: function (url) {
    // sends HEAD request to arbitrary url without restriction
}

Because the request uses HEAD, the response body is not returned to the client, constituting a Blind SSRF. Differences in response status and processing times can be leveraged to map internal networks and identify available internal services.

2. Full SSRF in calendar (CVE-2026-63643)

The ADD_CALENDAR Socket.IO handler in modules/calendar/node_helper.js forwards incoming payloads directly to the calendar fetcher component without validation or destination restriction.

Unlike the project's /cors endpoint (which contains destination validation controls), the ADD_CALENDAR handler lacks equivalent protection, allowing an attacker to coerce the server into fetching arbitrary internal resources and observing the returned contents through the calendar module workflow.

Exploitation

Exploiting Blind SSRF (CVE-2026-63642)

The PoC connects to the /newsfeed namespace over Socket.IO and emits the CHECK_ARTICLE_URL event with an attacker-controlled target URL. MagicMirror² processes the event and issues the HTTP HEAD request from the server.

Public Exploit: Hakai Security CVE-2026-63642 Repository

Exploiting CVE-2026-63642
Exploiting CVE-2026-63642

Exploiting SSRF (CVE-2026-63643)

The PoC connects to the /calendar namespace over Socket.IO and sends the ADD_CALENDAR event containing the target internal URL. The server issues the request and returns the fetched content, enabling access to internal endpoints and cloud metadata services.

Exploiting CVE-2026-63643
Exploiting CVE-2026-63643

Responsible Disclosure

Both vulnerabilities were identified by Gabriel Alves (Yokai Research / Hakai Security) and reported via GitHub Security Advisories:

  • CVE-2026-63642: Blind SSRF in newsfeed module (Affects version 2.36.0, fixed in 2.37.0+)
  • CVE-2026-63643: Full SSRF in calendar module (Affects version 2.36.0, fixed in 2.37.0+)

Implemented Fixes

The vulnerabilities were resolved in commit 58c2a5e and released in v2.37.0.

The fix implements an access control mechanism for Socket.IO connections, enforcing the server's ipWhitelist configuration on WebSocket connections.

In js/ip_access_control.js, socketIpAccessControl() verifies the client IP during the Socket.IO handshake:

javascript
function socketIpAccessControl(whitelist) {
    return (req, callback) => {
        // enforce whitelist on socket.io requests
    };
}

In js/server.js:

javascript
allowRequest: socketIpAccessControl(config.ipWhitelist),

This prevents unauthorized remote clients from connecting to the Socket.IO namespaces used by newsfeed and calendar.

Modified files:

Mitigation

  1. Upgrade: Update MagicMirror² to version 2.37.0 or later.
  2. Access Control: Restrict MagicMirror² network interfaces to trusted local networks. Do not expose the application directly to the public internet.
  3. Whitelist Configuration: Review ipWhitelist in config/config.js to ensure only legitimate local clients are permitted.

📦 Full-Text Markdown Snapshot archived by Phying News · Original source: yokai.hakaisecurity.io