Skip to content

Commit 4aa24cb

Browse files
1 parent 5269f5d commit 4aa24cb

1 file changed

Lines changed: 86 additions & 0 deletions

File tree

Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-wgx6-g857-jjf7",
4+
"modified": "2026-04-22T22:13:10Z",
5+
"published": "2026-04-22T22:13:10Z",
6+
"aliases": [],
7+
"summary": "OpenC3 COSMOS: Hijacked session token can be used to reset password for persistence",
8+
"details": "### Summary\nThe OpenC3 password change functionality allows a user to change their password without providing the old password, by accepting a valid session token instead. In assumed breach scenarios, this behaviour can be exploited by an attacker who has already obtained a valid session token, to gain persistence in hijacked account (including admin) and prevent legitimate users from accessing the account.\n\n### Details\nThe design flaw in authentication model ([authentication.rb](https://github.com/OpenC3/cosmos/blob/397abec0d57972881a2e8dc10902d0dce9c27f42/openc3/lib/openc3/utilities/authentication.rb)) allows for interchangeable use of password and session tokens for user authentication As old tokens are not revoked upon password reset, an attacker who has obtained a valid session token can continue to authenticate and change the account’s password even after the victim resets it, thereby maintaining persistent control over the compromised account.\n\n### PoC\n1. Attacker is logged in user account with hijacked valid session token, but not knowing the actual password\n2. Legitimate user, as preventive action, changes his password (_password123_) using old password (_password_), that he knows, then establishes new session\n3. Attacker issues another password change request (in web proxy like Burp) supplying his still valid token as _old_password_, changing it to attacker-password, from this point preventing any other legitimate users from accessing account\n<img width=\"912\" height=\"479\" alt=\"image\" src=\"https://github.com/user-attachments/assets/d27b5980-0326-40f8-bb39-657d7b1c95a0\" />\n<img width=\"923\" height=\"423\" alt=\"image\" src=\"https://github.com/user-attachments/assets/060d9fe1-637e-4a2d-9142-76612984ea28\" />\n\n### Impact\nPersistence of an attacker who obtained valid session token and preventing legitimate users from account access",
9+
"severity": [
10+
{
11+
"type": "CVSS_V3",
12+
"score": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N"
13+
}
14+
],
15+
"affected": [
16+
{
17+
"package": {
18+
"ecosystem": "RubyGems",
19+
"name": "openc3"
20+
},
21+
"ranges": [
22+
{
23+
"type": "ECOSYSTEM",
24+
"events": [
25+
{
26+
"introduced": "0"
27+
},
28+
{
29+
"fixed": "6.10.5"
30+
}
31+
]
32+
}
33+
]
34+
},
35+
{
36+
"package": {
37+
"ecosystem": "RubyGems",
38+
"name": "openc3"
39+
},
40+
"ranges": [
41+
{
42+
"type": "ECOSYSTEM",
43+
"events": [
44+
{
45+
"introduced": "7.0.0.pre.rc1"
46+
},
47+
{
48+
"fixed": "7.0.0-rc3"
49+
}
50+
]
51+
}
52+
]
53+
}
54+
],
55+
"references": [
56+
{
57+
"type": "WEB",
58+
"url": "https://github.com/OpenC3/cosmos/security/advisories/GHSA-wgx6-g857-jjf7"
59+
},
60+
{
61+
"type": "WEB",
62+
"url": "https://github.com/OpenC3/cosmos/commit/2e623714e3426d5ae81b6f8239d4a2a6937ef776"
63+
},
64+
{
65+
"type": "PACKAGE",
66+
"url": "https://github.com/OpenC3/cosmos"
67+
},
68+
{
69+
"type": "WEB",
70+
"url": "https://github.com/OpenC3/cosmos/releases/tag/v6.10.5"
71+
},
72+
{
73+
"type": "WEB",
74+
"url": "https://github.com/OpenC3/cosmos/releases/tag/v7.0.0-rc3"
75+
}
76+
],
77+
"database_specific": {
78+
"cwe_ids": [
79+
"CWE-620"
80+
],
81+
"severity": "HIGH",
82+
"github_reviewed": true,
83+
"github_reviewed_at": "2026-04-22T22:13:10Z",
84+
"nvd_published_at": null
85+
}
86+
}

0 commit comments

Comments
 (0)