CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



GHSA-JHJP-4C2Q-XMX4

GHSA-JHJP-4C2Q-XMX4: Falco k8saudit Plugin Ruleset Bypass via initContainers and ephemeralContainers

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 22, 2026·6 min read·17 visits

Executive Summary (TL;DR)

The Falco k8saudit plugin failed to parse initContainers and ephemeralContainers, allowing users with pod creation privileges to deploy undetected privileged workloads.

A security feature bypass vulnerability in the Falco k8saudit plugin (and its cloud-specific variants) allowed privileged workloads to run undetected. This bypass occurred because the plugin's default extraction logic and rules only evaluated standard containers, completely omitting initContainers and ephemeralContainers.

Vulnerability Overview

The Falco k8saudit plugin is a security auditing tool designed to ingest, parse, and analyze Kubernetes Audit Logs. By evaluating audit events against predefined rulesets, the plugin identifies security risks and compliance issues within active clusters. One of its primary default rules, Create Privileged Pod, alerts administrators when containers requiring administrative privileges are scheduled.\n\nThis vulnerability, tracked as GHSA-JHJP-4C2Q-XMX4, allowed attackers to bypass this critical rule. The security flaw stems from a tracking omission within the default extraction logic. The ruleset and underlying data-parsing schema only analyzed standard container arrays, ignoring other container fields supported by Kubernetes.\n\nSpecifically, an attacker could define a privileged container within initContainers or dynamically inject one via ephemeralContainers. Because the plugin did not extract security contexts from these specific blocks, no alert was triggered. This provided a reliable mechanism for attackers to execute highly privileged workloads on nodes without detection.

Root Cause Analysis

To understand the root cause of the vulnerability, we must examine the Kubernetes Pod specification (PodSpec) schema. Kubernetes supports three distinct arrays of container definitions within a Pod Spec: containers, initContainers, and ephemeralContainers. All three variants permit the application of a securityContext containing the privileged: true flag.\n\nPrior to the fix, the Falco k8saudit plugin parsed incoming audit JSON payloads using strict path configurations. In the plugin's data extraction module (extract.go), the key ka.req.pod.containers.privileged was explicitly mapped to requestObject.spec.containers[*].securityContext.privileged. This mapping extracted Boolean flags exclusively from the standard container array.\n\nThe parser implementation had no corresponding fields or path extractions mapped to initContainers or ephemeralContainers. Consequently, when an audit event containing a privileged payload in these omitted arrays arrived, the k8saudit engine returned a null or empty set. The rule compiler subsequently failed to match the true state, preventing alert emission.\n\nThe logical flaw resides in the assumption that standard application containers represent the sole vectors for running privileged code. Because initContainers execute prior to standard containers and ephemeralContainers allow ad-hoc debugger injection, omitting these structures created an operational blind spot.

Code-Level Analysis of Vulnerable and Patched States

The core of the vulnerability can be analyzed by looking at how the fields were registered and extracted in extract.go before and after the fix.\n\nPrior to the patch, the extract.go file contained specific, hardcoded logic for extracting container elements. The code was structurally restricted to parsing standard container arrays, as shown in the following extract:\n\ngo\n// Vulnerable Code Path in extract.go\ncase "ka.req.pod.containers.privileged":\n // This call only queries "spec" -> "containers"\n arr, err := e.getValuesRecursive(jsonValue, e.argIndexFilter(req), "requestObject", "spec", "containers", "securityContext", "privileged")\n if err != nil {\n return err\n }\n req.SetValue(e.arrayAsStringsSkipNil(arr))\n\n\nTo remediate this structural gap, the developers refactored the extraction logic to generalize path parsing. The fix dynamically iterates through all valid container arrays within the Pod specification, as shown below:\n\ngo\n// Patched Code Path in extract.go\nfield := req.Field()\n// The patch normalizes the handler for containers, initContainers, and ephemeralContainers\nfor _, list := range []string{"containers", "initContainers", "ephemeralContainers"} {\n if prefix := "ka.req.pod." + list + "."; strings.HasPrefix(field, prefix) {\n // The extractContainerField helper dynamically targets the designated list\n return e.extractContainerField(req, jsonValue, list, strings.TrimPrefix(field, prefix))\n }\n}\n\n\nThis modification ensures that if a field such as ka.req.pod.initContainers.privileged is referenced, the parser queries the initContainers sub-tree in the JSON audit payload. Additionally, the developers updated fields.go to expose the new audit fields to the rule engine, ensuring configuration consistency.\n\nThe macro any_container_privileged was added to k8s_audit_rules.yaml to replace the single container check with a logical OR across all container blocks:\n\nyaml\n# Refactored Rule Macro in k8s_audit_rules.yaml\n- macro: any_container_privileged\n condition: >\n (ka.req.pod.containers.privileged intersects (true) or\n ka.req.pod.initContainers.privileged intersects (true) or\n ka.req.pod.ephemeralContainers.privileged intersects (true))\n

Exploitation Methodology and Bypass Proof-of-Concept

Exploitation of this vulnerability requires an attacker to possess permissions to create Pods or inject ephemeral containers inside a target namespace. The attacker initiates the bypass by constructing a Pod specification containing a privileged container nested within the initContainers array. Because Falco rules only evaluated standard containers, this payload executes as root on the host node without triggering alerts.\n\nThe following YAML manifest demonstrates a valid bypass payload. The standard container is defined as a benign web server, whereas the malicious action is performed within an initialization container:\n\nyaml\napiVersion: v1\nkind: Pod\nmetadata:\n name: privileged-init-bypass\n namespace: target-namespace\nspec:\n initContainers:\n - name: malicious-init\n image: alpine:latest\n command: ["/bin/sh", "-c"]\n args: \n - |\n echo "[+] Escaping from init container...";\n mkdir -p /mnt/host;\n mount -t proc none /mnt/host;\n # Execute commands on host namespace or write ssh keys...\n sleep 5;\n securityContext:\n privileged: true\n containers:\n - name: benign-dummy-container\n image: nginx:alpine\n ports:\n - containerPort: 80\n\n\nWhen this manifest is submitted to the API server, an audit log is emitted and captured by Falco. Because the rule Create Privileged Pod only evaluates fields matching ka.req.pod.containers.privileged, the condition returns false. The container runtime executes the init container with administrative privileges, granting the attacker a root host escape window.\n\nA second exploitation route involves injecting a privileged debugging container into an existing, active Pod using the /ephemeralcontainers API endpoint. The standard Falco rules fail to evaluate the subresource modification, allowing runtime debugger processes to run with full privileges undetected.

Security Impact and Risk Evaluation

The impact of this security-bypass vulnerability is classified as high. Active auditing configurations are designed to provide runtime security observability and threat detection. When a bypass occurs, detection mechanisms fail, offering adversaries an open window to compromise the cluster infrastructure.\n\nA successful bypass allows an attacker to gain unmonitored administrative privileges on the underlying Kubernetes node. From this position, the attacker can execute container escape routines, access the node's root filesystem, and dump credentials. Additionally, attackers can leverage host-level access to compromise neighboring pods or entire nodes in the cluster.\n\nBy compromising the logging observability tier, the attacker effectively achieves defense evasion. Since security operations centers rely on Falco alerts to initiate incident response, the silent execution of privileged code delays threat identification. This delay increases the dwell time of an active intrusion within the production environment.

Remediation and Defensive Countermeasures

