Skip to content

Harden cloud-hypervisor privileged runtime path and add explicit human-review warning - #52757

Merged
pelikhan merged 6 commits into
mainfrom
copilot/uk-ai-resilience-security-review
Aug 15, 2026
Merged

Harden cloud-hypervisor privileged runtime path and add explicit human-review warning#52757
pelikhan merged 6 commits into
mainfrom
copilot/uk-ai-resilience-security-review

Conversation

Copilot AI commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

This change addresses the security review request for the new preview sandbox.agent.runtime: cloud-hypervisor path, where privileged KVM access and newer MCP-gateway topology increase blast radius if misconfigured. It tightens runtime guardrails and adds an explicit compiler-time signal for mandatory human security review.

  • KVM access hardening (privileged path)

    • Strengthened host checks to require /dev/kvm as a character device.
    • Added runner UID sanity check (numeric) before ACL mutation.
    • Upgraded ACL verification from implicit access checks to explicit scoped-entry validation for the runner user.
  • Bundle extraction and artifact integrity hardening

    • Added pre-extraction archive structure checks to reject unsafe entries (path traversal, absolute paths, symlink/hardlink entries).
    • Extracts with ownership/permission-preserving behavior disabled.
    • Added extracted-file validation to ensure resolved artifacts are regular, non-symlink files within the expected extraction root.
  • Governance signal: human review trigger

    • Added a compiler warning when sandbox.agent.runtime: cloud-hypervisor is selected, instructing explicit human security review before merge/rollout.
  • Targeted test updates

    • Updated cloud-hypervisor shell-script content tests to assert new KVM and archive hardening checks.
    • Added a focused validator test for the new cloud-hypervisor human-review warning.
# New explicit ACL verification in KVM setup path
acl_output="$(getfacl -cp /dev/kvm || true)"
grep -Eq "^user:${runner_uid}:rw-?$" <<<"${acl_output}" || exit 1

branch refresh requested from run https://github.com/github/gh-aw/actions/runs/31886878354> Generated by 👨‍🍳 PR Sous Chef · gpt54 · 11.7 AIC · ⌖ 5.9 AIC · ⊞ 8.7K ·

Comment /souschef to run again

Copilot AI and others added 2 commits August 14, 2026 16:38
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com>
Copilot AI changed the title [WIP] Review security for Cloud Hypervisor sandbox runtime Harden cloud-hypervisor privileged runtime path and add explicit human-review warning Aug 14, 2026
Copilot AI requested a review from pelikhan August 14, 2026 16:43
@github-actions

This comment has been minimized.

@pelikhan

Copy link
Copy Markdown
Collaborator

@lpcox review

@github-actions

Copy link
Copy Markdown
Contributor

PR Triage

  • Category: bug
  • Risk: high
  • Priority: high (score: 62/100)
  • Score breakdown: impact 35/50, urgency 15/30, quality 12/20
  • Recommended action: fast_track

Automated triage by PR Triage Agent.

Generated by 🔧 PR Triage Agent · auto · 64.3 AIC · ⌖ 2.94 AIC · ⊞ 7.8K ·

@github-actions

This comment has been minimized.

@github-actions

Copy link
Copy Markdown
Contributor

PR Triage

Category: bug  |  Risk: high  |  Score: 71/100

Score breakdown

  • Impact: 40/50
  • Urgency: 25/30
  • Quality: 6/20

Recommended action: fast_track

Draft but touches privileged runtime path — security-sensitive; flagged for expedited human review despite draft state, no reviews yet.

Generated by 🔧 PR Triage Agent · auto · 68.2 AIC · ⌖ 10.7 AIC · ⊞ 7.8K ·

@github-actions

Copy link
Copy Markdown
Contributor

Great work hardening the cloud-hypervisor privileged runtime path! 🔒

