Skip to content

[P2] rss-proxy: remove dead 'rsshub.app' from the RSS allowlist (edge accepts it, relay blocks it, zero feeds use it) #5401

Description

@koala73

Summary

Surfaced during the #5378 review (security lens). Pre-existing, out of scope for that test PR.

rsshub.app is in the edge RSS allowlist (shared/rss-allowed-domains.json + api/_rss-allowed-domains.js) but the Railway relay explicitly blocks it (scripts/ais-relay.cjs:9913, blockedDomains = ['rsshub.app']), and no live feed references it (grep across src/, shared/, feeds.ts = zero).

Why it matters

RSSHub by design fetches a caller-supplied upstream URL and re-emits it as RSS. Because rss.proxy accepts it at the edge and non-relay-only hosts never consult the relay, the handler will fetch and CDN-cache (s-maxage=900 on api.worldmonitor.app) whatever an rsshub.app route returns. It's dead config carrying an open-proxy / content-laundering footgun.

Scoped honestly (per the reviewer): the second hop runs in RSSHub's own network so this is content-laundering / open-proxy abuse, not internal SSRF; and the site-wide CSP (script-src 'self' 'strict-dynamic' 'nonce-...') applies to /api/rss-proxy, blocking script execution of proxied content.

Fix

Remove "rsshub.app" from all 4 allowlist mirrors (shared/rss-allowed-domains.json, shared/rss-allowed-domains.cjs, scripts/shared/rss-allowed-domains.json, api/_rss-allowed-domains.js) — exactly as #5378/PR#5399 removed the dead www.arabnews.com entry — and optionally extend the drift test to assert the edge allowlist contains nothing the relay's blockedDomains rejects.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions