Unlisted hostname request terminates policy boundary instead of returning a clean denial
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 45/100
- Issue 类型
- 缺陷
- 描述清晰度
- 描述清楚
- 活跃度
- 活跃
- 技术栈
- bash, docker, kubernetes, rust, yaml
调研方向
The issue is in the network policy enforcement layer of the sandbox runtime. Start by examining the boundary and supervisor code that handles DNS resolution and connection attempts for hostnames not listed in the policy. Look for the audit event generation and error handling paths. The reproduction steps provide a concrete test case; run the sandbox with the given policy and trace the failure. 'Done' means the request is denied with a clean error (like EACCES), a DENIED audit event is emitted, and the sandbox remains Ready.
由索引模型根据 Issue 内容生成。
描述
This was generated by AI during triage.
Summary
A network request to a hostname that is completely absent from the sandbox policy can terminate the policy boundary instead of returning a normal deny result. The OpenShell exec client then loses its relay before receiving the command's exit status, and the sandbox transitions out of Ready.
The equivalent negative test against an allowed hostname on a disallowed port fails cleanly with EACCES, emits a DENIED audit event, and leaves the sandbox Ready.
Environment
- Kubernetes on Linux/amd64
- RuntimeClass:
kata-qemu - Kata Containers: 4.2.0
- OpenShell development builds, including the sandbox-runtime change from PR #3574
The gateway and supervisor used mutable development tags and may have been from different builds. Version skew is a plausible contributing factor and should be checked during triage.
Policy
version: 1
filesystem_policy:
include_workdir: true
read_only: [/usr, /lib, /proc, /dev/urandom, /app, /etc, /var/log]
read_write: [/sandbox, /tmp, /dev/null]
landlock:
compatibility: best_effort
network_policies:
example_http:
name: example-http
endpoints:
- host: example.com
port: 80
protocol: tcp
binaries:
- { path: "/**" }
Reproduction
-
Create a sandbox with the policy above and wait until policy version 1 is loaded.
-
Confirm the allowed request succeeds:
bash -c 'exec 3<>/dev/tcp/example.com/80; printf "GET / HTTP/1.0\r\nHost: example.com\r\nConnection: close\r\n\r\n" >&3; IFS= read -r line <&3; printf "%s\n" "$line"'Observed:
HTTP/1.1 200 OK. -
Attempt a request to a hostname absent from the policy:
bash -c 'exec 3<>/dev/tcp/example.org/80'
Actual behavior
The exec client reports:
The service is currently unavailable: exec relay closed before the command reported an exit status
The supervisor reports a mediated-DNS failure followed by loss of its boundary channel:
mediated DNS accept failed; retrying
boundary terminated: boundary lost during wait: transport error
The supervisor terminates and the sandbox transitions from Ready to Stopped/DependenciesNotReady.
Expected behavior
- The request to
example.org:80is denied normally. - The caller receives a deterministic nonzero result such as
EACCES. - A
DENIEDaudit event records the destination and denial reason. - The policy boundary, supervisor, and sandbox remain healthy and Ready.
Control case
With the same policy, connecting to the allowed hostname on an unauthorized port behaves correctly:
/usr/bin/bash: connect: Permission denied
Audit output:
OCSF NET:OPEN [MED] DENIED /usr/bin/bash(0) -> 198.18.0.0:81 [reason:transparent_tcp_mapping_denied]
The sandbox remains Ready afterward.
Suggested validation
- Add an end-to-end test for DNS resolution/connection to a hostname absent from all network policy endpoints.
- Assert that the request is denied and audited without terminating the boundary or supervisor.
- Run the test with matching component builds and, separately, with a supported mixed-version configuration if version skew is expected to work.
- 主要语言
- Rust
- 星标
- 8.7k
- 派生
- 1.3k
- 平均合并
- 2 天 6 小时
- 30 天内合并 PR
- 297
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
NVIDIA/OpenShell 的其他 Issue
-
area:docs
难度 1/5 1 小时以内 新手友好度 88/100
-
state:triage-needed
难度 2/5 1-3 小时 新手友好度 82/100
-
area:cli state:validated
难度 2/5 1-3 小时 新手友好度 72/100
-
state:triage-needed
难度 1/5 1 小时以内 新手友好度 90/100
-
area:build spike state:review-ready state:stale
难度 2/5 半天 新手友好度 68/100
相似的 Issue
-
bug github_actions
难度 2/5 1-3 小时 新手友好度 75/100
registrystack/registry-stack#1393 ·
-
难度 2/5 1-3 小时 新手友好度 75/100
longbridge/gpui-kit#3223 ·
-
bug engine
难度 2/5 1-3 小时 新手友好度 65/100
rocky-data/rocky#2181 ·
-
难度 2/5 1-3 小时 新手友好度 70/100
oasisprotocol/oasis-sdk#2523 ·
-
bot:ai-assisted component:indexer QA-roadmap status:untriaged
难度 2/5 1-3 小时 新手友好度 75/100
midnightntwrk/midnight-indexer#1557 ·