The primary and recommended remediation path is to upgrade the Falco k8saudit plugin to version v0.18.0 or later. Additionally, corresponding cloud wrapper plugins must be updated to their designated secure versions. These updates ensure that the underlying path parsers extract structural data from all container lists.\n\nIf immediate patching of the Falco plugins is not possible, security teams must deploy alternative admission controls to block privileged container creation. Using admission controllers like Kyverno or Open Policy Agent (OPA) Gatekeeper is highly effective. These tools evaluate and block the pod creation request at the API gateway prior to cluster scheduling.\n\nThe following Kyverno policy illustrates a temporary mitigation that blocks privileged contexts across all three container types:\n\nyaml\napiVersion: kyverno.io/v1\nkind: ClusterPolicy\nmetadata:\n name: block-privileged-containers\nspec:\n validationFailureAction: Enforce\n background: true\n rules:\n - name: privilege-check\n match:\n any:\n - resources:\n kinds:\n - Pod\n validate:\n message: "Privileged containers are not allowed."\n pattern:\n spec:\n =(containers):\n - =(securityContext):\n =(privileged): "false"\n =(initContainers):\n - =(securityContext):\n =(privileged): "false"\n =(ephemeralContainers):\n - =(securityContext):\n =(privileged): "false"\n

Official Patches

falcosecurityFix Pull Request for k8saudit plugin.

Fix Analysis (1)

Technical Appendix

CVSS Score
8.1/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:N

Affected Systems

falcosecurity/plugins (k8saudit)falcosecurity/plugins (k8saudit-aks)falcosecurity/plugins (k8saudit-eks)falcosecurity/plugins (k8saudit-gke)falcosecurity/plugins (k8saudit-ovh)

Affected Versions Detail

Product
Affected Versions
Fixed Version
falcosecurity/plugins - k8saudit
falcosecurity
< v0.18.0v0.18.0
falcosecurity/plugins - k8saudit-eks
falcosecurity
< v0.12.0v0.12.0
falcosecurity/plugins - k8saudit-gke
falcosecurity
< v0.9.0v0.9.0
falcosecurity/plugins - k8saudit-aks
falcosecurity
< v0.6.0v0.6.0
falcosecurity/plugins - k8saudit-ovh
falcosecurity
< v0.6.0v0.6.0
AttributeDetail
CWE IDCWE-20 / CWE-285
Attack VectorNetwork (Kubernetes API Server)
CVSS Base Score8.1 (High)
Exploit StatusProof-of-Concept
ImpactSecurity Bypass / Detection Evasion
RemediationUpgrade k8saudit plugin to v0.18.0

MITRE ATT&CK Mapping

T1562Impair Defenses
Defense Evasion
T1611Escape to Host
Privilege Escalation
T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-20
Improper Input Validation

The plugin failed to validate and parse the full scope of user-controllable arrays within the Pod definition during audit event parsing.

Known Exploits & Detection

GitHubProof of Concept logic bypass via privileged parameters in initContainers and ephemeralContainers.

Vulnerability Timeline

Pull request 1400 submitted to falcosecurity/plugins
2024-04-18
Fix commit merged into main branch
2024-04-19
Secure plugin releases tagged (k8saudit v0.18.0)
2024-04-22
GHSA-JHJP-4C2Q-XMX4 Advisory Published
2024-04-24

References & Sources

  • [1]GHSA-JHJP-4C2Q-XMX4 Advisory Details
  • [2]Fix Pull Request 1400
  • [3]Fix Commit 0adb9b3c
  • [4]k8saudit-aks v0.6.0 Release
  • [5]k8saudit-eks v0.12.0 Release
  • [6]k8saudit-gke v0.9.0 Release
  • [7]k8saudit-ovh v0.6.0 Release
  • [8]k8saudit v0.18.0 Release

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 7 hours ago•CVE-2026-12411
8.4

CVE-2026-12411: Cross-Guest Volume Hijack via DevLXD Device PATCH in Canonical LXD

CVE-2026-12411 is a broken access control vulnerability in the DevLXD interface of Canonical LXD versions 6.6 through 6.8. The flaw resides in the devLXDInstancePatchHandler component, which fails to verify storage volume ownership when an instance attaches a new disk device via the /dev/lxd guest socket. When the security.devlxd.management.volumes configuration option is enabled, an untrusted guest or DevLXD identity can issue a crafted HTTP PATCH request referencing another tenant's custom storage volume. The LXD host daemon subsequently mounts the target volume into the requesting guest, permitting unauthorized cross-tenant read and write operations.

