Skip to content

Commit e066877

Browse files
1 parent 951d8f1 commit e066877

2 files changed

Lines changed: 138 additions & 0 deletions

File tree

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-2v6m-6xw3-6467",
4+
"modified": "2026-02-26T19:53:30Z",
5+
"published": "2026-02-26T19:53:30Z",
6+
"aliases": [
7+
"CVE-2026-27465"
8+
],
9+
"summary": "Fleet: Sensitive Google Calendar credentials disclosed to low-privileged users",
10+
"details": "### Summary\n\nA vulnerability in Fleet’s configuration API could expose Google Calendar service account credentials to authenticated users with low-privilege roles. This may allow unauthorized access to Google Calendar resources associated with the service account.\n\n### Impact\n\nFleet returns configuration data through an API endpoint that is accessible to authenticated users, including those with the lowest-privilege “Observer” role. In affected versions, Google Calendar service account credentials were not properly obfuscated before being returned.\n\nAs a result, a low-privilege user could retrieve the service account’s private key material. Depending on how the Google Calendar integration is configured, this could allow unauthorized access to calendar data or other Google Workspace resources associated with the service account.\n\nThis issue does not allow escalation of privileges within Fleet or access to device management functionality.\n\n### Patches\n\n- v4.80.1\n\n### Workarounds\n\nIf an immediate upgrade is not possible, administrators should remove the Google Calendar integration from Fleet and rotate the affected Google service account credentials.\n\n### For more information\n\nIf there are any questions or comments about this advisory:\n\nEmail Fleet at [security@fleetdm.com](mailto:security@fleetdm.com) \nJoin #fleet in [osquery Slack](https://join.slack.com/t/osquery/shared_invite/zt-h29zm0gk-s2DBtGUTW4CFel0f0IjTEw)\n\n### Credits\n\nFleet thanks @secfox-ai for responsibly reporting this issue.",
11+
"severity": [
12+
{
13+
"type": "CVSS_V4",
14+
"score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "Go",
21+
"name": "github.com/fleetdm/fleet/v4"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "0"
29+
},
30+
{
31+
"fixed": "4.80.1"
32+
}
33+
]
34+
}
35+
]
36+
}
37+
],
38+
"references": [
39+
{
40+
"type": "WEB",
41+
"url": "https://github.com/fleetdm/fleet/security/advisories/GHSA-2v6m-6xw3-6467"
42+
},
43+
{
44+
"type": "ADVISORY",
45+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-27465"
46+
},
47+
{
48+
"type": "WEB",
49+
"url": "https://github.com/fleetdm/fleet/commit/23fc6804efe785f806f769d6be1f5f05b2e13ec2"
50+
},
51+
{
52+
"type": "PACKAGE",
53+
"url": "https://github.com/fleetdm/fleet"
54+
}
55+
],
56+
"database_specific": {
57+
"cwe_ids": [
58+
"CWE-200",
59+
"CWE-201"
60+
],
61+
"severity": "HIGH",
62+
"github_reviewed": true,
63+
"github_reviewed_at": "2026-02-26T19:53:30Z",
64+
"nvd_published_at": "2026-02-26T03:16:04Z"
65+
}
66+
}
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
{
2+
"schema_version": "1.4.0",
3+
"id": "GHSA-r5mx-6wc6-7h9w",
4+
"modified": "2026-02-26T19:54:34Z",
5+
"published": "2026-02-26T19:54:34Z",
6+
"aliases": [
7+
"CVE-2026-27837"
8+
],
9+
"summary": "dottie is vulnerable to Prototype Pollution bypass via non-first path segments in set() and transform()",
10+
"details": "### Summary\n\ndottie versions 2.0.4 through 2.0.6 contain an incomplete fix for CVE-2023-26132. The prototype pollution guard introduced in commit `7d3aee1` only validates the first segment of a dot-separated path, allowing an attacker to bypass the protection by placing `__proto__` at any position other than the first.\n\nBoth `dottie.set()` and `dottie.transform()` are affected.\n\n### Details\n\nThe existing guard checks only `pieces[0] === '__proto__'`. When a path like `'a.__proto__.polluted'` is used, `pieces[0]` evaluates to `'a'`, not `'__proto__'`, so the guard is bypassed.\n\nInside the traversal loop, `current['__proto__'] = {}` triggers the `__proto__` setter, replacing the intermediate object's prototype. The final value is then written onto this new prototype.\n\n**Important distinction:** This vulnerability does NOT pollute the global `Object.prototype`. It injects properties into a specific object's prototype chain. However, injected properties are invisible to `hasOwnProperty()` and `Object.keys()`, which makes them difficult to detect and can lead to authorization bypass in common coding patterns.\n\n### PoC\n```javascript\nconst dottie = require('dottie');\n\n// set() bypass\nconst obj = {};\ndottie.set(obj, 'session.__proto__.isAdmin', true);\nconsole.log(obj.session.isAdmin); // true\nconsole.log(({}).isAdmin); // undefined\nconsole.log(obj.session.hasOwnProperty('isAdmin')); // false\n\n// transform() bypass\nconst flat = { 'user.__proto__.role': 'admin', 'user.name': 'guest' };\nconst result = dottie.transform(flat);\nconsole.log(result.user.role); // 'admin'\nconsole.log(({}).role); // undefined\n```\n\nTested on Node.js v20 and v22, dottie 2.0.6, Windows 11.\n\n### Impact\n\nThe primary risk is authorization bypass. In a typical server-side scenario where dottie is used to process user input (e.g., via Sequelize, which depends on dottie with ~1.3M weekly npm downloads), an attacker can inject properties like `isAdmin: true` into objects used for access control decisions. Since the injected property is not an own property, standard checks using `hasOwnProperty()` or `Object.keys()` will not reveal it, while property access like `if (session.isAdmin)` will return `true`.\n\nAdditionally, replacing an object's prototype via `current['__proto__'] = {}` strips all inherited methods, potentially causing TypeError exceptions and denial of service.",
11+
"severity": [
12+
{
13+
"type": "CVSS_V3",
14+
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:L/I:L/A:L"
15+
}
16+
],
17+
"affected": [
18+
{
19+
"package": {
20+
"ecosystem": "npm",
21+
"name": "dottie"
22+
},
23+
"ranges": [
24+
{
25+
"type": "ECOSYSTEM",
26+
"events": [
27+
{
28+
"introduced": "2.0.4"
29+
},
30+
{
31+
"fixed": "2.0.7"
32+
}
33+
]
34+
}
35+
],
36+
"database_specific": {
37+
"last_known_affected_version_range": "<= 2.0.6"
38+
}
39+
}
40+
],
41+
"references": [
42+
{
43+
"type": "WEB",
44+
"url": "https://github.com/mickhansen/dottie.js/security/advisories/GHSA-r5mx-6wc6-7h9w"
45+
},
46+
{
47+
"type": "ADVISORY",
48+
"url": "https://nvd.nist.gov/vuln/detail/CVE-2026-27837"
49+
},
50+
{
51+
"type": "WEB",
52+
"url": "https://github.com/mickhansen/dottie.js/commit/7e8fa1345a4b46325f0eab8d7aeb1c4deaefdb14"
53+
},
54+
{
55+
"type": "ADVISORY",
56+
"url": "https://github.com/advisories/GHSA-4gxf-g5gf-22h4"
57+
},
58+
{
59+
"type": "PACKAGE",
60+
"url": "https://github.com/mickhansen/dottie.js"
61+
}
62+
],
63+
"database_specific": {
64+
"cwe_ids": [
65+
"CWE-1321"
66+
],
67+
"severity": "MODERATE",
68+
"github_reviewed": true,
69+
"github_reviewed_at": "2026-02-26T19:54:34Z",
70+
"nvd_published_at": "2026-02-26T01:16:24Z"
71+
}
72+
}

0 commit comments

Comments
 (0)