From 7b4d7c1b254117437c62df0847efe8a046a7f02d Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Wed, 12 Aug 2026 10:16:42 +0900 Subject: [PATCH 1/2] test: reject shared-writable cloud review authority --- .../tests/cloud_review_directory_authority.rs | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src-tauri/tests/cloud_review_directory_authority.rs diff --git a/src-tauri/tests/cloud_review_directory_authority.rs b/src-tauri/tests/cloud_review_directory_authority.rs new file mode 100644 index 000000000..b46ab7719 --- /dev/null +++ b/src-tauri/tests/cloud_review_directory_authority.rs @@ -0,0 +1,19 @@ +#[cfg(unix)] +#[test] +fn shared_writable_cloud_review_directory_fails_closed() { + use disksage_lib::cloud_review::load_latest_decisions; + use std::os::unix::fs::PermissionsExt; + + let directory = tempfile::tempdir().expect("temporary review directory"); + let mut permissions = std::fs::metadata(directory.path()) + .expect("review directory metadata") + .permissions(); + permissions.set_mode(0o777); + std::fs::set_permissions(directory.path(), permissions) + .expect("make review directory shared-writable for regression"); + + let error = load_latest_decisions(directory.path()) + .expect_err("shared-writable review authority must fail closed"); + + assert_eq!(error, "cloud-review-directory-writable-by-others"); +} From 99dad9adf0e92d68a0a4f1b925622aeea7333fad Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Wed, 12 Aug 2026 10:23:46 +0900 Subject: [PATCH 2/2] security: reject shared-writable cloud review directory --- src-tauri/src/cloud_review.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src-tauri/src/cloud_review.rs b/src-tauri/src/cloud_review.rs index 349a75ee1..15ea9db7b 100644 --- a/src-tauri/src/cloud_review.rs +++ b/src-tauri/src/cloud_review.rs @@ -279,6 +279,13 @@ fn secure_decision_directory(path: &Path) -> Result<(), String> { if !metadata.is_dir() || metadata.file_type().is_symlink() { return Err("cloud-review-directory-unsafe".into()); } + #[cfg(unix)] + { + use std::os::unix::fs::PermissionsExt; + if metadata.permissions().mode() & 0o022 != 0 { + return Err("cloud-review-directory-writable-by-others".into()); + } + } Ok(()) }