Amit Schendel
Amit Schendel
5 views•10 min read
•about 8 hours ago•CVE-2026-105769
9.3

CVE-2026-105769: Azure Entra ID Token Exfiltration in Kaniko via Unanchored ACR Hostname Regex

CVE-2026-105769 (GHSA-5q7h-w9jf-cx97, GO-2026-6225) is an origin validation error and credential exfiltration vulnerability affecting Kaniko prior to version 1.25.20. The flaw stems from an unanchored regular expression in the integrated Azure Container Registry (ACR) credential helper (github.com/chrismellard/docker-credential-acr-env). When Kaniko processes a Dockerfile containing an image reference hosted on a lookalike domain containing an ACR suffix as a substring (e.g., x.azurecr.io.attacker.com), the credential helper acquires a Microsoft Entra ID access token for Azure Resource Manager and transmits it via HTTP POST to the attacker-controlled host.

Amit Schendel
Amit Schendel
10 views•11 min read
•about 9 hours ago•CVE-2026-62300
6.5

CVE-2026-62300: Uncontrolled Resource Consumption in filecoin-pin Daemon

CVE-2026-62300 is an uncontrolled resource consumption vulnerability (CWE-400) affecting the daemon mode of filecoin-pin in versions up to and including 1.1.0. The daemon implements the IPFS Pinning Service API to store content on Filecoin's Proof of Data Possession (PDP) service. Due to the absence of rate limits, concurrency caps, execution timeouts, and Directed Acyclic Graph (DAG) traversal limits, an authenticated user—or an unauthenticated user when authentication is disabled—can exhaust system resources via crafted POST /pins requests.

Amit Schendel
Amit Schendel
8 views•11 min read
•about 10 hours ago•CVE-2026-61536
7.5

CVE-2026-61536: Remote Code Execution via Unsafe Reflection in masci/banks CompletionExtension

CVE-2026-61536 is a high-severity Remote Code Execution (RCE) vulnerability in the masci/banks Python library prior to version 2.4.3. The flaw exists within the CompletionExtension component, which parses JSON-serialized Tool definitions directly from rendered Jinja template bodies inside {% completion %} blocks. When handling tool calls returned by an LLM, the library dynamically resolves the target callable using importlib.import_module() and getattr() based on an unvalidated import_path string. An attacker who can supply or modify prompt templates can inject a malicious Tool JSON object pointing to arbitrary Python functions (such as os.system), bypassing the Jinja SandboxedEnvironment introduced in version 2.4.2 and achieving arbitrary code execution when the LLM invokes the tool.

Alon Barad
Alon Barad
7 views•10 min read
•1 day ago•CVE-2026-93363
4.3

CVE-2026-93363: Improper Access Control in Payload CMS Storage Upload Route

Payload CMS contains a missing authorization vulnerability (CWE-862) in its client-side upload instructions endpoint and the `@payloadcms/storage-vercel-blob` storage adapter. Two distinct logic defects allow authenticated users lacking collection-level `create` or `update` permissions to generate signed upload tokens and upload arbitrary files directly to external cloud storage.

Alon Barad
Alon Barad
7 views•9 min read
•1 day ago•CVE-2026-55098
6.5

CVE-2026-55098: Cross-Database Authorization Bypass via DuckDB Table-Valued I/O Functions in Basekick-Labs Arc

CVE-2026-55098 (GHSA-93cm-2v4m-c56c) is an authorization bypass and sensitive information disclosure vulnerability in Basekick-Labs Arc prior to version 26.06.2. The flaw stems from an incomplete remediation of CVE-2026-47735, which failed to restrict the full suite of DuckDB table-valued filesystem I/O functions and quoted-identifier invocations. Because Arc's query parser ignores function calls during table reference extraction, authenticated users with minimal or empty permissions can invoke functions like parquet_scan(), glob(), and read_blob() to read, enumerate, and extract telemetry data across all tenant databases residing within the shared local storage root.

Alon Barad
Alon Barad
7 views•10 min read