Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessLocate rssant instance with publishing enabled
-
ExploitEnumerate encoded feed IDs and offsets
-
ExecutionCall anonymous publish.story_get endpoint
-
ImpactRetrieve content of private feed stories
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Exploitation requires that the rssant instance has the publish feature active - i.e., at least one user has called user_publish.set with is_enable=True - so that the anonymous publish.story_get endpoint is reachable; the attacker supplies a publish unionid via the X-RSSANT-PUBLISH header. The bypass specifically defeats the is_all_public=False setting: stories from feeds the owner left as is_publish=False are returned when they should be rejected ('does not exist'). Limiting factors: the publishing feature must be in use, and feed_id values are encoded unionids combining user.id and feed.id, so the attacker must enumerate/guess valid IDs and offsets. Impact is confined to confidentiality of private feed story content - no authentication is required (PR:N confirmed from the CVSS vector), but no integrity or availability impact exists. |
| Impact | This is a genuine but moderate-severity information-disclosure issue, not a high-urgency emergency. The supplied CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N) scores 6.9 and reflects an unauthenticated (PR:N), network-reachable flaw with low confidentiality impact only - no integrity or availability effect, consistent with CWE-639 (authorization bypass through user-controlled key). The vulnerability mechanism is confirmed directly by the vendor patch diff: UnionStory.get_by_id ignored the only_publish flag (the code even carried a 'TODO: filter by only_publish' comment), so the anonymous publish.story_get endpoint returned stories from feeds the owner had not marked public. No EPSS score, KEV status, or SSVC automatable/technical-impact signals were provided in the input, so probabilistic exploitation likelihood cannot be quantified here; the only decision signal is the vuln.today priority label 'this_month', which aligns with a real-but-not-critical issue rather than act_now/emergency. The product is a niche self-hosted RSS reader, which further limits real-world attack surface. Net: treat as a legitimate authorization-bypass bug warranting the available patch on the vendor's suggested timeline, not a drop-everything event. |
| Exploit ScenarioDerived | An attacker reaches an internet-exposed rssant instance where at least one user has enabled feed publishing, obtains an anonymous publish unionid, and then calls the publish.story_get endpoint while enumerating encoded feed IDs and story offsets. Because the only_publish filter was not applied, the attacker retrieves story content from feeds the owner kept private (is_publish=False). No public exploit identified at time of analysis, though the vendor patch and its added test case fully document the request sequence. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 28, 2026
Authorization bypass in RSSAnt 1.9.0 through 1.9.1 lets unauthenticated attackers read stories from feeds whose owners never published them, by calling the anonymous publish.story_get endpoint. Because UnionStory.get_by_feed_offset ignores the only_publish flag, a request carrying any valid publish unionid in the X-RSSANT-PUBLISH header plus an enumerated feed_id and offset returns private feed story content instead of the expected 'does not exist' rejection. Exposure is conditional on the instance's publishing feature being enabled by at least one user, and the attacker must guess encoded unionid feed identifiers and offsets; impact is limited to confidentiality of unpublished feed content with no integrity or availability effect, and no public exploit code or active exploitation was identified at time of analysis.
RemediationAI
Vendor patch status: upstream fix available (commit b65336f1414a32a50670ee2ba7e87cb38e0ad47b, which adds the only_publish filter to UnionStory._check_user_feed_by_story_unionid and threads it through get_by_id and get_by_feed_offset); a released patched version number is not independently confirmed in the supplied data, so deployments should apply that commit or move to the next tagged release after 1.9.1 and verify against the regression tests in rssant_api/tests/feed_publish_tests.py. Until the fix is deployed, the effective compensating control is to keep the publishing feature off - ensure no account has called user_publish.set with is_enable=True, or disable it for existing accounts - which makes the anonymous publish.story_get / publish.story_query endpoints unreachable at the cost of losing public feed sharing; note that setting is_all_public=True does not mitigate the issue for the affected code path in any meaningful privacy sense because it makes every subscribed feed public by design. Because feed identifiers are encoded unionids of user.id and feed.id, restricting or monitoring anonymous traffic to the publish endpoints (rate limiting, WAF rules on X-RSSANT-PUBLISH-bearing requests) reduces enumeration throughput but does not remove the bypass. Review access logs for anonymous publish.story_get requests returning 200 against feeds that were never published to determine whether unpublished content was harvested.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
RSSAnt is a self-hosted Django-based RSS reader, packaged as anyant:rssant (CPE cpe:2.3:a:anyant:rssant:*:*:*:*:*:*:*:*). The flaw is a CWE-639 authorization bypass through user-controlled key: feed identifiers are encoded unionids combining user.id and feed.id (rssant_common.unionid.encode), and the publish API accepts that key directly from the request. The anonymous publish.story_get endpoint delegates to UnionStory.get_by_feed_offset, which was implemented with an explicit '
TODO: filter by only_publish' comment and returned UnionStory.get_by_id without applying the visibility constraint, so the only_publish flag was silently dropped. The parallel publish.story_query path correctly returned HTTP 400 for an unpublished feed, while publish.story_get returned the story body, confirming the inconsistency between the two read paths. The upstream commit b65336f1414a32a50670ee2ba7e87cb38e0ad47b threads only_publish through _check_user_feed_by_story_unionid (adding a filter is_publish=True) and get_by_id, and adds regression tests in rssant_api/tests/feed_publish_tests.py that assert publish.story_get returns 400 'does not exist' for an is_publish=False feed, returns 200 when the owner sets is_all_public=True, and that authenticated story.get on one's own subscription is unaffected. The trigger requires the publish feature to be active (a user has called user_publish.set with is_enable=True) so the anonymous endpoint is reachable; the bypass specifically defeats the is_all_public=False configuration, and the attacker must enumerate or guess valid unionids and offsets.
Know when Rssant gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N
Anonymous network endpoint with no authentication (PR:N) and easy requests (AC:L); impact limited to disclosure of private feed story content, so C:L and I:N/A:N.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
rssant 1.9.0 through 1.9.1 contains an authorization bypass vulnerability that allows unauthenticated attackers to read stories from unpublished feeds through the anonymous publish.story_get endpoint. Because UnionStory.get_by_feed_offset ignores the only_publish flag, attackers can enumerate feed IDs and offsets to retrieve private feed stories.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
EUVD-2026-110840
GHSA-pvf4-vqj9-938h
NVD
CVE.org
EPSS
Exploit-DB