Every CVE Search/ Get API key

CVE-2026-55547

Yamcs: Missing Authorization on Role and Privilege Enumeration Endpoints Allows Any Authenticated User to Disclose Full Security Configuration

4.3 MediumFix available

Yamcs is a mission control framework. Prior to 5.12.8 and 5.13.2, Yamcs omits SystemPrivilege.ControlAccess checks from IamApi.listRoles, IamApi.getRole, and IamApi.listPrivileges in yamcs-core/src/main/java/org/yamcs/http/api/IamApi.java. Any authenticated account can call GET /api/roles, GET /api/roles/{name}, and GET /api/privileges to enumerate available system privileges and configured role mappings. The disclosure reveals security configuration that can support targeted privilege-escalation attempts. This issue is fixed in versions 5.12.8 and 5.13.2.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
Low
User interaction
None

What an attacker can affect

Confidentiality
Low
Integrity
None
Availability
None

Exploit likelihood

0.34%Up 0.1 points since Aug 29, 2026
90%50%10%1%

What each source reports

CVE List Score used 4.3

Yamcs: Missing Authorization on Role and Privilege Enumeration Endpoints Allows Any Authenticated User to Disclose Full Security Configuration

Yamcs is a mission control framework. Prior to 5.12.8 and 5.13.2, Yamcs omits SystemPrivilege.ControlAccess checks from IamApi.listRoles, IamApi.getRole, and IamApi.listPrivileges in yamcs-core/src/main/java/org/yamcs/http/api/IamApi.java. Any authenticated account can call GET /api/roles, GET /api/roles/{name}, and GET /api/privileges to enumerate available system privileges and configured role mappings. The disclosure reveals security configuration that can support targeted privilege-escalation attempts. This issue is fixed in versions 5.12.8 and 5.13.2.

Record
CVE-2026-55547
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-285, CWE-862
Updated
2026-11-02
EUVDEUVD-2026-67840 4.3

Yamcs is a mission control framework. Prior to 5.12.8 and 5.13.2, Yamcs omits SystemPrivilege.ControlAccess checks from IamApi.listRoles, IamApi.getRole, and IamApi.listPrivileges in yamcs-core/src/main/java/org/yamcs/http/api/IamApi.java. Any authenticated account can call GET /api/roles, GET /api/roles/{name}, and GET /api/privileges to enumerate available system privileges and configured role mappings. The disclosure reveals security configuration that can support targeted privilege-escalation attempts. This issue is fixed in versions 5.12.8 and 5.13.2.

Record
EUVD-2026-67840
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-cvw4-55pp-3hfq 4.3

Yamcs's Missing Authorization on Role and Privilege Enumeration Endpoints Allows Any Authenticated User to Disclose Full Security Configuration

Summary

Missing authorization checks on three IAM API endpoints (GET /api/roles, GET /api/roles/{name}, GET /api/privileges) allow any authenticated user — regardless of their assigned permissions — to enumerate the complete list of system privileges and role definitions. An attacker with only a low-privilege account (e.g., a read-only operator) can retrieve the full privilege taxonomy of the server, including the names and assignments of all administrator-level capabilities. This information directly enables targeted privilege escalation attacks.


Details

Three handler methods in IamApi.java serve sensitive security metadata without performing any authorization check:

File: yamcs-core/src/main/java/org/yamcs/http/api/IamApi.java

// Line 73 — GET /api/roles
@Override
public void listRoles(Context ctx, Empty request, Observer<ListRolesResponse> observer) {
    SecurityStore securityStore = YamcsServer.getServer().getSecurityStore();
    List<Role> roles = securityStore.getDirectory().getRoles();
    // No ctx.checkSystemPrivilege() call — any authenticated user proceeds
    ...
    observer.complete(responseb.build());
}

// Line 87 — GET /api/roles/{name}
@Override
public void getRole(Context ctx, GetRoleRequest request, Observer<RoleInfo> observer) {
    SecurityStore securityStore = YamcsServer.getServer().getSecurityStore();
    Role role = securityStore.getDirectory().getRole(request.getName());
    // No ctx.checkSystemPrivilege() call
    observer.complete(toRoleInfo(role));
}

// Line 112 — GET /api/privileges
@Override
public void listPrivileges(Context ctx, Empty request, Observer<ListPrivilegesResponse> observer) {
    SecurityStore securityStore = YamcsServer.getServer().getSecurityStore();
    List<SystemPrivilege> privileges = new ArrayList<>(securityStore.getSystemPrivileges());
    // No ctx.checkSystemPrivilege() call
    observer.complete(responseb.build());
}

