Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[GHSA-x9qq-236j-gj97] Canonical LXD documentation improvement to make clear restricted.devices.disk=allow without restricted.devices.disk.paths also allows shift=true #5238

Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,12 +1,16 @@
{
"schema_version": "1.4.0",
"id": "GHSA-x9qq-236j-gj97",
"modified": "2024-03-05T15:26:23Z",
"modified": "2024-03-05T15:26:24Z",
"published": "2023-12-05T23:32:58Z",
"aliases": [],
"aliases": [

],
"summary": "Canonical LXD documentation improvement to make clear restricted.devices.disk=allow without restricted.devices.disk.paths also allows shift=true",
"details": "### Summary\n\nIf a user has restricted access to a project that is configured with `restricted=true`, they can gain root access on the system by creating a disk device with `shift=true` and creating a setuid root executable. This is possible because the `shift` property is not restricted unless `restricted.devices.disk.paths` is set.\n\n### Details\n\nThe following patch shows the offending code with a possible fix:\n```patch\n--- a/lxd/device/disk.go\n+++ b/lxd/device/disk.go\n@@ -429,17 +429,19 @@ func (d *disk) validateEnvironmentSourcePath() error {\n if instProject.Name != api.ProjectDefaultName {\n // If restricted disk paths are in force, then check the disk's source is allowed, and record the\n // allowed parent path for later user during device start up sequence.\n- if shared.IsTrue(instProject.Config[\"restricted\"]) && instProject.Config[\"restricted.devices.disk.paths\"] != \"\" {\n- allowed, restrictedParentSourcePath := project.CheckRestrictedDevicesDiskPaths(instProject.Config, d.config[\"source\"])\n- if !allowed {\n- return fmt.Errorf(\"Disk source path %q not allowed by project for disk %q\", d.config[\"source\"], d.name)\n+ if shared.IsTrue(instProject.Config[\"restricted\"]) {\n+ if instProject.Config[\"restricted.devices.disk.paths\"] != \"\" {\n+ allowed, restrictedParentSourcePath := project.CheckRestrictedDevicesDiskPaths(instProject.Config, d.config[\"source\"])\n+ if !allowed {\n+ return fmt.Errorf(\"Disk source path %q not allowed by project for disk %q\", d.config[\"source\"], d.name)\n+ }\n+\n+ d.restrictedParentSourcePath = shared.HostPath(restrictedParentSourcePath)\n }\n\n if shared.IsTrue(d.config[\"shift\"]) {\n return fmt.Errorf(`The \"shift\" property cannot be used with a restricted source path`)\n }\n-\n- d.restrictedParentSourcePath = shared.HostPath(restrictedParentSourcePath)\n }\n }\n```\n\n### PoC\n\n```bash\n$ lxc project create restricted -c restricted=true -c restricted.devices.disk=allow\n$ lxc project switch restricted\n$ lxc profile device add default root disk path=/ pool=default\n$ lxc init ubuntu:22.04 c1\n$ lxc config device add c1 d1 disk source=/ path=/mnt shift=true\n$ lxc start c1 # no error\n\n$ lxc project set restricted restricted.devices.disk.paths=/ # explicitly allow mounting /\n$ lxc restart c1\nError: Failed to start device \"d1\": The \"shift\" property cannot be used with a restricted source path\n```\n\nCreated https://github.com/canonical/lxd/issues/12606 to improve the documentation as per https://github.com/canonical/lxd/security/advisories/GHSA-x9qq-236j-gj97#advisory-comment-91918",
"severity": [],
"severity": [

],
"affected": [
{
"package": {
Expand All @@ -18,16 +22,16 @@
"type": "ECOSYSTEM",
"events": [
{
"introduced": "5.19"
"introduced": "5.19.0"
},
{
"fixed": "5.20"
"fixed": "5.20.0"
}
]
}
],
"versions": [
"5.19"
"5.19.0"
]
}
],
Expand All @@ -50,7 +54,9 @@
}
],
"database_specific": {
"cwe_ids": [],
"cwe_ids": [

],
"severity": "LOW",
"github_reviewed": true,
"github_reviewed_at": "2023-12-05T23:32:58Z",
Expand Down
Loading