This PR addresses the critical security findings from the UK AI Operational Resilience governance review (#52748) with focused, targeted hardening:

KVM access scope tightened — enhanced host checks and explicit ACL verification for the runner user
Bundle extraction hardened — path traversal checks and artifact validation added
Governance signal in place — compiler warning ensures explicit human review before merge
Test coverage included — targeted validator and shell-script tests validate the new checks

The PR is well-focused on one security objective, includes tests, and the description clearly maps changes to risk mitigation. This is ready for review by security and core team maintainers.

Generated by ✅ Contribution Check · auto · 53.6 AIC · ⌖ 3.28 AIC · ⊞ 8.8K ·

@github-actions

Copy link
Copy Markdown
Contributor

PR Triage

Category: bug/security | Risk: high | Score: 80/100

  • Impact: 40/50 (tightens guardrails for privileged cloud-hypervisor KVM runtime — high blast radius if misconfigured)
  • Urgency: 25/30 (security review request, no CI data available yet)
  • Quality: 15/20 (no reviews yet, CI status unknown)

Recommended action: fast_track
Security-hardening change for a privileged sandbox runtime path. Needs maintainer review before merge; batched with reliability-fixes cluster.

Generated by 🔧 PR Triage Agent · auto · 46.6 AIC · ⌖ 2.63 AIC · ⊞ 8.1K ·

@github-actions

Copy link
Copy Markdown
Contributor

PR Triage

  • Category: bug
  • Risk: high
  • Priority: high
  • Score: 80/100
  • Recommended action: fast_track
  • Batch: reliability-fixes

Security-hardening for privileged cloud-hypervisor sandbox runtime path. Draft PR touching critical-path security code — needs human security review before merge.

Automated triage — see [PR Triage Report] for full context.

Generated by 🔧 PR Triage Agent · auto · 62.5 AIC · ⌖ 2.53 AIC · ⊞ 8.1K ·

@pelikhan
pelikhan marked this pull request as ready for review August 15, 2026 12:59
Copilot AI balanced review requested due to automatic review settings August 15, 2026 12:59
@github-actions

github-actions Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

🧠 Matt Pocock Skills Reviewer has completed the skills-based review. ✅

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer

@github-actions

github-actions Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

PR Code Quality Reviewer completed the code quality review.

🔎 Code quality review by PR Code Quality Reviewer

@github-actions

github-actions Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Design Decision Gate 🏗️ completed the design decision gate check.

No ADR enforcement needed: PR #52757 does not have the 'implementation' label and has only 44 new lines of code in business logic directories (threshold: 100).

🏗️ ADR gate enforced by Design Decision Gate 🏗️

@github-actions

github-actions Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Ponytail Reviewer completed successfully!

Generated by Ponytail Reviewer for #52757

@github-actions

github-actions Bot commented Aug 15, 2026

Copy link
Copy Markdown
Contributor

Test Quality Sentinel completed test quality analysis.

🧪 Test quality analysis by Test Quality Sentinel

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Request changes

The hardening direction is good, but two of the new verification gates are fragile enough to break valid runners or leave the containment check weaker than advertised.

Blocking themes
  • The /dev/kvm ACL verifier assumes a single getfacl output shape and can reject valid ACLs when an effective-permissions suffix is present.
  • The extracted-file containment check validates the spelled path, not the canonical path, so it does not independently prove the resolved artifact still lives under the extraction root.
  • I also attempted to use the requested grumpy-coder sub-agent, but the executable is not available in this environment, so its output was discarded.

🔎 Code quality review by PR Code Quality Reviewer · gpt54 · 5.21 AIC · ⌖ 5.34 AIC · ⊞ 6.7K
Comment /review to run again

echo "::error::failed to read /dev/kvm ACLs for verification."
exit 1
fi
if ! grep -Eq "^user:${runner_uid}:rw-?$" <<<"${acl_output}"; then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This ACL verification is too brittle: getfacl commonly emits user:UID:rw- with a trailing \t#effective:rw- comment when a mask is present, so your anchored regex will reject a valid ACL and fail the setup on otherwise healthy runners.

💡 Why this blocks the change

setfacl -m u:${runner_uid}:rw /dev/kvm can create an entry that still prints an #effective: suffix depending on the existing ACL mask. In that case grep -Eq "^user:${runner_uid}:rw-?$" does not match, even though the runner really does have the intended access. That turns a hardening check into a false-negative gate on some hosts.

A safer verification is to tolerate the optional effective-permissions annotation, for example:

if ! grep -Eq "^user:${runner_uid}:rw-?(\t#effective:rw-?)?$" <<<"${acl_output}"; then
  echo "::error::failed to verify scoped ACL entry for the runner user on /dev/kvm."
  exit 1
fi

or, even better, query the permissions with a tool/output format that is not sensitive to cosmetic formatting differences.

echo "::error::invalid extracted cloud-hypervisor bundle file: ${file}"
exit 1
fi
case "${file}" in

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This path check can be bypassed by a tarball that stores the payload under a symlinked directory: resolve_path returns realpath, but validate_extracted_file only string-prefixes against ${extract_dir}, so a file extracted through bundle/link -> /somewhere still passes as bundle/link/file even though the resolved file lives outside the extraction root.

💡 Why this matters

The new preflight blocks link entries from tar -tvzf, but the post-extraction guard should still validate the resolved canonical path rather than the original spelling. Right now the check is:

case "${file}" in
  "${extract_dir}"/*) ;;

If file is /tmp/.../bundle/link/cloud-hypervisor and link points elsewhere, the prefix test succeeds while realpath "$file" is outside ${extract_dir}. That leaves the safety property dependent on the tar listing parser never missing a link variant.

Please compare canonicalized paths instead, e.g. realpath "$file" must start with $(realpath "$extract_dir")/, so the containment check stays correct even if a symlink slips through or the extraction directory already contains one.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Hardens the preview Cloud Hypervisor runtime and introduces a compiler warning requiring human security review.

Changes:

  • Adds KVM device and ACL validation.
  • Adds archive and extracted-file safety checks.
  • Adds compiler warning and targeted tests.
Show a summary per file
File Description
pkg/workflow/compiler_validators.go Emits the security-review warning.
pkg/workflow/compiler_validators_test.go Tests warning output and count.
pkg/workflow/cloud_hypervisor_test.go Updates shell-content assertions.
actions/setup/sh/cloud_hypervisor_setup_bundle.sh Hardens archive extraction.
actions/setup/sh/cloud_hypervisor_kvm_access.sh Strengthens KVM ACL checks.
actions/setup/sh/cloud_hypervisor_host_preflight.sh Requires KVM to be a character device.

Review details

  • Files reviewed: 6/6 changed files
  • Comments generated: 2
  • Review effort level: Balanced

exit 1
fi

acl_output="$(getfacl -cp /dev/kvm || true)"
Comment thread actions/setup/sh/cloud_hypervisor_setup_bundle.sh Outdated

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

net: -2 lines possible.

Generated by ✂️ Ponytail Reviewer for #52757 · auto · 21.2 AIC · ⌖ 3.22 AIC · ⊞ 7.2K
Comment /ponytail to run again

exit 1
fi
archive_table="$(tar -tvzf "${archive_path}")"
if awk '$1 ~ /^[lh]/ { found=1; exit 0 } END { exit (found ? 0 : 1) }' <<<"${archive_table}"; then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L47: shrink: awk one-liner to detect symlink/hardlink tar entries. grep -Eq '^[lh]' on the same table, 1 line.

echo "::error::invalid extracted cloud-hypervisor bundle file: ${file}"
exit 1
fi
case "${file}" in

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

L120-126: shrink: case/esac to check directory prefix. [[ "${file}" != "${extract_dir}"/* ]] && { echo ...; exit 1; }, no esac needed.

@github-actions github-actions Bot mentioned this pull request Aug 15, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Test Quality Sentinel Report 🧪

Summary

Metric Result
Score 60/100 ⚠️ Acceptable
New Tests 1 (behavioral)
Modified Tests 0
Design Tests 1/1 (100%)
Edge Case Coverage 0/1 (0%)
Hard Violations None

Test Functions Analyzed

New Test: TestEmitGeneralToolWarningsCloudHypervisorReviewTrigger (compiler_validators_test.go)
Aspect Assessment
Design Invariant behavioral_contract
Value if Deleted high_value
Contract Type design_test
Quality ✅ Solid

What it tests:
Validates that cloud-hypervisor runtime triggers a security warning during workflow compilation. The test captures stderr and verifies two critical warning messages are emitted, plus checks the warning counter is incremented correctly.

Assertions: 5 total

  • require.NoError for I/O operations
  • assert.Contains for output validation
  • assert.Equal for warning count

Strength: Properly tests a behavioral contract (warning emission) with appropriate setup/cleanup and multiple assertion points validating the complete warning message.

Note: No edge cases tested (e.g., when runtime is NOT cloud-hypervisor). Test inflation ratio is 5.8:1 (35 added lines vs 6 production lines), but justified given the complexity of stderr capture and cleanup.

Test Inflation Analysis

File Type Lines Added Ratio
compiler_validators_test.go test 35 5.8:1
compiler_validators.go prod 6

⚠️ High inflation, but acceptable. Stderr capture and cleanup infrastructure requires multiple lines for a single warning test.

Violations

✅ None detected. All tests include:

  • Proper Go build tag compliance
  • No forbidden mock libraries (gomock, testify/mock)
  • Appropriate test setup and cleanup patterns
  • Meaningful assertion messages

Recommendation

APPROVE — Test validates critical security requirement (human-review warning for privileged cloud-hypervisor path). Despite edge-case coverage gaps and high test inflation, the behavioral contract is clear and the design invariant is important.

Passing threshold: Design tests 100% (✓), Implementation tests 0% (✓ under 30%), no violations (✓)

🧪 Test quality analysis by Test Quality Sentinel · haiku45 · 17.9 AIC · ⌖ 3.57 AIC · ⊞ 7.8K ·
Comment /review to run again

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Test Quality Sentinel: 60/100. Behavioral design test validates critical security requirement (human-review warning for privileged cloud-hypervisor path). 0% implementation tests (threshold: 30%). No violations detected.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Review Summary

This PR adds solid layered security hardening across the cloud-hypervisor privileged runtime path. The changes are well-targeted and the test coverage is appropriate.

Strengths:

  • Character-device guard (test -c /dev/kvm) prevents symlink/bind-mount substitution attacks.
  • UID numeric validation before setfacl prevents injection via a crafted $USER/id output.
  • ACL post-verification with getfacl -cp and an exact regex closes the "grant succeeded but had no effect" gap.
  • Archive path traversal scan and symlink/hardlink rejection before extraction are solid supply-chain guards.
  • tar --no-same-owner --no-same-permissions limits privilege-escalation via crafted archive metadata.
  • validate_extracted_file defends against TOCTOU and out-of-tree path injection post-extraction.
  • Compiler warning for cloud-hypervisor runtime ensures human review before merge/rollout.

One blocking issue: extract_dir is not canonicalized before the path-containment case glob, while file paths are canonicalized via realpath. See inline comment on line 121.

🧵 Reviewed using Impeccable skills by Impeccable Skills Reviewer · sonnet46 · 38.5 AIC · ⌖ 7.17 AIC · ⊞ 5.6K

exit 1
fi
case "${file}" in
"${extract_dir}"/*) ;;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The path-containment check "${extract_dir}"/* compares a raw (un-canonicalized) extract_dir against realpath-canonicalized file paths. If bundle_root contains symlinks or .. segments, the glob pattern won't match the canonicalized path, and the containment guard can be bypassed.

Suggest canonicalizing extract_dir at declaration time:

extract_dir="$(realpath -m "${bundle_root}/bundle")"

@copilot please address this.

@github-actions github-actions Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Skills-Based Review 🧠

Applied /diagnosing-bugs and /codebase-design — requesting changes on correctness and security gaps.

📋 Key Themes & Highlights

Issues Found

  • Double-close pipe race in the new TestEmitGeneralToolWarningsCloudHypervisorReviewTrigger test — w is closed by both t.Cleanup and an explicit call, inconsistent with the fix applied to the adjacent test in this same diff.
  • Path-traversal bypass in validate_extracted_file — the case "${extract_dir}"/* pattern does not canonicalize the path and can be bypassed by entries like "${extract_dir}/../outside". Use realpath to compare resolved paths.
  • Inverted awk exit-code logic for symlink detection is non-obvious, has a double-negation, and would silently pass an empty archive_table. A grep -Eq '^[lh]' replacement is clearer and safer.
  • ACL regex rw-? accepts rw — the optional dash is harmless today but imprecise; rw- exactly matches the expected three-character mask.
  • exit 1 inside validate_extracted_file — worth a comment if intentional, or convert to return 1 for reusability.

Positive Highlights

  • ✅ Defense-in-depth: pre-extraction + post-extraction validation are both present
  • --no-same-owner --no-same-permissions on tar extraction is correct and important
  • ✅ Compiler-time human-review warning is a good governance signal for a high-blast-radius preview feature
  • ✅ Numeric UID sanity check prevents ACL injection via unexpected id -u output

🧠 Reviewed using Matt Pocock's skills by Matt Pocock Skills Reviewer · sonnet46 · 50.9 AIC · ⌖ 8.91 AIC · ⊞ 7.3K
Comment /matt to run again


compiler.emitGeneralToolWarnings(workflowData, "test.md")

require.NoError(t, w.Close())

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/diagnosing-bugs] w is closed twice — once in t.Cleanup (line 236) and again here — which can race or double-close the pipe's write end, causing an unpredictable test panic.

💡 Fix

Remove the explicit w.Close() at line 242 and let t.Cleanup own the pipe lifecycle. Read the pipe output inside t.Cleanup after closing w:

var buf bytes.Buffer
t.Cleanup(func() {
    _ = w.Close()
    _, _ = io.Copy(&buf, r)
    _ = r.Close()
    os.Stderr = oldStderr
})
compiler.emitGeneralToolWarnings(workflowData, "test.md")
// assertions moved here, but buf must be populated in Cleanup above

This mirrors the pattern the adjacent test already uses after its own cleanup fix in this diff.

@copilot please address this.

exit 1
fi
case "${file}" in
"${extract_dir}"/*) ;;

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/diagnosing-bugs] The case pattern "${extract_dir}"/* does not reject paths like "${extract_dir}/../outside" — a resolved path can still escape the extraction root if extract_dir itself contains .. components or if the archive entry is constructed to match the prefix literally.

💡 Fix

Use realpath --relative-base or compare canonicalized paths to rule out traversal:

validate_extracted_file() {
  local file="$1"
  if [[ -z "${file}" || ! -f "${file}" || -L "${file}" ]]; then
    echo "::error::invalid extracted cloud-hypervisor bundle file: ${file}"
    exit 1
  fi
  local real_file real_extract_dir
  real_file="$(realpath "${file}")"
  real_extract_dir="$(realpath "${extract_dir}")"
  if [[ "${real_file}" != "${real_extract_dir}"/* ]]; then
    echo "::error::extracted bundle file is outside expected directory: ${file}"
    exit 1
  fi
}

This eliminates any .. bypass through symlink resolution or path component manipulation.

@copilot please address this.


validate_extracted_file() {
local file="$1"
if [[ -z "${file}" || ! -f "${file}" || -L "${file}" ]]; then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/codebase-design] exit 1 inside validate_extracted_file terminates the entire shell script directly rather than returning a non-zero status to the caller. This is intentional here, but it prevents callers from wrapping the function in conditional logic and makes the function harder to unit-test in isolation.

💡 Suggestion

If the exit-on-failure behaviour is deliberate (consistent with the surrounding script style), add a brief comment explaining that. If reusability is desired, replace exit 1 with return 1 and let callers do validate_extracted_file "$x" || exit 1.

@copilot please address this.

exit 1
fi
archive_table="$(tar -tvzf "${archive_path}")"
if awk '$1 ~ /^[lh]/ { found=1; exit 0 } END { exit (found ? 0 : 1) }' <<<"${archive_table}"; then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/diagnosing-bugs] The awk symlink/hardlink check inverts its exit code in a non-obvious way (exit 0 when a link is found, exit 1 when none are found), which the wrapping if then inverts again. This double-negation is easy to misread and may silently pass a malicious archive if awk is not available or the archive_table variable is empty.

💡 Clearer alternative
if echo "${archive_table}" | awk '$1 ~ /^[lh]/ { found=1 } END { exit (found ? 1 : 0) }'; then
  : # no links found — OK
else
  echo "::error::cloud-hypervisor bundle must not include symbolic or hard links"
  exit 1
fi

Or more idiomatically:

if echo "${archive_table}" | grep -Eq '^[lh]'; then
  echo "::error::cloud-hypervisor bundle must not include symbolic or hard links"
  exit 1
fi

Also add a guard for empty archive_table before this block.

@copilot please address this.

echo "::error::failed to read /dev/kvm ACLs for verification."
exit 1
fi
if ! grep -Eq "^user:${runner_uid}:rw-?$" <<<"${acl_output}"; then

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[/diagnosing-bugs] The ACL grep pattern ^user:${runner_uid}:rw-?$ uses an unquoted regex inside [[ ]] which is fine, but the trailing -? makes the dash optional — it would match both rw and rw-. GNU getfacl -cp always emits the three-character mask (rw-), so the optional - is benign. However, a simpler and more explicit pattern would be ^user:${runner_uid}:rw-$ to exactly match the expected ACL format and fail loudly if the format changes.

💡 Suggestion
if ! grep -Eq "^user:${runner_uid}:rw-$" <<<"${acl_output}"; then

This documents the expected ACL mask precisely and would surface a regression if getfacl output format changes.

@copilot please address this.

@gh-aw-bot

Copy link
Copy Markdown
Collaborator

@copilot Quick triage for maintainer-ready follow-up:

Please refresh the branch if needed, address the remaining maintainer-facing follow-up below, and run the pr-finisher skill before handing this PR back to maintainers.

Outstanding review items (newest first):

Failed checks from the compact candidate set:

  • None listed.

Branch update was requested automatically for this run when GitHub allows it.
Run context: https://github.com/github/gh-aw/actions/runs/31886878354

Generated by 👨‍🍳 PR Sous Chef · gpt54 · 11.7 AIC · ⌖ 5.9 AIC · ⊞ 8.7K ·
Comment /souschef to run again

Copilot AI and others added 2 commits August 15, 2026 13:37
Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>
…nce-security-review

Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com>

Copilot AI commented Aug 15, 2026

Copy link
Copy Markdown
Contributor Author

@copilot Quick triage for maintainer-ready follow-up:

Please refresh the branch if needed, address the remaining maintainer-facing follow-up below, and run the pr-finisher skill before handing this...

Addressed in f35c15c42e: canonicalized extracted-file containment, simplified and hardened archive link/path checks, normalized numeric ACL output with an exact rw- match, and removed the pipe double-close. The branch is refreshed from main; focused tests, the full short Go suite, and final repository validation pass. The pr-finisher workflow was run.

Copilot AI requested a review from gh-aw-bot August 15, 2026 13:49
@pelikhan
pelikhan merged commit ade8692 into main Aug 15, 2026
2 checks passed
@pelikhan
pelikhan deleted the copilot/uk-ai-resilience-security-review branch August 15, 2026 13:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[uk-ai-resilience] [UK AI Governance] Security review of new Cloud Hypervisor sandbox runtime (privileged KVM path)

4 participants