-
Notifications
You must be signed in to change notification settings - Fork 42
policy: Add missing validation for ExecProcessRequest input fields #337
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
policy: Add missing validation for ExecProcessRequest input fields #337
Conversation
samples: introduce incomplete_init category
Cherry-pick upstream PR kata-containers#9825: osbuilder: allow rootfs builds w/o git or version file deps
- Support for Mariner 3 builds using OS_VERSION variable - Improvements to IGVM build process and flow as described in README - Adoption of using only cloud-hypervisor-cvm on CBL-Mariner Signed-off-by: Manuel Huber <[email protected]>
tools: Improve igvm-builder and node-builder/azure-linux scripting
At the moment, we have circular dependencies between tardev-snapshotter.service and containerd.service. Specifically, containerd.service needs tardev-snapshotter.service to run any CC pods, while tardev-snapshotter.service needs containerd.service to download image layers. This dependency will be eliminated once we switch to using remote-snapshotter. Currently, tardev-snapshotter.service's binding to containerd.service gets delayed, and we won't be able to run any CC pods until the boot process is completed. It doesn't matter which service starts first. Based on the current logic, it makes more sense to use WantedBy=kubelet.service in tardev-snapshotter.service, as we won't be able to start any CC pods without kubelet. In the future, once tardev-snapshotter becomes a remote snapshotter again, it will make more sense to use WantedBy=containerd.service. Signed-off-by: Mitch Zhu <[email protected]>
tardev: update tardev-snapshotter.service
Use container image sources from ACR/MCR. Signed-off-by: Manuel Huber <[email protected]>
samples: reduce dependencies to docker hub
1. Use the new value of AllowRequestsFailingPolicy after setting up a new Policy. Before this change, the only way to enable AllowRequestsFailingPolicy was to change the default Policy file, built into the Guest rootfs image. 2. Ignore errors returned by regorus while evaluating Policy rules, if AllowRequestsFailingPolicy was enabled. For example, trying to evaluate the UpdateInterfaceRequest rules using a policy that didn't define any UpdateInterfaceRequest rules results in a "not found" error from regorus. Allow AllowRequestsFailingPolicy := true to bypass that error. 3. Add simple CI test for AllowRequestsFailingPolicy. These changes are restoring functionality that was broken recently by commmit 11f78ae. Signed-off-by: Dan Mihai <[email protected]>
agent: fix the AllowRequestsFailingPolicy functionality
This adds a public guide on how to install and test the new storage CSI drivers for AKS confidential pods. Signed-off-by: Aurélien Bombo <[email protected]>
docs: add guide to install new CSI drivers
Add support for cron jobs Signed-off-by: Saul Paredes <[email protected]>
Use up-to-date AzL references Signed-off-by: Manuel Huber <[email protected]>
samples: update image references
genpolicy: add support for cron jobs
Reject CreateContainerRequest field values that are not tested by
Kata CI and that might impact the confidentiality of CoCo Guests.
This change uses a "better safe than sorry" approach to untested
fields. It is very possible that in the future we'll encounter
reasonable use cases that will either:
- Show that some of these fields are benign and don't have to be
verified by Policy, or
- Show that Policy should verify legitimate values of these fields
These are the new CreateContainerRequest Policy rules:
count(input.shared_mounts) == 0
is_null(input.string_user)
i_oci := input.OCI
is_null(i_oci.Hooks)
is_null(i_oci.Linux.Seccomp)
is_null(i_oci.Solaris)
is_null(i_oci.Windows)
i_linux := i_oci.Linux
count(i_linux.GIDMappings) == 0
count(i_linux.MountLabel) == 0
count(i_linux.Resources.Devices) == 0
count(i_linux.RootfsPropagation) == 0
count(i_linux.UIDMappings) == 0
is_null(i_linux.IntelRdt)
is_null(i_linux.Resources.BlockIO)
is_null(i_linux.Resources.Network)
is_null(i_linux.Resources.Pids)
is_null(i_linux.Seccomp)
i_linux.Sysctl == {}
i_process := i_oci.Process
count(i_process.SelinuxLabel) == 0
count(i_process.User.Username) == 0
Signed-off-by: Dan Mihai <[email protected]>
Update annotations after reject untested CreateContainer field values Signed-off-by: Saul Paredes <[email protected]>
genpolicy: reject untested CreateContainer field values
This is a more stable tag. Previous tag got updated yesterday and requires to update the annotation. Signed-off-by: Saul Paredes <[email protected]>
samples: update ubuntu sample to use 18.04
Bump release version to 3.2.0-azl1.genpolicy1 Signed-off-by: Saul Paredes <[email protected]>
chore: bump release version
- Add script to install kata-containers(-cc)-tools bits - Minor improvements in README.md - Minor fix in package_install - Remove echo outputs in package_build Signed-off-by: Manuel Huber <[email protected]>
tools: Add package-tools-install functionality
- Allow setting SVN parameter for IGVM build scripting Signed-off-by: Manuel Huber <[email protected]>
tools: Enable setting IGVM SVN
This lets developers build and deploy Kata in debug mode without having to make manual edits to the build scripts. With BUILD_TYPE=debug (default is release): * The agent is built in debug mode. * The agent is built with a permissive policy (using allow-all.rego). * The shim debug config file is used, ie. we create the symlink configuration-clh-snp-debug.toml <- configuration-clh-snp.toml. For example, building and deploying Kata-CC in debug mode is now as simple as: make BUILD_TYPE=debug all-confpods deploy-confpods Also do note that make still lets you override the other variables even after setting BUILD_TYPE. For example, you can use the production shim config with BUILD_TYPE=debug: make BUILD_TYPE=debug SHIM_USE_DEBUG_CONFIG=no all-confpods deploy-confpods Signed-off-by: Aurélien Bombo <[email protected]>
node-builder: introduce BUILD_TYPE variable
Update samples that use image: "mcr.microsoft.com/azurelinux/base/nginx:1.25". Looks like this image tag was updated in mcr on 8/27/2024. Signed-off-by: Saul Paredes <[email protected]>
Update samples Signed-off-by: Cameron Baird <[email protected]>
…policy genpolicy: Introduce UpdateRoutesRequest, UpdateInterfaceRequest rules in genpolicy-settings
Add test cases for basic and legacy requests to create pause container Signed-off-by: Saul Paredes <[email protected]>
…er_tests policy: add tests for createContainerRequest
Validate sandbox name using a regex. If the YAML specifies metadata.name, use a regex that exact matches. If the YAML specifies metadata.generateName, use a regex that matches the prefix of the generated name. Signed-off-by: Saul Paredes <[email protected]>
We only use protocols in the tests, so it should be a dev dependency. Signed-off-by: Saul Paredes <[email protected]>
Update samples Signed-off-by: Saul Paredes <[email protected]>
…_name policy: validate pod generated name
Use "cargo build --release" when BUILD_TYPE was not specified, or when BUILD_TYPE=release. The default "cargo build" behavior is to build in debug mode. Signed-off-by: Dan Mihai <[email protected]>
|
I'd vote to squash these 3 commits into a single one and summarize the fields that are being validated |
|
todo: rebase against msft-main once #335 gets merged and add unit tests. If we pass all pipeline tests, I'd say we may move upstream without the unit tests here. |
f5369d0 to
fc3e210
Compare
Done! |
@Redent0r @Ankita13-code , please use a separate commit for updating the YAML files. |
src/tools/genpolicy/rules.rego
Outdated
| # TODO: should other ExecProcessRequest input data fields be validated as well? | ||
| ExecProcessRequest { | ||
| print("ExecProcessRequest 1: input =", input) | ||
| allow_exec_process_input(input) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If I understand correctly, we can remove the input function parameter, and just use input from the allow_exec_process_input rules.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@danmihai1, updated the function to remove this parameter
@danmihai1 we already have a separate commit for the samples. Saul was talking about some of the earlier commits that I had for validating each input field. |
4994b72 to
7d08ebe
Compare
This commit introduces validation for input fields in ExecProcessRequest to harden the security policy. The changes include: - update rules.rego to add null/empty field enforcements for String_user, SelinuxLabel and ApparmorProfile Signed-off-by: Ankita Pareek <[email protected]>
7d08ebe to
2d2d59a
Compare
Update policy samples with new rules for ExecProcessRequest in policy Signed-off-by: Ankita Pareek <[email protected]>
78c6500 to
189e903
Compare
|
Closing this PR since it was a placeholder and has been already merged upstream. |
Merge Checklist
upstream/missinglabel (orupstream/not-needed) has been set on the PR.Summary
This PR introduces validation for additional input fields in ExecProcessRequest. It follows an approach similar to CreateContainerRequest to enforce null values for
string_userand disallowselinuxLabelinExecProcessRequest.The field
ApparmorProfileis disallowed for bothExecProcessRequestandCreateContainerRequest.Test Methodology
cargo tests