/

CVE-2026-108550

Severity:

HIGH RISK

(8.8)

Incorrect Authorization (CWE-863) in SkillHub Merge

CVE-2026-108550

Deferred

Vulnerability type

Category:

Incorrect Authorization

CWE:

CWE-863

Impact:

Account Takeover and Privilege Escalation

Severity:

HIGH RISK

(8.8)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

SkillHub contains an incorrect authorization vulnerability in its account-merge flow that can allow an authenticated attacker to merge another user's account into their own. If the attacker can identify a victim account or OAuth identity and complete the merge process, they may inherit the victim's API tokens, roles, and namespace ownership.

SkillHub contains an incorrect authorization vulnerability in its account-merge flow that can allow an authenticated attacker to merge another user's account into their own. If the attacker can identify a victim account or OAuth identity and complete the merge process, they may inherit the victim's API tokens, roles, and namespace ownership.

Affected context

The vulnerability occurs in SkillHub deployments before 0.2.22, within the AccountMergeService and AccountMergeController components. Risk exists when the merge workflow accepts attacker-controlled target account identifiers, exposes verification material to the requester, and does not independently verify that the requester is authorized to merge the selected accounts.

The vulnerability occurs in SkillHub deployments before 0.2.22, within the AccountMergeService and AccountMergeController components. Risk exists when the merge workflow accepts attacker-controlled target account identifiers, exposes verification material to the requester, and does not independently verify that the requester is authorized to merge the selected accounts.

Exploit preconditions

  • Attack surface: Account-merge initiation and confirmation endpoints
  • Required access: An authenticated SkillHub account
  • Trigger point: A merge request targeting another username or OAuth identity
  • Additional condition: The merge workflow must return or otherwise expose verification material without adequately authorizing the target account
  • Why exploitation is possible: Authorization checks do not reliably bind the merge operation and its confirmation to the rightful owners of both accounts
  • Attack surface: Account-merge initiation and confirmation endpoints
  • Required access: An authenticated SkillHub account
  • Trigger point: A merge request targeting another username or OAuth identity
  • Additional condition: The merge workflow must return or otherwise expose verification material without adequately authorizing the target account
  • Why exploitation is possible: Authorization checks do not reliably bind the merge operation and its confirmation to the rightful owners of both accounts

Why this happens

The underlying bug is an authorization failure in a sensitive account-linking operation. The merge flow appears to validate that a requester is authenticated, but does not sufficiently verify that the requester is authorized to control the target account or identity. This maps to CWE-863: Incorrect Authorization, where access-control decisions permit an authenticated subject to perform an operation outside their intended authority.

The underlying bug is an authorization failure in a sensitive account-linking operation. The merge flow appears to validate that a requester is authenticated, but does not sufficiently verify that the requester is authorized to control the target account or identity. This maps to CWE-863: Incorrect Authorization, where access-control decisions permit an authenticated subject to perform an operation outside their intended authority.

Potential impact

  • An attacker may take over another user's account
  • Victim API tokens could be exposed to or controlled by the attacker
  • Account roles and associated privileges could be inherited
  • Namespace ownership may be transferred or abused
  • Connected resources and data could be modified, deleted, or accessed
  • Compromised accounts could facilitate further attacks against other users or services
  • An attacker may take over another user's account
  • Victim API tokens could be exposed to or controlled by the attacker
  • Account roles and associated privileges could be inherited
  • Namespace ownership may be transferred or abused
  • Connected resources and data could be modified, deleted, or accessed
  • Compromised accounts could facilitate further attacks against other users or services

General mitigation guidance

Mitigation generally focuses on enforcing authorization at every stage of the account-merge transaction rather than relying only on authentication.

Common defensive patterns include:

  • Require independent proof of control for both accounts or identities involved
  • Bind verification challenges to the intended accounts, requester, session, and transaction
  • Do not return verification tokens or equivalent secrets to an untrusted requester
  • Recheck authorization during confirmation instead of trusting initiation-time state
  • Apply explicit ownership and privilege checks before transferring tokens, roles, or namespaces
  • Use secure-by-default merge workflows that require deliberate confirmation from both account owners
  • Minimize transferred privileges and invalidate or rotate sensitive tokens when account ownership changes
  • Log and alert on unusual merge attempts, repeated target changes, and high-privilege ownership transfers