By contrast, all write operations and user-management endpoints in the same file correctly enforce authorization. For example:

// Line 126 — GET /api/users (correctly protected)
public void listUsers(...) {
    ctx.checkSystemPrivilege(SystemPrivilege.ControlAccess);  // ← present
    ...
}

// Line 142 — POST /api/users (correctly protected)
public void createUser(...) {
    ctx.checkSystemPrivilege(SystemPrivilege.ControlAccess);  // ← present
    ...
}

The three vulnerable endpoints share the same ControlAccess protection requirement as the user-management endpoints but were never given the corresponding check.

Route definitions (confirmed in yamcs-api/src/main/proto/yamcs/protobuf/iam/iam.proto):

GET /api/privileges   → IamApi.listPrivileges()
GET /api/roles        → IamApi.listRoles()
GET /api/roles/{name} → IamApi.getRole()

PoC

<img width="2324" height="1086" alt="image" src="https://github.com/user-attachments/assets/98ec3e81-556d-41e1-9211-10a5b9ad0d59" />

Environment

  • Yamcs version: 5.13.1-SNAPSHOT (latest master)
  • Auth module: YamlAuthModule (default)
  • Two accounts available: admin (Administrator) and operator (Operator)
  • Calculate the Basic Auth credentials for the two accounts (this needs to be done only once). Please modify according to the actual situation. These credentials will be used in subsequent commands. Here, there is a test low-privilege account named "operator" with the password "password".

<img width="2243" height="223" alt="image" src="https://github.com/user-attachments/assets/5614013c-2143-4f61-aba3-eab1cba24b67" />

powershell -command "[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes('admin:admin'))"

powershell -command "[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes('operator:password'))"

Step 1 — Confirm that protected endpoints correctly return 403 for low-privilege users

curl -s -o nul -w "HTTP %{http_code}" http://localhost:8090/api/users -H "Authorization:…
Record
GHSA-cvw4-55pp-3hfq
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-285, CWE-862
Updated
2026-11-02
NVD 4.3

Yamcs is a mission control framework. Prior to 5.12.8 and 5.13.2, Yamcs omits SystemPrivilege.ControlAccess checks from IamApi.listRoles, IamApi.getRole, and IamApi.listPrivileges in yamcs-core/src/main/java/org/yamcs/http/api/IamApi.java. Any authenticated account can call GET /api/roles, GET /api/roles/{name}, and GET /api/privileges to enumerate available system privileges and configured role mappings. The disclosure reveals security configuration that can support targeted privilege-escalation attempts. This issue is fixed in versions 5.12.8 and 5.13.2.

Record
CVE-2026-55547
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-285, CWE-862
Updated
2026-11-02
OSV 4.3

Yamcs: Missing Authorization on Role and Privilege Enumeration Endpoints Allows Any Authenticated User to Disclose Full Security Configuration

Yamcs is a mission control framework. Prior to 5.12.8 and 5.13.2, Yamcs omits SystemPrivilege.ControlAccess checks from IamApi.listRoles, IamApi.getRole, and IamApi.listPrivileges in yamcs-core/src/main/java/org/yamcs/http/api/IamApi.java. Any authenticated account can call GET /api/roles, GET /api/roles/{name}, and GET /api/privileges to enumerate available system privileges and configured role mappings. The disclosure reveals security configuration that can support targeted privilege-escalation attempts. This issue is fixed in versions 5.12.8 and 5.13.2.

Record
CVE-2026-55547
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-285, CWE-862
Updated
2026-11-02
OSVGHSA-cvw4-55pp-3hfq 4.3

Yamcs's Missing Authorization on Role and Privilege Enumeration Endpoints Allows Any Authenticated User to Disclose Full Security Configuration

Summary

Missing authorization checks on three IAM API endpoints (GET /api/roles, GET /api/roles/{name}, GET /api/privileges) allow any authenticated user — regardless of their assigned permissions — to enumerate the complete list of system privileges and role definitions. An attacker with only a low-privilege account (e.g., a read-only operator) can retrieve the full privilege taxonomy of the server, including the names and assignments of all administrator-level capabilities. This information directly enables targeted privilege escalation attacks.


Details

Three handler methods in IamApi.java serve sensitive security metadata without performing any authorization check:

File: yamcs-core/src/main/java/org/yamcs/http/api/IamApi.java

