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.
Summary
Surfaced during the #5378 review (security lens). Pre-existing, out of scope for that test PR.
rsshub.appis 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 acrosssrc/,shared/,feeds.ts= zero).Why it matters
RSSHub by design fetches a caller-supplied upstream URL and re-emits it as RSS. Because
rss.proxyaccepts it at the edge and non-relay-only hosts never consult the relay, the handler will fetch and CDN-cache (s-maxage=900onapi.worldmonitor.app) whatever anrsshub.approute 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 deadwww.arabnews.comentry — and optionally extend the drift test to assert the edge allowlist contains nothing the relay'sblockedDomainsrejects.