Skip to content

security(star-rating): authorize the /o?method=star ratings read (24.05) - #7956

Open
ar2rsawseen wants to merge 1 commit into
release.24.05from
backport/star-method-authorize-2405
Open

security(star-rating): authorize the /o?method=star ratings read (24.05)#7956
ar2rsawseen wants to merge 1 commit into
release.24.05from
backport/star-method-authorize-2405

Conversation

@ar2rsawseen

Copy link
Copy Markdown
Member

Backport of #7955 to release.24.05.

/o?method=star returns the platform and application-version combinations that have received star ratings, and performed no authorization — any caller supplying an app_id received that application's data with no api_key, no auth_token and no session, while the sibling /o/feedback/data correctly answers 400 Missing parameter "api_key" or "auth_token" on the identical credential-less request.

Authentication on /o is per method, not global: core methods call validateUserForDataReadAPI themselves, and the default: branch hands the validators to plugins as helpers without calling them, so a plugin that claims a request must authorize it. This branch claimed the request, returned true, and never called a validator.

Fix (identical to #7955): wrap the branch in validateRead(params, FEATURE_NAME, …), the same check the sibling reads in this file already apply, running before the period parameter is validated so an unauthorized caller cannot probe the endpoint through its error responses. The diff is mostly re-indentation from introducing the callback.

The only caller is the dashboard Ratings page (starRatingPlugin.requestPlatformVersion), which sends the session credential and an app the member has access to, so it is unaffected. eslint clean.

🤖 Generated with Claude Code

Backport of #7955 to release.24.05.

The star-rating dashboard read performed no authorization. Authentication on /o is
per method: core methods call validateUserForDataReadAPI themselves, and the default
branch hands the validators to plugins as helpers without calling them, so a plugin
that claims a request must authorize it. This branch claimed the request and never
did, so it answered callers with no account, token or session, for any app_id.

Wrap it in validateRead(params, FEATURE_NAME, ...), the same check the sibling reads
in this file already apply, running before the period parameter is validated so an
unauthorized caller cannot probe the endpoint. The only caller is the dashboard
Ratings page, which sends the session credential, so it is unaffected.

Reported through the security bug bounty programme (received 2026-08-18).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant