/

CVE-2026-71854

Severity:

HIGH RISK

(8.2)

Broken Access Control (CWE-306) in OpenAEV Lessons API

CVE-2026-71854

Deferred

Vulnerability type

Category:

Broken Access Control

CWE:

CWE-306, CWE-639, CWE-862

Impact:

Unauthorized data disclosure and account impersonation

Severity:

HIGH RISK

(8.2)

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

OpenAEV lessons endpoints can be accessed without authentication and trust a

client-supplied user identifier without confirming the caller's identity or

exercise membership. An unauthenticated attacker who knows an exercise UUID

may read lessons-learned content and author identities, or create and

overwrite answers attributed to other users.

OpenAEV lessons endpoints can be accessed without authentication and trust a

client-supplied user identifier without confirming the caller's identity or

exercise membership. An unauthenticated attacker who knows an exercise UUID

may read lessons-learned content and author identities, or create and

overwrite answers attributed to other users.

Affected context

The vulnerability affects default OpenAEV installations where the

/api/player/** lessons endpoints are reachable without authentication.

Risk arises when the API accepts a userId query parameter as authoritative

without verifying the caller's identity, permissions, or membership in the

relevant cyber exercise. Exposure depends on the endpoints being accessible

and exercise identifiers being discoverable or obtained by an attacker.

The vulnerability affects default OpenAEV installations where the

/api/player/** lessons endpoints are reachable without authentication.

Risk arises when the API accepts a userId query parameter as authoritative

without verifying the caller's identity, permissions, or membership in the

relevant cyber exercise. Exposure depends on the endpoints being accessible

and exercise identifiers being discoverable or obtained by an attacker.

Exploit preconditions

  • Attack surface: HTTP requests to the /api/player/** lessons endpoints
  • Required access: No authenticated account is required on affected default installations
  • Trigger point: Reading, creating, or updating lesson answers through the API
  • Required knowledge: An exercise UUID or another valid exercise identifier
  • Why exploitation is possible: The service omits authentication checks and

accepts a client-controlled userId without enforcing ownership or exercise

membership

  • Attack surface: HTTP requests to the /api/player/** lessons endpoints
  • Required access: No authenticated account is required on affected default installations
  • Trigger point: Reading, creating, or updating lesson answers through the API
  • Required knowledge: An exercise UUID or another valid exercise identifier
  • Why exploitation is possible: The service omits authentication checks and

accepts a client-controlled userId without enforcing ownership or exercise

membership

Why this happens

The underlying issue is a failure to enforce authentication and authorization

at protected API boundaries. The application treats a client-supplied user

identifier as trusted rather than deriving identity from an authenticated

security context and verifying access to the target exercise. This behavior

maps primarily to CWE-306: Missing Authentication for Critical Function,

with related exposure to CWE-639: Authorization Bypass Through User-Controlled Key and CWE-862: Missing Authorization.

The underlying issue is a failure to enforce authentication and authorization

at protected API boundaries. The application treats a client-supplied user

identifier as trusted rather than deriving identity from an authenticated

security context and verifying access to the target exercise. This behavior

maps primarily to CWE-306: Missing Authentication for Critical Function,

with related exposure to CWE-639: Authorization Bypass Through User-Controlled Key and CWE-862: Missing Authorization.

Potential impact

  • An unauthenticated party may read lessons-learned questions and answers
  • Author identities and other exercise-related information could be disclosed
  • Attackers may create answers attributed to arbitrary users
  • Existing answers could be overwritten or tampered with
  • Exercise records and participant trust may be damaged
  • Manipulated content could affect reporting, training outcomes, or incident analysis
  • An unauthenticated party may read lessons-learned questions and answers
  • Author identities and other exercise-related information could be disclosed
  • Attackers may create answers attributed to arbitrary users
  • Existing answers could be overwritten or tampered with
  • Exercise records and participant trust may be damaged
  • Manipulated content could affect reporting, training outcomes, or incident analysis

General mitigation guidance

Mitigation generally focuses on enforcing authentication and object-level

authorization for every lessons endpoint.

Common defensive patterns include:

  • Require an authenticated security context before processing player requests
  • Derive the effective user identity from the authenticated session or token

rather than trusting a request parameter

  • Verify that the authenticated user belongs to the referenced exercise and

has the required operation-specific permission

  • Apply authorization checks consistently to reads, creates, updates, and

deletes

  • Use deny-by-default policies and avoid exposing exercise identifiers as

sufficient authorization material

  • Enforce least privilege for participant and administrative roles
  • Validate ownership and resource relationships on the server side
  • Record and monitor authorization failures and unusual answer modifications

Mitigation generally focuses on enforcing authentication and object-level

authorization for every lessons endpoint.

Common defensive patterns include:

  • Require an authenticated security context before processing player requests
  • Derive the effective user identity from the authenticated session or token

rather than trusting a request parameter

  • Verify that the authenticated user belongs to the referenced exercise and

has the required operation-specific permission

  • Apply authorization checks consistently to reads, creates, updates, and

deletes

  • Use deny-by-default policies and avoid exposing exercise identifiers as

sufficient authorization material

  • Enforce least privilege for participant and administrative roles
  • Validate ownership and resource relationships on the server side
  • Record and monitor authorization failures and unusual answer modifications

How teams detect issues like this

Detection approaches can include:

  • Static analysis rules identifying unauthenticated controller or route

handlers for sensitive resources

  • Code review checks for direct use of userId or similar identity fields

from query parameters, request bodies, or URL paths

  • Verification that every read and write path performs both authentication

and object-level authorization

  • API tests that attempt anonymous access and cross-user or cross-exercise

operations

  • Policy checks requiring security middleware on all /api/player/** routes
  • Runtime monitoring for anonymous requests, mismatched authenticated and

supplied identities, and repeated answer overwrites

Automated application-security testing and code-review tools may help identify

missing route protections, but authorization behavior should also be validated

with integration tests.

Detection approaches can include:

  • Static analysis rules identifying unauthenticated controller or route

handlers for sensitive resources

  • Code review checks for direct use of userId or similar identity fields

from query parameters, request bodies, or URL paths

  • Verification that every read and write path performs both authentication

and object-level authorization

  • API tests that attempt anonymous access and cross-user or cross-exercise

operations

  • Policy checks requiring security middleware on all /api/player/** routes
  • Runtime monitoring for anonymous requests, mismatched authenticated and

supplied identities, and repeated answer overwrites

Automated application-security testing and code-review tools may help identify

missing route protections, but authorization behavior should also be validated

with integration tests.

Sources

SourceLink
github.comgithub.com/OpenAEV-Platform/openaev/security/advisories/GHSA-47wr-wp4h-8v3f

Frequently asked

questions

Yes. On affected default installations, an attacker may interact with the

lessons endpoints over the network without first authenticating, provided the

relevant endpoint is reachable.

No account is required. The attacker needs a valid exercise UUID or another

usable exercise identifier, which may be exposed through application behavior,

shared content, logs, or other sources.

Require authentication for every lessons endpoint, derive identity from the

authenticated context, and perform server-side authorization checks for the

requested exercise and operation.

Apply deny-by-default API policies, test anonymous and cross-user access

cases, avoid trusting client-supplied identity fields, and continuously review

object-level authorization for all resource operations.

Yes. On affected default installations, an attacker may interact with the

lessons endpoints over the network without first authenticating, provided the

relevant endpoint is reachable.

No account is required. The attacker needs a valid exercise UUID or another

usable exercise identifier, which may be exposed through application behavior,

shared content, logs, or other sources.

Require authentication for every lessons endpoint, derive identity from the

authenticated context, and perform server-side authorization checks for the

requested exercise and operation.

Apply deny-by-default API policies, test anonymous and cross-user access

cases, avoid trusting client-supplied identity fields, and continuously review

object-level authorization for all resource operations.

Find out what's already
exploitable in your codebase.