highVulnerability

GHSA-7rx4-c5vx-g8w3

## Summary The `metascraper-logo-favicon` plugin makes HTTP requests to URLs extracted from attacker-controlled HTML without going through the application's `validateUrl()` SSRF protections. This allows any authenticated user to make the server fetch arbitrary internal URLs by bookmarking a page containing a crafted `<link rel="icon">` tag. ## Details ### Protected path (correct) Karakeep implements comprehensive SSRF protections in `apps/workers/network.ts` (lines 12-222). The `validateUrl()` function blocks loopback, private, link-local, carrier-grade NAT, and reserved IP ranges. It resolves DNS before the fetch and checks all resolved IPs against the blacklist. This function is correctly used by `fetchWithProxy()` for the main bookmark URL fetch, image downloads, RSS feeds, and webhooks. ### Unprotected path (vulnerability) After fetching the page HTML (with SSRF protection), the content is passed to a parse subprocess (`apps/workers/scripts/parseHtmlSubprocess.ts`). Inside this subprocess, `metascraper-logo-favicon` (v5.49.5) extracts favicon URLs from the HTML DOM by matching `<link rel="icon">` elements and reading their `href` attribute. The plugin then calls `reachable-url` (which wraps `got`) to verify each extracted URL. These HTTP requests bypass `validateUrl()` entirely: ```typescript // apps/workers/scripts/parseHtmlSubprocess.ts, lines 62-73 metascraperLogo({ gotOpts: { agent: { http: serverConfig.proxy.httpProxy ? new HttpProxyAgent(getRandomProxy(serverConfig.proxy.httpProxy)) : undefined, https: serverConfig.proxy.httpsProxy ? new HttpsProxyAgent(getRandomProxy(serverConfig.proxy.httpsProxy)) : undefined, }, }, }), ``` Only proxy agent configuration is provided. No URL validation hooks, no IP blacklist, no DNS resolution checks. The `got` HTTP client makes direct requests to whatever URLs are extracted from the HTML. ### Data flow ``` 1. User creates bookmark →

Properties

ghsa_id
GHSA-7rx4-c5vx-g8w3
summary
Karakeep SDK has SSRF via metascraper-logo-favicon that bypasses validateUrl protections
severity
high
cve_id
GHSA-7rx4-c5vx-g8w3
is_ghsa_only
true
ghsa_published
2026-05-14T18:26:02Z
source_url
https://github.com/advisories/GHSA-7rx4-c5vx-g8w3
ghsa_updated
2026-05-14T18:26:04Z

Related Entities (4)

HAS_WEAKNESS (1)

[Weakness]Server-Side Request Forgery (SSRF)

REPORTED_BY (1)

[Source]GitHub Advisory Database

VULNERABLE_TO (1)

[Software]npm/@karakeep/sdk

AFFECTS (1)

[Software]npm/@karakeep/sdk

Explore deeper with Ninja Signal's threat intelligence graph

GHSA-7rx4-c5vx-g8w3 — Ninja Signal Threat Intelligence | Ninja Signal