security/self-assessment.md
November 2024
| Assessment Stage | Incomplete |
| Software | https://github.com/crossplane/crossplane |
| Security Provider | No |
| Languages | Go |
| SBOM | A SBOM for the Crossplane v1.18.0 release has been generated manually at https://gist.github.com/jbw976/faddf69437451e1dd289545749738771. |
| Doc | URL |
|---|---|
| Security Audit by Ada Logics, 2023 | https://github.com/crossplane/crossplane/blob/main/security/ADA-security-audit-23.pdf |
| Fuzzing Audit by Ada Logics, 2022 | https://github.com/crossplane/crossplane/blob/main/security/ADA-fuzzing-audit-22.pdf |
| Security policy and vulnerability reporting process | https://github.com/crossplane/crossplane/blob/main/SECURITY.md |
| Security Advisories | https://github.com/crossplane/crossplane/security/advisories |
| Graduation Issue | https://github.com/cncf/toc/issues/1397 |
Crossplane extends the Kubernetes API to enable platform teams to manage a wide variety of infrastructure resources from multiple vendors. These resources can be composed into higher level self-service APIs for application teams to consume. Crossplane effectively enables platform teams to quickly put together their own opinionated platform declaratively without having to write any code, and offer it to their application teams as a self-service Kubernetes-style declarative API.
Crossplane is a popular tool across the Cloud Native landscape for Platform Engineers to build Internal Developer Platforms (IDPs) and manage infrastructure resources. The core of Crossplane's runtime and composition machinery runs as a set of controllers in the main Crossplane pod. These controllers reconcile the API objects of the Crossplane resource model, facilitating Platform Engineers to compose infrastructure resources from multiple vendors together and expose them as higher level platform APIs for application teams to consume.
Crossplane has a rich extension model that enables its users to build platforms to manage basically any resources that expose an API. The direct reconciliation of these infrastructure resources with external entities such as cloud providers occurs within Providers, one of the main extension points of Crossplane. Within the vibrant Provider ecosystem, there exist Providers for AWS, GCP, Azure and a plethora of other environments. Each of these Providers runs as an isolated pod, separate from the main Crossplane pod.
Crossplane also has a package manager to install and manage these extensions within
the control plane. These packages are distributed as generic OCI images, which
contain YAML content informing the Crossplane package manager how to alter the
state of a cluster by installing objects that configure new resource types, and then
starting controllers to reconcile them. Details about the contents of these
packages can be found in the xpkg
Specification.
The core Crossplane and composition machinery, the Crossplane runtime, and its package manager are all in scope for this security assessment. Extensions to Crossplane, such as Providers and Functions are considered out of scope.
The main goal of Crossplane is to provision and manage infrastructure resources on behalf of a centralized platform team, through the exposure and usage of simplified abstraction APIs to the application developer teams that the platform team services.
Crossplane intends to support a strong separation of concerns for these personas and the infrastructure APIs in between. Crossplane creates these APIs (via CRDs) on demand for the platform team, and then appropriately applies RBAC permissions to secure their access if requested. This RBAC management feature is on by default in Crossplane, but can be turned off if the platform team wants to manually manage the permissions themselves.
Crossplane also intends to support an extension model for the platform team to dynamically extend their control planes with support for new cloud providers and environments. Crossplane's package manager handles the lifecycle management of these extensions and intends to ensure that only the expected/allowed package content is installed into the control plane, such as new CRDs and controllers to reconcile them.
Crossplane does not intend to provide further granular access control to the infrastructure primitives that the platform team manages. These resources are cluster scoped and Crossplane does not have built-in mechanisms or experiences to further restrict their access. This can be configured outside of Crossplane via manual RBAC or policy configurations.
Crossplane does not intend to exhaustively restrict the controller workloads
that are run as extensions in the control plane. Users have the ability to
configure the Deployment that manages the extension's pod (and therefore
internal controllers), but the specific execution and runtime of the extension
is not restricted further by Crossplane.
This self-assessment is created by the Crossplane team to perform an internal analysis of the project’s security. It is not intended to provide a security audit of Crossplane, or function as an independent assessment or attestation of Crossplane’s security health.
This document serves to provide Crossplane users with
This document provides the CNCF TAG-Security with an initial understanding of Crossplane to assist in a joint-assessment, necessary for projects under incubation. Taken together, this document and the joint-assessment serve as a cornerstone for if and when Crossplane seeks graduation and is preparing for a security audit.
Critical Security Components
escalate and bind verbs on the Role and
ClusterRole resources, thus allowing it to grant access that it does not
have. This component is optional and can be completely disabled for platform
operators that want to manually manage the permissions for dynamically created
resources. More details about how the RBAC manager works can be found in the
design
doc.xpkg package format
specification
are also useful resources.Security Relevant Security Components
Compositions, CompositeResources (XRs), and
CompositeResourceDefinitions(XRDs). They take user provided input to define
new abstractions (platform APIs) as well as how to generate and compose resources
together. The general approach for the logic contained in a Composition is
that the platform engineer defines a simple pipeline of
functions to
execute. At the end of this pipeline will be a set of resources that
Crossplane then applies to the API server on behalf of the platform engineer.
Since this component contains and executes simple user defined logic, it is a
security relevant component. The Functions design
doc
and the Functions
specification
are useful related resources.XRDs and Compositions. The provided objects are validated
according to their schema and invalid objects will be rejected from the API
server. These webhooks are optional and can be disabled.The Crossplane project is not documented to comply with any specific security standards or sub-sections at this time.
main branch, and
release branches. The checks performed by this
pipeline
include:
golangci-lint runs with all linters turned on by default (enable-all: true), and a handful disabled with justifications provided. The
gosec linter is included to inspect
the source code for security problems.fs modecrossplane/crossplane image is based on the distroless/static base
image to minimize surface area of the container image#core-development channel), as well as the Github
crossplane and
crossplane-contrib organizations on
issues, PRs, and discussions.#general channel, in regular Community meetings, and other
channels outlined in the main
README.#announcements channel, Bluesky,
Twitter,
LinkedIn, blog
posts, and release
notes.Crossplane extends Kubernetes to enable cloud native control planes, so currently Crossplane will always be running within a Kubernetes cluster. Crossplane is very often integrated with a GitOps system such as ArgoCD or Flux.
The Graduation application covers many other integrations and collaborations with the cloud native ecosystem, for example Helm, gRPC, Prometheus, Backstage, Dapr, and others.
The full process for reporting security vulnerabilities is defined in the security policy page.
Anyone from the ecosystem can report a vulnerability privately using the GitHub security vulnerability integration, or by emailing [email protected].
As outlined in the vulnerability reporting process, the reporter(s) can typically expect a response from the maintainer team within 24 hours acknowledging the issue was received. If a response is not received within 24 hours, they are then asked to reach out to any maintainer directly to confirm receipt of the issue.
The full details of the incident response process are outlined in the vulnerability reporting process, but a brief summary is provided here:
All vulnerabilities and security advisories are published publicly to the security center of the core crossplane repository.
To date, 4 security advisories have been published. 3 are the result of security/fuzzing audits, and 1 is a result of a community reported vulnerability in the version of Go that Crossplane depended on.
Crossplane current has a passing OpenSSF Best Practices badge:
There are a few common use cases for the cloud native control planes that Crossplane enables.
Brief descriptions of the use cases for the many adopters of Crossplane are described in the public adopters list.
A few Crossplane community members have taken the time to outline their usage of Crossplane in more details on the Crossplane blog:
Further cases studies can be found on the CNCF website and Upbound's website.
Terraform is far and away the most common project that Crossplane is compared to. Some key differences between the projects include:
Cluster API is sometimes compared to Crossplane as they can both be used to provision and manage Kubernetes clusters and their underlying infrastructure. However, Cluster API takes an exclusive focus on the Kubernetes cluster provisioning use case, while Crossplane has a much more broad focus on managing infrastructure in general and building general usage cloud native platforms.
The hyperscalers also offer projects that expose their resources as extensions to the Kubernetes API, such as AWS Controllers for Kubernetes (ACK) and Google Config Connector. While these projects inherently take a narrow focus of exposing their own service offerings, Crossplane takes a much broader focus of intending to be a universal control plane for anything with an API. More details that compare Crossplane to Cloud Provider Infrastructure add-ons can be found in this blog post.
Radius is a project that probably has more overlap than was indicated in sandbox#65 as both projects are focusing on abstractions for developer self-service. However, Radius focuses more on an application layer model with a narrow scope of Recipes that do not appear to be user definable. Crossplane takes more of an infrastructure level focus and is very flexible, allowing the platform team to completely define their own custom abstractions and implementations.