@landstrip/landstrip 0.14.6 → 0.14.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/README.md +32 -11
  2. package/package.json +5 -5
package/README.md CHANGED
@@ -23,25 +23,30 @@ binary package.
23
23
 
24
24
  | Area | macOS | Linux | Windows |
25
25
  | ------------ | ------------------------ | ---------------------------- | ------------------------------- |
26
- | Policy | path based rules | file based rules | access control list (ACL) |
27
- | Timing | dynamic subset of paths | file based static ruleset | persistent ACLs |
26
+ | Policy | path based rules | file based rules | per-run AppContainer ACLs |
27
+ | Timing | dynamic subset of paths | file based static ruleset | per-run ACL grants |
28
28
  | TCP | localhost proxy ports | loopback proxy ports | allow all or deny all |
29
29
  | Unix sockets | allowlist | allowlist via seccomp broker | allow all or deny all |
30
30
 
31
31
  ### Windows AppContainer
32
32
 
33
33
  Win32 API provides AppContainer for application level sandboxing. The platform
34
- grants the generated AppContainer SID access to the lowered read and write
35
- roots, so Windows policies must use explicit read allowlists.
34
+ creates a per-run LPAC AppContainer profile, grants its SID access to the lowered
35
+ read and write roots, and removes those grants after the sandboxed process tree
36
+ exits. Windows policies must use explicit read allowlists.
36
37
 
37
- With the current knowledge, the network access is gated by the AppContainer
38
- capabilities. That said, this might also be due my limited knowledge of Win32
39
- API.
38
+ Landstrip assigns the sandboxed process to a Job Object with
39
+ `KILL_ON_JOB_CLOSE`, so child processes are kept in the sandbox process tree and
40
+ are terminated when the launcher exits.
40
41
 
41
- `allowNetwork` grants the internet and private-network capabilities, while the
42
- default container holds none and denies all network access. Fine-grained TCP and
43
- Unix socket policies are rejected because the container cannot enforce them in
44
- the process granularity.
42
+ `allowNetwork` grants the internet and private-network AppContainer
43
+ capabilities, while the default container holds none and denies all network
44
+ access.
45
+
46
+ AppContainer capabilities are coarse: fine-grained TCP policies by host or port
47
+ require Windows Filtering Platform rules keyed by the AppContainer SID. I.e.,
48
+ this would require elevated privileges, which is not sustainable for a agent
49
+ sandbox runtime, which should rely on unprivileged tools and techniques.
45
50
 
46
51
  ## Policy Format
47
52
 
@@ -67,6 +72,22 @@ network:
67
72
  allowNetwork: true
68
73
  ```
69
74
 
75
+ Windows-only hardening options live under `windows`. They are optional because
76
+ some tools, shells, JITs, and GUI helpers may rely on the blocked behaviors:
77
+
78
+ ```json
79
+ {
80
+ "windows": {
81
+ "disableWin32k": true,
82
+ "disableExtensionPoints": true,
83
+ "strictHandleChecks": true,
84
+ "imageLoadNoRemote": true,
85
+ "imageLoadNoLowLabel": true,
86
+ "imageLoadPreferSystem32": true
87
+ }
88
+ }
89
+ ```
90
+
70
91
  ## Network Policy
71
92
 
72
93
  Sandbox mode denies direct network access by default. Proxy ports, local binding,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@landstrip/landstrip",
3
- "version": "0.14.6",
3
+ "version": "0.14.8",
4
4
  "description": "Sandbox runner using Landlock, Seatbelt, and AppContainer",
5
5
  "license": "Apache-2.0 AND LGPL-2.1-or-later",
6
6
  "homepage": "https://github.com/landstrip/landstrip#readme",
@@ -24,10 +24,10 @@
24
24
  "LICENSE-LGPL-2.1"
25
25
  ],
26
26
  "optionalDependencies": {
27
- "@landstrip/landstrip-darwin-arm64": "0.14.6",
28
- "@landstrip/landstrip-darwin-x64": "0.14.6",
29
- "@landstrip/landstrip-linux-x64": "0.14.6",
30
- "@landstrip/landstrip-win32-x64": "0.14.6"
27
+ "@landstrip/landstrip-darwin-arm64": "0.14.8",
28
+ "@landstrip/landstrip-darwin-x64": "0.14.8",
29
+ "@landstrip/landstrip-linux-x64": "0.14.8",
30
+ "@landstrip/landstrip-win32-x64": "0.14.8"
31
31
  },
32
32
  "publishConfig": {
33
33
  "access": "public"