// Line 73 — GET /api/roles
@Override
public void listRoles(Context ctx, Empty request, Observer<ListRolesResponse> observer) {
    SecurityStore securityStore = YamcsServer.getServer().getSecurityStore();
    List<Role> roles = securityStore.getDirectory().getRoles();
    // No ctx.checkSystemPrivilege() call — any authenticated user proceeds
    ...
    observer.complete(responseb.build());
}

// Line 87 — GET /api/roles/{name}
@Override
public void getRole(Context ctx, GetRoleRequest request, Observer<RoleInfo> observer) {
    SecurityStore securityStore = YamcsServer.getServer().getSecurityStore();
    Role role = securityStore.getDirectory().getRole(request.getName());
    // No ctx.checkSystemPrivilege() call
    observer.complete(toRoleInfo(role));
}

// Line 112 — GET /api/privileges
@Override
public void listPrivileges(Context ctx, Empty request, Observer<ListPrivilegesResponse> observer) {
    SecurityStore securityStore = YamcsServer.getServer().getSecurityStore();
    List<SystemPrivilege> privileges = new ArrayList<>(securityStore.getSystemPrivileges());
    // No ctx.checkSystemPrivilege() call
    observer.complete(responseb.build());
}

By contrast, all write operations and user-management endpoints in the same file correctly enforce authorization. For example:

// Line 126 — GET /api/users (correctly protected)
public void listUsers(...) {
    ctx.checkSystemPrivilege(SystemPrivilege.ControlAccess);  // ← present
    ...
}

// Line 142 — POST /api/users (correctly protected)
public void createUser(...) {
    ctx.checkSystemPrivilege(SystemPrivilege.ControlAccess);  // ← present
    ...
}

The three vulnerable endpoints share the same ControlAccess protection requirement as the user-management endpoints but were never given the corresponding check.

Route definitions (confirmed in yamcs-api/src/main/proto/yamcs/protobuf/iam/iam.proto):

GET /api/privileges   → IamApi.listPrivileges()
GET /api/roles        → IamApi.listRoles()
GET /api/roles/{name} → IamApi.getRole()

PoC

<img width="2324" height="1086" alt="image" src="https://github.com/user-attachments/assets/98ec3e81-556d-41e1-9211-10a5b9ad0d59" />

Environment

  • Yamcs version: 5.13.1-SNAPSHOT (latest master)
  • Auth module: YamlAuthModule (default)
  • Two accounts available: admin (Administrator) and operator (Operator)
  • Calculate the Basic Auth credentials for the two accounts (this needs to be done only once). Please modify according to the actual situation. These credentials will be used in subsequent commands. Here, there is a test low-privilege account named "operator" with the password "password".

<img width="2243" height="223" alt="image" src="https://github.com/user-attachments/assets/5614013c-2143-4f61-aba3-eab1cba24b67" />

powershell -command "[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes('admin:admin'))"

powershell -command "[Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes('operator:password'))"

Step 1 — Confirm that protected endpoints correctly return 403 for low-privilege users

curl -s -o nul -w "HTTP %{http_code}" http://localhost:8090/api/users -H "Authorization:…
Record
GHSA-cvw4-55pp-3hfq
CVSS 3.1
4.3 MediumCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
Weakness
CWE-285, CWE-862
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
org.yamcs:yamcs-core
Maven
5.13.0 to 5.13.1
5.13.2
org.yamcs:yamcs-core
Maven
through 5.12.7
5.12.8
org.yamcs:yamcs-core
Maven
5.13.0 up to 5.13.2, plus listed versions
5.13.1
5.13.2
org.yamcs:yamcs-core
Maven
before 5.12.8, plus listed versions
0.29.30.30.03.0.03.1.03.1.1
Show 45 moreShow less
3.1.23.2.03.2.13.2.23.3.03.3.13.4.03.4.13.4.113.4.23.4.33.4.43.4.53.4.63.4.84.0.04.0.14.1.14.1.24.10.04.10.14.10.24.10.34.10.44.10.54.10.64.10.74.10.84.10.94.2.04.2.14.2.24.3.04.3.14.4.04.4.14.4.24.5.04.6.04.6.14.6.24.6.34.74.7.14.7.3
5.12.8

History

History
RecordedChangedSources
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-55547 is a medium vulnerability (CVSS 4.3) in Yamcs, published August 28, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.34%, the 27th percentile. Fixed in org.yamcs:yamcs-core 5.13.2.

References

This page doesn't list everything

Left out here: 116 versions and the rest of 2 source descriptions. The JSON record has them.

MoveEnter Open