You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
cert-manager packages which call the standard library pem.Decode() function can take a long time to process specially crafted invalid PEM data.
If an attacker is able to modify PEM data which cert-manager reads (e.g. in a Secret resource), they may be able to use large amounts of CPU in the cert-manager controller pod to effectively create a denial-of-service (DoS) vector for cert-manager in the cluster.
Secrets are limited in size to 1MiB, which reduces the impact of this issue; it was discovered through an ~856kB fuzz test input which causes pem.Decode to take roughly 750ms to reject the input on an M2 Max Macbook Pro. By way of comparison, a valid PEM-encoded 4096-bit RSA key takes roughly 70µs to parse on the same machine.
Given the required size of PEM data needed to present a realistic DoS vector, an attacker would need to create or insert many different large sized resources in the cluster, and so the best secondary defense is to ensure that sensible limits are placed via RBAC.
This issue affects all versions of cert-manager to have been released since at least v0.1.0 (since pem.Decode is core functionality for cert-manager). All supported releases are patched.
Patches
The fixed versions are v1.16.2, v1.15.4 and v1.12.14.
Ensure that RBAC is scoped correctly in your cluster. If a user is able to modify resources containing PEM data to be able to exploit this, it's like that those permissions are a bigger security threat than this issue - especially for Secret resources.
cert-manager packages which call the standard library pem.Decode() function can take a long time to process specially crafted invalid PEM data.
If an attacker is able to modify PEM data which cert-manager reads (e.g. in a Secret resource), they may be able to use large amounts of CPU in the cert-manager controller pod to effectively create a denial-of-service (DoS) vector for cert-manager in the cluster.
Secrets are limited in size to 1MiB, which reduces the impact of this issue; it was discovered through an ~856kB fuzz test input which causes pem.Decode to take roughly 750ms to reject the input on an M2 Max Macbook Pro. By way of comparison, a valid PEM-encoded 4096-bit RSA key takes roughly 70µs to parse on the same machine.
Given the required size of PEM data needed to present a realistic DoS vector, an attacker would need to create or insert many different large sized resources in the cluster, and so the best secondary defense is to ensure that sensible limits are placed via RBAC.
This issue affects all versions of cert-manager to have been released since at least v0.1.0 (since pem.Decode is core functionality for cert-manager). All supported releases are patched.
Patches
The fixed versions are v1.16.2, v1.15.4 and v1.12.14.
Ensure that RBAC is scoped correctly in your cluster. If a user is able to modify resources containing PEM data to be able to exploit this, it's like that those permissions are a bigger security threat than this issue - especially for Secret resources.
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
This patch release of cert-manager 1.15 makes several changes to how PEM input is validated, adding maximum sizes appropriate to the type of PEM data which is being parsed.
This is to prevent an unacceptable slow-down in parsing specially crafted PEM data. The issue was found by Google's OSS-Fuzz project.
The issue is low severity; to exploit the PEM issue would require privileged access which would likely allow Denial-of-Service through other methods.
Note also that since most PEM data parsed by cert-manager comes from ConfigMap or Secret resources which have a max size limit of approximately 1MB, it's difficult to force cert-manager to parse large amounts of PEM data.
In addition, the version of Go used to build cert-manager 1.15 was updated along with the base images, and a Route53 bug fix was backported.
Changes by Kind
Bug or Regression
Bugfix: Prevent aggressive Route53 retries caused by STS authentication failures by removing the Amazon Request ID from STS errors. (#7261, @cert-manager-bot)
Set a maximum size for PEM inputs which cert-manager will accept to remove possibility of taking a long time to process an input (#7402, @SgtCoDFish)
BUGFIX: the dynamic certificate source used by the webhook TLS server failed to detect a root CA approaching expiration, due to a calculation error. This will cause the webhook TLS server to fail renewing its CA certificate. Please upgrade before the expiration of this CA certificate is reached. (#7232, @cert-manager-bot)
BUGFIX route53: explicitly set the aws-global STS region which is now required by the github.com/aws/aws-sdk-go-v2 library. (#7189, @cert-manager-bot)
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.15 promotes several features to beta, including GatewayAPI support (ExperimentalGatewayAPISupport), the ability to provide a subject in the Certificate that will be used literally in the CertificateSigningRequest (LiteralCertificateSubject) and the outputting of additional certificate formats (AdditionalCertificateOutputFormats).
[!NOTE]
The cmctl binary have been moved to https://github.com/cert-manager/cmctl/releases.
For the startupapicheck Job you should update references to point at quay.io/jetstack/cert-manager-startupapicheck
[!NOTE]
From this release, the Helm chart will no longer uninstall the CRDs when the chart is uninstalled. If you want the CRDs to be removed on uninstall use crds.keep=false when installing the Helm chart.
Equally thanks to everyone who provided feedback, helped users and raised issues on GitHub and Slack and joined our meetings!
Thanks also to the CNCF, which provides resources and support, and to the AWS open source team for being good community members and for their maintenance of the PrivateCA Issuer.
In addition, massive thanks to Venafi for contributing developer time and resources towards the continued maintenance of cert-manager projects.
Changes by Kind
Feature
GatewayAPI support has graduated to Beta. Add the --enable-gateway-api flag to enable the integration. (#6961, @ThatsMrTalbot)
Add support to specify a custom key alias in a JKS Keystore (#6807, @bwaldrep)
Add the ability to communicate with Vault via mTLS when strict client certificates is enabled at Vault server side (#6614, @rodrigorfk)
Added option to provide additional audiences in the service account auth section for vault (#6718, @andrey-dubnik)
Venafi Issuer now sends a cert-manager HTTP User-Agent header in all Venafi Rest API requests.
For example: cert-manager-certificaterequests-issuer-venafi/v1.15.0+(linux/amd64)+cert-manager/ef068a59008f6ed919b98a7177921ddc9e297200. (#6865, @wallrj)
Add hint to validation error message to help users of external issuers more easily fix the issue if they specify a Kind but forget the Group (#6913, @SgtCoDFish)
Add support for numeric OID types in LiteralSubject. Eg. "1.2.3.4=String Value" (#6775, @inteon)
Promote the LiteralCertificateSubject feature to Beta. (#7030, @inteon)
Promoted the AdditionalCertificateOutputFormats feature gate to Beta (enabled by default). (#6970, @erikgb)
The Helm chart now allows you to supply extraObjects; a list of yaml manifests which will helm will install and uninstall with the cert-manager manifests. (#6424, @gplessis)
Update the Route53 provider to support fetching credentials using AssumeRoleWithWebIdentity (#6878, @pwhitehead-splunk)
Helm can now add optional hostAliases to cert-manager Pod to allow the DNS self-check to pass in custom scenarios. (#6456, @Pionerd)
Added a new Ingress annotation for copying specific Ingress annotations to Certificate's secretTemplate (#6839, @mangeshhambarde)
Added option to define additional token audiences for the Vault Kubernetes auth (#6744, @andrey-dubnik)
Allow cert-manager.io/allow-direct-injection in annotations (#6801, @jkroepke)
Helm: Fix a bug in the logic that differentiates between 0 and an empty value. (#6713, @inteon)
Make sure the Azure SDK error messages are stable. (#6676, @inteon)
When using the literalSubject on a Certificate, the webhook validation for the common name now also points to the literalSubject. (#6767, @lunarwhite)
Removed deprecated util functions that have been replaced by the slices and k8s.io/apimachinery/pkg/util packages.
Removed deprecated CSR functions which have been replaced with other functions in the pkg/util/pki package. (#6730, @inteon)
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
v1.14.5 fixes a bug in the DigitalOcean DNS-01 provider which could cause incorrect DNS records to be deleted when using a domain with a CNAME. Special thanks to @BobyMCbobs for reporting this issue and testing the fix!
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
⚠️ Known Issues
ACME Issuer (Let's Encrypt): wrong certificate chain may be used if preferredChain is configured: see release docs for more info and mitigations
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
⚠️ Known Issues
ACME Issuer (Let's Encrypt): wrong certificate chain may be used if preferredChain is configured: see release docs for more info and mitigations
BUGFIX: Fixes issue with JSON-logging, where only a subset of the log messages were output as JSON. (#6781, @jetstack-bot)
BUGFIX: LiteralSubjects with a #= value can result in memory issues due to faulty BER parser (github.com/go-asn1-ber/asn1-ber). (#6774, @jetstack-bot)
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
⚠️ Known Issues
ACME Issuer (Let's Encrypt): wrong certificate chain may be used if preferredChain is configured: see release docs for more info and mitigations
BUGFIX: cert-manager CA and SelfSigned issuers incorrectly copied the critical flag from the CSR instead of re-calculating that field themselves. (#6727, @jetstack-bot)
Helm: Fix a bug in the logic that differentiates between 0 and an empty value. (#6729, @jetstack-bot)
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
⚠️ This version has known issues. Please install v1.14.2 instead.
⚠️ Known Issues (please install v1.14.2)
ACME Issuer (Let's Encrypt): wrong certificate chain may be used if preferredChain is configured: see release docs for more info and mitigations
In cert-manager v1.14.0 and v1.14.1, the CA and SelfSigned issuers issue certificates with SANs set to non-critical even when the subject is empty. It incorrectly copies the critical field from the CSR.
Fix bug in cmctl namespace detection which prevented it being used as a startupapicheck image in namespaces other than cert-manager. (#6706, @inteon)
Fix bug in cmctl which caused cmctl experimental install to panic. (#6706, @inteon)
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
⚠️ This version has known issues. Please install v1.14.2 instead.
⚠️ Known Issues (please install v1.14.2)
ACME Issuer (Let's Encrypt): wrong certificate chain may be used if preferredChain is configured: see release docs for more info and mitigations
In cert-manager v1.14.0 and v1.14.1, the CA and SelfSigned issuers issue certificates with SANs set to non-critical even when the subject is empty. It incorrectly copies the critical field from the CSR.
During the release of v1.14.0, the Helm chart for this version was found to use the wrong OCI image for the cainjector Deployment,
which caused the Helm installation to fail.
In order to complete the release, the cert-manager team have manually updated the Helm chart for this version,
which contains all the Helm chart fixes which are in v1.14.1.
A bug in cmctl namespace detection prevents it being used as a startupapicheck image in namespaces other than cert-manager.
A bug in cmctl causes cmctl experimental install to panic.
🔧 Breaking Changes
The startupapicheck job uses a new OCI image called "startupapicheck", instead of the ctl image.
If you run in an environment in which images cannot be pulled, be sure to include the new image.
The KeyUsage and BasicConstraints extensions will now be encoded as critical in the CertificateRequest's CSR blob.
🗺️ Major Themes
New X.509 Features
The cert-manager Certificate resource now allows you to configure a subset of "Other Name" SANs,
which are described in the Subject Alternative Name section of RFC 5280 (on page 37).
We specifically support any otherName type with a UTF-8 value, such as the User Principal Name or sAMAccountName.
These are useful when issuing unique certificates for authenticating with LDAP systems such as Microsoft Active Directory.
For example you can create certificates with this block in the spec:
otherNames:
- oid: 1.3.6.1.4.1.311.20.2.3 # UPN OID
utf8Value: upn@domain.local
An ongoing security audit of the cert-manager code revealed some weaknesses which we have addressed in this release,
such as using more secure default settings in the HTTP servers that serve metrics, healthz and pprof endpoints.
This will help mitigate denial-of-service attacks against those important services.
All the cert-manager containers are now configured with read only root file system by default,
to prevent unexpected changes to the file system of the OCI image.
And it is now possible to configure the metrics server to use HTTPS rather than HTTP,
so that clients can verify the identity of the metrics server.
Other
The liveness probe of the cert-manager controller Pod is now enabled by default.
There is a new option .spec.keystores.pkcs12.algorithms to specify encryption and MAC algorithms for PKCS.
🤝 Community
Thanks again to all open-source contributors with commits in this release, including:
Equally thanks to everyone who provided feedback, helped users and raised issues on GitHub and Slack and joined our meetings!
Thanks also to the CNCF, which provides resources and support, and to the AWS open source team for being good community members and for their maintenance of the PrivateCA Issuer.
In addition, massive thanks to Venafi for contributing developer time and resources towards the continued maintenance of cert-manager projects.
📜 Changes
Feature
ACME challenge solver Pod for HTTP01 will get a default annotation of "cluster-autoscaler.kubernetes.io/safe-to-evict": "true". You can provide an annotation of "cluster-autoscaler.kubernetes.io/safe-to-evict": "false" in your podTemplate if you don't like this. (#6349, @jsoref)
Added a clock skew detector liveness probe that will force a restart in case we detect a skew between the internal monotonic clock and the system clock of more than 5 minutes.
Also, the controller's liveness probe is now enabled by default. (#6328, @inteon)
Added a new flag (--dynamic-serving-leaf-duration) that can adjust the lifetime of the dynamic leaf certificates (#6552, @allenmunC1)
Added the option to specify the X.509 v3 Authority Information Accessors extension CA Issuers URLs for certificates issued by the CA issuer. (#6486, @jeremycampbell)
All Pods are now configured with readOnlyRootFilesystem by default. (#6453, @wallrj)
MAYBE BREAKING: The startupapicheck job is now handled by an entirely new container called "startupapicheck". This replaces the previous ctl container. If you run in an environment in which images cannot be pulled, be sure to include the new container. (#6549, @SgtCoDFish)
New option .spec.keystores.pkcs12.algorithms to specify encryption and MAC algorithms for PKCS#12 keystores. Fixes issues #5957 and #6523. (#6548, @snorwin)
The ACME HTTP01 solver Pod is now configured with readOnlyRootFilesystem: true (#6462, @wallrj)
Updates the AWS SDK for Go to 1.48.7 to support Amazon EKS Pod Identity (#6519, @JoeNorth)
⚠️ potentially breaking ⚠️: The KeyUsage and BasicConstraints extensions will now be encoded as critical in the CertificateRequest's CSR blob. (#6053, @inteon)
Add TLS support to the metrics endpoint through either a certificate file or through dynamically issued certificates (#6574, @ThatsMrTalbot)
Helm Chart: allow changing the default Deployment revisionHistoryLimit (#6248, @tberreis)
Security: Limit the size of the response body read from HTTP requests by cert-manager. (#6619, @ThatsMrTalbot)
Support custom spec.namespaceSelector for webhooks (#6638, @jkroepke)
Bug or Regression
BUGFIX[helm]: Fix issue where webhook feature gates were only set if controller feature gates are set. (#6380, @asapekia)
Controller ConfigMap is now created only if .Values.config is set. (#6357, @ABWassim)
Fix runaway bug caused by multiple Certificate resources that point to the same Secret resource. (#6406, @inteon)
Fix(helm): templating of required value in controller and webhook ConfigMap resources (#6435, @ABWassim)
Fixed a webhook validation error message when the key algorithm was invalid. (#6571, @pevidex)
Fixed error messaging when setting up vault issuer (#6433, @vinny)
GHSA-vgf6-pvf4-34rq: The webhook server now returns HTTP error 413 (Content Too Large) for requests with body size >= 3MiB. This is to mitigate DoS attacks that attempt to crash the webhook process by sending large requests that exceed the available memory.
The webhook server now returns HTTP error 400 (Bad Request) if the request contains an empty body.
The webhook server now returns HTTP error 500 (Internal Server Error) rather than crashing, if the code panics while handling a request. (#6498, @inteon)
Increase the default webhook timeout to its maximum value of 30 seconds, so that the underlying timeout error message has more chance of being returned to the end user. (#6488, @wallrj)
Listeners that do not support TLS on Gateway resources will now not raise BadConfig warnings anymore (#6347, @lauraseidler)
Mitigate potential Slowloris attacks by setting ReadHeaderTimeout in all http.Server instances (#6534, @wallrj)
The Venafi issuer now properly resets the certificate and should no longer get stuck with WebSDK CertRequest Module Requested Certificate or `This certificate cannot be processed while it is in an error state. Fix any errors, and then
Configuration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
If you want to rebase/retry this PR, check this box
In order to perform the update(s) described in the table above, Renovate ran the go get command, which resulted in the following additional change(s):
4 additional dependencies were updated
Details:
Package
Change
github.com/emicklei/go-restful/v3
v3.11.0 -> v3.12.0
github.com/go-jose/go-jose/v4
v4.0.1 -> v4.0.2
github.com/go-openapi/jsonreference
v0.20.2 -> v0.21.0
sigs.k8s.io/gateway-api
v0.8.0 -> v1.1.0
renovatebot
changed the title
Update module github.com/cert-manager/cert-manager to v1.12.14 [SECURITY]
Update module github.com/cert-manager/cert-manager to v1.12.14 [SECURITY] - autoclosed
Dec 6, 2024
renovatebot
changed the title
Update module github.com/cert-manager/cert-manager to v1.12.14 [SECURITY] - autoclosed
Update module github.com/cert-manager/cert-manager to v1.12.14 [SECURITY]
Dec 6, 2024
renovatebot
changed the title
Update module github.com/cert-manager/cert-manager to v1.12.14 [SECURITY]
Update module github.com/cert-manager/cert-manager to v1.15.4 [SECURITY]
Dec 12, 2024
renovatebot
changed the title
Update module github.com/cert-manager/cert-manager to v1.15.4 [SECURITY]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Dec 12, 2024
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
Jan 17, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Jan 17, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
Jan 23, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Jan 23, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
Jan 27, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Jan 27, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
Jan 30, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
Feb 5, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Feb 6, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
Feb 10, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Feb 10, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
Feb 18, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Feb 18, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
Feb 20, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security] - autoclosed
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Feb 20, 2025
renovatebot
changed the title
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Renovate: Update module github.com/cert-manager/cert-manager to v1.15.4 [SECURITY]
Mar 11, 2025
renovatebot
changed the title
Renovate: Update module github.com/cert-manager/cert-manager to v1.15.4 [SECURITY]
fix(deps): update module github.com/cert-manager/cert-manager to v1.15.4 [security]
Mar 12, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v1.13.3->v1.15.4Warning
Some dependencies could not be looked up. Check the Dependency Dashboard for more information.
GitHub Vulnerability Alerts
GHSA-r4pg-vg54-wxx4
Impact
cert-manager packages which call the standard library
pem.Decode()function can take a long time to process specially crafted invalid PEM data.If an attacker is able to modify PEM data which cert-manager reads (e.g. in a Secret resource), they may be able to use large amounts of CPU in the cert-manager controller pod to effectively create a denial-of-service (DoS) vector for cert-manager in the cluster.
Secrets are limited in size to 1MiB, which reduces the impact of this issue; it was discovered through an ~856kB fuzz test input which causes
pem.Decodeto take roughly 750ms to reject the input on an M2 Max Macbook Pro. By way of comparison, a valid PEM-encoded 4096-bit RSA key takes roughly 70µs to parse on the same machine.Given the required size of PEM data needed to present a realistic DoS vector, an attacker would need to create or insert many different large sized resources in the cluster, and so the best secondary defense is to ensure that sensible limits are placed via RBAC.
This issue affects all versions of cert-manager to have been released since at least v0.1.0 (since
pem.Decodeis core functionality for cert-manager). All supported releases are patched.Patches
The fixed versions are v1.16.2, v1.15.4 and v1.12.14.
Workarounds
Ensure that RBAC is scoped correctly in your cluster. If a user is able to modify resources containing PEM data to be able to exploit this, it's like that those permissions are a bigger security threat than this issue - especially for Secret resources.
References
cert-manager ha a potential slowdown / DoS when parsing specially crafted PEM inputs
CVE-2024-12401 / GHSA-r4pg-vg54-wxx4 / GO-2024-3282
More information
Details
Impact
cert-manager packages which call the standard library
pem.Decode()function can take a long time to process specially crafted invalid PEM data.If an attacker is able to modify PEM data which cert-manager reads (e.g. in a Secret resource), they may be able to use large amounts of CPU in the cert-manager controller pod to effectively create a denial-of-service (DoS) vector for cert-manager in the cluster.
Secrets are limited in size to 1MiB, which reduces the impact of this issue; it was discovered through an ~856kB fuzz test input which causes
pem.Decodeto take roughly 750ms to reject the input on an M2 Max Macbook Pro. By way of comparison, a valid PEM-encoded 4096-bit RSA key takes roughly 70µs to parse on the same machine.Given the required size of PEM data needed to present a realistic DoS vector, an attacker would need to create or insert many different large sized resources in the cluster, and so the best secondary defense is to ensure that sensible limits are placed via RBAC.
This issue affects all versions of cert-manager to have been released since at least v0.1.0 (since
pem.Decodeis core functionality for cert-manager). All supported releases are patched.Patches
The fixed versions are v1.16.2, v1.15.4 and v1.12.14.
Workarounds
Ensure that RBAC is scoped correctly in your cluster. If a user is able to modify resources containing PEM data to be able to exploit this, it's like that those permissions are a bigger security threat than this issue - especially for Secret resources.
References
Severity
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:NReferences
This data is provided by OSV and the GitHub Advisory Database (CC-BY 4.0).
Potential slowdown / DoS when parsing specially crafted PEM inputs in github.com/cert-manager/cert-manager
CVE-2024-12401 / GHSA-r4pg-vg54-wxx4 / GO-2024-3282
More information
Details
Potential slowdown / DoS when parsing specially crafted PEM inputs in github.com/cert-manager/cert-manager
Severity
Unknown
References
This data is provided by OSV and the Go Vulnerability Database (CC-BY 4.0).
Release Notes
cert-manager/cert-manager (github.com/cert-manager/cert-manager)
v1.15.4Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
This patch release of cert-manager 1.15 makes several changes to how PEM input is validated, adding maximum sizes appropriate to the type of PEM data which is being parsed.
This is to prevent an unacceptable slow-down in parsing specially crafted PEM data. The issue was found by Google's OSS-Fuzz project.
The issue is low severity; to exploit the PEM issue would require privileged access which would likely allow Denial-of-Service through other methods.
Note also that since most PEM data parsed by cert-manager comes from
ConfigMaporSecretresources which have a max size limit of approximately 1MB, it's difficult to force cert-manager to parse large amounts of PEM data.Further information is available in GHSA-r4pg-vg54-wxx4
In addition, the version of Go used to build cert-manager 1.15 was updated along with the base images, and a Route53 bug fix was backported.
Changes by Kind
Bug or Regression
Other (Cleanup or Flake)
v1.15.3Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
🔗 See v1.15.0 for more information about cert-manager 1.15 and read-before-upgrade info.
📜 Changes since
v1.15.2Bug or Regression
v1.15.2Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
🔗 See v1.15.0 for more information about cert-manager 1.15 and read-before-upgrade info.
📜 Changes since
v1.15.1Bug or Regression
route53: explicitly set theaws-globalSTS region which is now required by thegithub.com/aws/aws-sdk-go-v2library. (#7189,@cert-manager-bot)grpc-goto fixGHSA-xr7q-jx4m-x55m(#7167,@SgtCoDFish)@cert-manager-bot)endpointAdditionalPropertiesin thePodMonitortemplate of the Helm chart (#7191,@inteon)HTTPRouteresources (#7186,@cert-manager-bot)golangfrom1.22.3to1.22.5(#7165,@github-actions)v1.15.1Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
🔗 See v1.15.0 for more information about cert-manager 1.15 and read-before-upgrade info.
📜 Changes since v1.15.0
Bug or Regression
Other (Cleanup or Flake)
v1.15.0Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.15 promotes several features to beta, including GatewayAPI support (
ExperimentalGatewayAPISupport), the ability to provide a subject in the Certificate that will be used literally in the CertificateSigningRequest (LiteralCertificateSubject) and the outputting of additional certificate formats (AdditionalCertificateOutputFormats).Community
Thanks again to all open-source contributors with commits in this release, including: @Pionerd, @SgtCoDFish, @ThatsMrTalbot, @andrey-dubnik, @bwaldrep, @eplightning, @erikgb, @findnature, @gplessis, @import-shiburin, @inteon, @jkroepke, @lunarwhite, @mangeshhambarde, @pwhitehead-splunk & @rodrigorfk, @wallrj.
Thanks also to the following cert-manager maintainers for their contributions during this release: @SgtCoDFish, @SpectralHiss, @ThatsMrTalbot, @hawksight, @inteon, @maelvls & @wallrj.
Equally thanks to everyone who provided feedback, helped users and raised issues on GitHub and Slack and joined our meetings!
Thanks also to the CNCF, which provides resources and support, and to the AWS open source team for being good community members and for their maintenance of the PrivateCA Issuer.
In addition, massive thanks to Venafi for contributing developer time and resources towards the continued maintenance of cert-manager projects.
Changes by Kind
Feature
--enable-gateway-apiflag to enable the integration. (#6961, @ThatsMrTalbot)For example:
cert-manager-certificaterequests-issuer-venafi/v1.15.0+(linux/amd64)+cert-manager/ef068a59008f6ed919b98a7177921ddc9e297200. (#6865, @wallrj)LiteralCertificateSubjectfeature to Beta. (#7030, @inteon)extraObjects; a list of yaml manifests which will helm will install and uninstall with the cert-manager manifests. (#6424, @gplessis)cert-manager.io/allow-direct-injectionin annotations (#6801, @jkroepke)Design
Bug or Regression
preferredChainis configured. (#6755, @import-shiburin)disableAutoApprovalandapproveSignerNamesHelm chart options. (#7054, @inteon)Other (Cleanup or Flake)
crds.keepandcrds.enabledHelm options can now be used instead of theinstallCRDsoption. (#6760, @inteon)slicesandk8s.io/apimachinery/pkg/utilpackages.Removed deprecated CSR functions which have been replaced with other functions in the
pkg/util/pkipackage. (#6730, @inteon)cmctlandkubectl cert-mangerhave been moved to the https://github.com/cert-manager/cmctl repo and will be versioned separately starting with cmctl v2.0.0 (#6663, @inteon)pkg/util/pki/ParseSubjectStringToRawDERBytesfunction. (#6994, @inteon)--controllersflag only specifies disabled controllers, the default controllers are now enabled implicitly. (#7054, @inteon)GO-2024-2824. (#6996, @github-actions[bot])v1.14.7Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
📜 Changes since v1.14.6
Bugfixes
Other (Cleanup or Flake)
v1.14.6Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
📜 Changes since v1.14.5
Other (Cleanup or Flake)
v1.14.5Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
v1.14.5fixes a bug in the DigitalOcean DNS-01 provider which could cause incorrect DNS records to be deleted when using a domain with a CNAME. Special thanks to @BobyMCbobs for reporting this issue and testing the fix!It also patches CVE-2023-45288.
📜 Changes since v1.14.4
preferredChainis configured: see 1.14 release notes for more information.Changes
Bug or Regression
v1.14.4Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
ℹ️ Documentation
Release notes
Upgrade notes
Installation instructions
🔧 Breaking changes
See Breaking changes in v1.14.0 release notes
📜 Changes since v1.14.3
Bug or Regression
cert-manager.io/allow-direct-injectionin annotations (#6809, @jetstack-bot)Other (Cleanup or Flake)
v1.14.3Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
ℹ️ Documentation
Release notes
Upgrade notes
Installation instructions
🔧 Breaking changes
See Breaking changes in v1.14.0 release notes
📜 Changes since v1.14.2
Bug or Regression
v1.14.2Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
preferredChainis configured: see release docs for more info and mitigationsℹ️ Documentation
Release notes
Upgrade notes
Installation instructions
🔧 Breaking changes
See
Breaking changesin v1.14.0 release notes📜 Changes since
v1.14.1Bug or Regression
Other (Cleanup or Flake)
v1.14.1Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
v1.14.2)preferredChainis configured: see release docs for more info and mitigationsCAandSelfSignedissuers issue certificates with SANs set to non-critical even when the subject is empty. It incorrectly copies the critical field from the CSR.🔧 Breaking changes
See
Breaking changesin v1.14.0 release notesℹ️ Documentation
📜 Changes since
v1.14.0Bug or Regression
cmctl experimental installto panic. (#6706, @inteon)v1.14.0Compare Source
cert-manager is the easiest way to automatically manage certificates in Kubernetes and OpenShift clusters.
cert-manager 1.14 brings a variety of features, security improvements and bug fixes, including: support for creating X.509 certificates with "Other Name" fields, and support for creating CA certificates with "Name Constraints" and "Authority Information Accessors" extensions.
v1.14.2)preferredChainis configured: see release docs for more info and mitigationsCAandSelfSignedissuers issue certificates with SANs set to non-critical even when the subject is empty. It incorrectly copies the critical field from the CSR.v1.14.0, the Helm chart for this version was found to use the wrong OCI image for thecainjectorDeployment,which caused the Helm installation to fail.
In order to complete the release, the cert-manager team have manually updated the Helm chart for this version,
which contains all the Helm chart fixes which are in
v1.14.1.startupapicheckimage in namespaces other than cert-manager.cmctl experimental installto panic.🔧 Breaking Changes
The startupapicheck job uses a new OCI image called "startupapicheck", instead of the ctl image.
If you run in an environment in which images cannot be pulled, be sure to include the new image.
The KeyUsage and BasicConstraints extensions will now be encoded as critical in the CertificateRequest's CSR blob.
🗺️ Major Themes
New X.509 Features
The cert-manager Certificate resource now allows you to configure a subset of "Other Name" SANs,
which are described in the Subject Alternative Name section of RFC 5280 (on page 37).
We specifically support any
otherNametype with aUTF-8value, such as the User Principal Name orsAMAccountName.These are useful when issuing unique certificates for authenticating with LDAP systems such as Microsoft Active Directory.
For example you can create certificates with this block in the spec:
The feature is still in alpha stage and requires you to enable the
OtherNamefeature flag in the controller and webhook components.New CA certificate Features
You can now specify the X.509 v3 Authority Information Accessors extension,
with URLs for certificates issued by the CA issuer.
Users can now use name constraints in CA certificates.
To know more details on name constraints check out RFC section https://datatracker.ietf.org/doc/html/rfc5280#section-4.2.1.10
Security
An ongoing security audit of the cert-manager code revealed some weaknesses which we have addressed in this release,
such as using more secure default settings in the HTTP servers that serve metrics, healthz and pprof endpoints.
This will help mitigate denial-of-service attacks against those important services.
All the cert-manager containers are now configured with read only root file system by default,
to prevent unexpected changes to the file system of the OCI image.
And it is now possible to configure the metrics server to use HTTPS rather than HTTP,
so that clients can verify the identity of the metrics server.
Other
The liveness probe of the cert-manager controller Pod is now enabled by default.
There is a new option
.spec.keystores.pkcs12.algorithmsto specify encryption and MAC algorithms for PKCS.🤝 Community
Thanks again to all open-source contributors with commits in this release, including:
Thanks also to the following cert-manager maintainers for their contributions during this release:
Equally thanks to everyone who provided feedback, helped users and raised issues on GitHub and Slack and joined our meetings!
Thanks also to the CNCF, which provides resources and support, and to the AWS open source team for being good community members and for their maintenance of the PrivateCA Issuer.
In addition, massive thanks to Venafi for contributing developer time and resources towards the continued maintenance of cert-manager projects.
📜 Changes
Feature
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true". You can provide an annotation of"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"in yourpodTemplateif you don't like this. (#6349, @jsoref)Also, the controller's liveness probe is now enabled by default. (#6328, @inteon)
otherNameSANS in Certificates (#6404, @SpectralHiss)readOnlyRootFilesystemby default. (#6453, @wallrj).spec.keystores.pkcs12.algorithmsto specify encryption and MAC algorithms for PKCS#12 keystores. Fixes issues #5957 and #6523. (#6548, @snorwin)readOnlyRootFilesystem: true(#6462, @wallrj)revisionHistoryLimit(#6248, @tberreis)spec.namespaceSelectorfor webhooks (#6638, @jkroepke)Bug or Regression
.Values.configis set. (#6357, @ABWassim)GHSA-vgf6-pvf4-34rq: The webhook server now returns HTTP error 413 (Content Too Large) for requests with body size>= 3MiB. This is to mitigate DoS attacks that attempt to crash the webhook process by sending large requests that exceed the available memory.The webhook server now returns HTTP error 400 (Bad Request) if the request contains an empty body.
The webhook server now returns HTTP error 500 (Internal Server Error) rather than crashing, if the code panics while handling a request. (#6498, @inteon)
BadConfigwarnings anymore (#6347, @lauraseidler)ReadHeaderTimeoutin allhttp.Serverinstances (#6534, @wallrj)WebSDK CertRequest Module Requested Certificateor `This certificate cannot be processed while it is in an error state. Fix any errors, and thenConfiguration
📅 Schedule: Branch creation - "" (UTC), Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.