Mitigation generally focuses on enforcing authorization at every stage of the account-merge transaction rather than relying only on authentication.

Common defensive patterns include:

  • Require independent proof of control for both accounts or identities involved
  • Bind verification challenges to the intended accounts, requester, session, and transaction
  • Do not return verification tokens or equivalent secrets to an untrusted requester
  • Recheck authorization during confirmation instead of trusting initiation-time state
  • Apply explicit ownership and privilege checks before transferring tokens, roles, or namespaces
  • Use secure-by-default merge workflows that require deliberate confirmation from both account owners
  • Minimize transferred privileges and invalidate or rotate sensitive tokens when account ownership changes
  • Log and alert on unusual merge attempts, repeated target changes, and high-privilege ownership transfers

How teams detect issues like this

Detection can combine source review, automated analysis, and runtime monitoring:

  • Search for account-merge handlers that authorize only the initiating user
  • Review whether target identifiers, OAuth identities, and verification tokens are bound to the same authorized transaction
  • Check for confirmation endpoints that trust client-supplied state or initiation results without repeating authorization checks
  • Use static analysis and automated code review rules for missing object-level authorization on sensitive operations
  • Enforce policies requiring authorization tests for account linking, ownership transfer, token access, and role changes
  • Monitor audit logs for merges involving unrelated accounts, unusual OAuth identities, or unexpected namespace transfers

Detection can combine source review, automated analysis, and runtime monitoring:

  • Search for account-merge handlers that authorize only the initiating user
  • Review whether target identifiers, OAuth identities, and verification tokens are bound to the same authorized transaction
  • Check for confirmation endpoints that trust client-supplied state or initiation results without repeating authorization checks
  • Use static analysis and automated code review rules for missing object-level authorization on sensitive operations
  • Enforce policies requiring authorization tests for account linking, ownership transfer, token access, and role changes
  • Monitor audit logs for merges involving unrelated accounts, unusual OAuth identities, or unexpected namespace transfers

Sources

SourceLink
github.comgithub.com/iflytek/skillhub
github.comgithub.com/iflytek/skillhub/blob/v0.2.21/server/skillhub-auth/src/main/java/com/iflytek/skillhub/auth/merge/AccountMergeService.java#L95-L109
github.comgithub.com/iflytek/skillhub/commit/45228996c7dd67f9304dba5b221fef15138a7fc4
github.comgithub.com/iflytek/skillhub/issues/921
github.comgithub.com/iflytek/skillhub/releases/tag/v0.2.22
vulncheck.comvulncheck.com/advisories/skillhub-before-0.2.22-account-takeover-via-account-merge-flow

Frequently asked

questions

Yes, where the account-merge endpoints are exposed through the application and the attacker can authenticate. Exploitation does not generally require local system access.

The attacker typically needs a valid SkillHub account and the ability to identify a target username or OAuth identity. The target account may not need to be under the attacker's control if authorization checks are incomplete.

Enforce independent authorization for both accounts at initiation and confirmation, keep verification material confidential, and bind the entire transaction to the verified identities and session.

Treat account merging and ownership transfers as high-risk operations, require explicit proof of control, add object-level authorization tests, minimize transferred privileges, and monitor the resulting audit events.

Yes, where the account-merge endpoints are exposed through the application and the attacker can authenticate. Exploitation does not generally require local system access.

The attacker typically needs a valid SkillHub account and the ability to identify a target username or OAuth identity. The target account may not need to be under the attacker's control if authorization checks are incomplete.

Enforce independent authorization for both accounts at initiation and confirmation, keep verification material confidential, and bind the entire transaction to the verified identities and session.

Treat account merging and ownership transfers as high-risk operations, require explicit proof of control, add object-level authorization tests, minimize transferred privileges, and monitor the resulting audit events.

Find out what's already
exploitable in your codebase.