Vulnerability Report for July 2026

Executive Summary

This monthly summary captures what our AI‑powered vulnerability analysis engine reviewed in July 2026, analyzing 8000+ new or updated vulnerabilities across ecosystems and vendors.

This report highlights the 10 high‑severity vulnerabilities prioritized by severity, CVSS and potential business impact. Below are this month’s key stats: total analyzed, critical/high counts, average CVSS, and KEV (if present).

Σ
8000+
Total Vulnerabilities
C
1108
Critical
H
3812
High
Avg
7.3
Avg CVSS
KEV
11
Known Exploited
Prefer the full picture? Visit our vulnerability database to explore everything we analyzed this month.

Table of Contents

CVE-2026-63030: WordPress < 7.0.2 - REST API batch-route confusion and SQL injection issue leading to Remote Code Execution Critical

Common Weakness Enumeration (CWE)
CWE-436 — Interpretation Conflict
CVSS Score
9.8
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Severity
critical
Published Date
July 17, 2026

Affected Packages

Not specified

Vulnerability Analysis

No vulnerability analysis available.


CVE-2026-44181: Jupyter Enterprise Gateway: Jinja2 Template Server Side Template Injection results in Remote Code Execution Critical

Common Weakness Enumeration (CWE)
CWE-1336
CVSS Score
10.0
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
Severity
critical
Published Date
July 16, 2026

Affected Packages

  • jupyter_enterprise_gateway (pip) vulnerable: >= 2.0.0rc2, < 3.3.0 patched in 3.3.0

Vulnerability Analysis

The vulnerability is a Server-Side Template Injection (SSTI) within the Jupyter Enterprise Gateway. The root cause lies in the _determine_kernel_pod_name function of the KubernetesProcessProxy class, located in enterprise_gateway/services/processproxies/k8s.py. This function processes the KERNEL_POD_NAME environment variable, which can be controlled by a user making an API request to start a new kernel. The vulnerable version of the code directly used the Jinja2 template engine to render this variable without any sanitization. An attacker could provide a malicious payload like {{ cycler.__init__.__globals__.os.popen("hostname").read() }} as the value for KERNEL_POD_NAME. The render method would execute this payload, allowing for remote code execution in the context of the Enterprise Gateway pod. The security patch (commit 1e6b2f35497682e6581c48cc6d273644d32ab89e) addresses this by removing the direct use of the Jinja2 rendering engine and replacing it with a custom, safer function (_safe_template_substitute) that uses a regular expression to perform simple variable substitution, explicitly preventing the evaluation of complex expressions, function calls, or attribute access, thus mitigating the SSTI vulnerability.

Identified Vulnerable Functions

KubernetesProcessProxy._determine_kernel_pod_name
enterprise_gateway/services/processproxies/k8s.py

The function _determine_kernel_pod_name was vulnerable to Server-Side Template Injection (SSTI). It took the KERNEL_POD_NAME environment variable from user input and rendered it as a Jinja2 template using env.from_string(pod_name).render(**keywords). This allowed an attacker to embed malicious Jinja2 expressions in the KERNEL_POD_NAME value, leading to arbitrary code execution on the server. The patch replaced the unsafe rendering with a safe substitution function that only allows simple variable replacement.


CVE-2026-47668: DbGate: Unauthenticated Remote Code Execution via JSON Script Runner Critical

CVSS Score
10.0
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Severity
critical
Published Date
July 23, 2026

Affected Packages

  • dbgate-serve (npm) vulnerable: <= 7.1.8 patched in 7.1.9

Vulnerability Analysis

The vulnerability is a classic remote code execution caused by improper input validation. User-controlled input, specifically the functionName and variableName parameters in JSON scripts, is directly concatenated into a string that is later executed as JavaScript code by a Node.js child process. The analysis of the patches between the vulnerable version (7.1.8) and the fixed version (7.1.9) confirms this. The core of the fix is the introduction of validation functions, assertValidJsIdentifier and assertValidShellApiFunctionName, which are applied to the user-controlled parameters before they are used in code generation. The vulnerable functions identified are the entry points that receive the malicious data (runners.start, runners.loadReader) and the functions that are directly involved in the insecure code generation (ScriptWriter.assignCore, compileShellApiFunctionName, ScriptWriterEval.assign). An attacker exploiting this vulnerability would cause these functions to appear in a runtime profile.

Identified Vulnerable Functions

runners.start
packages/api/src/controllers/runners.js

This is the main entry point for the vulnerability. It receives a JSON script from the user. When the script type is 'json', it initiates a code path that dynamically generates and executes a JavaScript file without properly sanitizing user-controlled input in the script, leading to remote code execution.

ScriptWriter.assignCore
packages/tools/src/ScriptWriter.ts

This function is the primary injection sink. It directly interpolates the user-controlled variableName and functionName parameters into a JavaScript code string without proper validation. An attacker can provide a malicious string for these parameters to inject arbitrary code. The patch adds validation for variableName within this function.

compileShellApiFunctionName
packages/tools/src/packageTools.ts

This function processes the user-controlled functionName. The original implementation used a permissive regex that allowed an attacker to inject arbitrary code by including characters like ';'. The patch fixes this by adding strict validation with assertValidShellApiFunctionName and a more restrictive regex.

runners.loadReader
packages/api/src/controllers/runners.js

This function is another entry point for the vulnerability, as mentioned in the advisory. It takes a functionName parameter that is used to generate a script via loaderScriptTemplate. Similar to the start function, it was vulnerable to code injection because the functionName was not validated before being used in script generation.

ScriptWriterEval.assign
packages/tools/src/ScriptWriter.ts

This function in the ScriptWriterEval class was also vulnerable. It takes variableName and functionName from user input. The patch adds calls to assertValidJsIdentifier and assertValidShellApiFunctionName, which indicates that these inputs were previously used without validation, leading to a code injection vulnerability.


CVE-2026-52831: Nuclio: Unsanitized cron trigger event headers/body injected into CronJob shell command leads to persistent RCE Critical

CVSS Score
10.0
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Severity
critical
Published Date
July 08, 2026

Affected Packages

  • github.com/nuclio/nuclio (go) vulnerable: < 0.0.0-20260601075854-3356b86a8bfa patched in 0.0.0-20260601075854-3356b86a8bfa

Vulnerability Analysis

The analysis of the provided security advisory and the associated patch commit 3356b86a8bfab3f960aa420310ebff765df9dede clearly indicates that the vulnerability is located in the generateCronTriggerCronJobSpec function within the pkg/platform/kube/functionres/lazy.go file. The vulnerability stems from the improper construction of a shell command that is used to create a Kubernetes CronJob. The function takes unsanitized user input from the event.headers and event.body of a cron trigger and includes it in a curl command string. This string is then executed by /bin/sh -c. The patch rectifies this by removing the shell (/bin/sh -c) entirely and instead building an argument list for curl to be executed directly. This prevents any user-supplied data from being interpreted as shell commands. Therefore, the generateCronTriggerCronJobSpec function is the exact location of the vulnerability.

Identified Vulnerable Functions

lazyClient.generateCronTriggerCronJobSpec
pkg/platform/kube/functionres/lazy.go

The function generateCronTriggerCronJobSpec constructs a shell command string by concatenating user-supplied values from cron trigger events (event.headers and event.body) without proper sanitization. The headerKey is interpolated directly into a double-quoted shell argument, allowing an attacker to break out of the quoting context with a ". The event.body is processed with strconv.Quote, which does not escape shell command substitution characters like $(). The resulting command string is then executed via /bin/sh -c, leading to remote code execution.


CVE-2026-54159: ps_facetedsearch: PHP Object Injection in faceted search cache allows unauthenticated RCE Critical

CVSS Score
10.0
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Severity
critical
Published Date
July 17, 2026

Affected Packages

  • prestashop/ps_facetedsearch (composer) vulnerable: >= 3.0.0, < 4.0.4 patched in 4.0.4

Vulnerability Analysis

The vulnerability is a PHP Object Injection in the ps_facetedsearch module of PrestaShop. The analysis of the security advisory and the associated patch commit 9ca839fac68a60641d8187a3ff9730ab09af33cb confirms that the vulnerability is located in the getFromCache method of the PrestaShop\Module\FacetedSearch\Filters\Block class. The method insecurely deserializes cached data using unserialize(). An attacker can craft a malicious payload in the search filter parameters of a URL, which then gets stored in the cache. When the getFromCache function is executed, it deserializes this payload, leading to the execution of arbitrary code. The patch mitigates this by replacing the call to unserialize() with Tools::unSerialize(), which is a safer alternative that validates the serialized data.

Identified Vulnerable Functions

PrestaShop\Module\FacetedSearch\Filters\Block::getFromCache
src/Filters/Block.php

The function getFromCache is vulnerable because it uses the insecure unserialize() function on cached data which can be controlled by an attacker via URL parameters. This allows for a PHP Object Injection attack, leading to Remote Code Execution.


CVE-2026-54769: Langroid: Sandbox Escape to Remote Code Execution via Incomplete `eval()` Mitigation in TableChatAgent Critical

CVSS Score
10.0
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Severity
critical
Published Date
July 10, 2026

Affected Packages

  • langroid (pip) vulnerable: <= 0.65.1 patched in 0.65.2

Vulnerability Analysis

The vulnerability exists in two locations within the langroid library where the eval() function is used to execute code derived from user input. The advisory points out that TableChatAgent.pandas_eval and a function in VectorStore (which the patch reveals to be VectorStore.compute_from_docs) are affected. The core of the vulnerability is that eval() was called with an empty locals dictionary ({}), which was intended to act as a sandbox. However, the globals dictionary passed to eval() was not sanitized. When Python's eval() does not find a __builtins__ key in the globals dictionary, it automatically injects the full builtins module, which includes dangerous functions like __import__, open, and exec. An attacker could craft input that causes the Large Language Model (LLM) to generate Python code containing a payload like __import__('os').system('command'). This payload would then be executed by eval(), resulting in Remote Code Execution (RCE) on the host system. The patch addresses this by introducing a new function, safe_eval_globals, which creates a globals dictionary with a heavily restricted __builtins__ set, removing access to these dangerous functions.

Identified Vulnerable Functions

TableChatAgent.pandas_eval
langroid/agent/special/table_chat_agent.py

The function pandas_eval in TableChatAgent uses eval on user-provided code. The globals argument to eval was not properly sanitized, allowing access to Python's __builtins__ module. This enables an attacker to execute arbitrary system commands via functions like __import__('os').system().

VectorStore.compute_from_docs
langroid/vector_store/base.py

The function compute_from_docs in VectorStore uses eval on user-provided code. The globals argument to eval was not properly sanitized, allowing access to Python's __builtins__ module. This enables an attacker to execute arbitrary system commands via functions like __import__('os').system().


GHSA-f25v-x6vr-962g: Pheditor: Authentication Bypass in Forced Password-Change Flow via Unverified Current Password Critical

Common Weakness Enumeration (CWE)
CWE-1392 — Use of Default Credentials
CVSS Score
10.0
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Severity
critical
Published Date
July 24, 2026

Affected Packages

  • pheditor/pheditor (composer) vulnerable: < 2.0.8 patched in 2.0.8

Vulnerability Analysis

The vulnerability is an authentication bypass in Pheditor's forced password-change mechanism. The root cause lies in the main script, pheditor.php, where the application checks if the instance is still using the default password ('admin'). The original code, if (PASSWORD == hash('sha512', 'admin')), only verified the stored password hash, but critically, it did not validate the password provided by the user in the $_POST['pheditor_password'] field. This flaw allows an attacker to send any non-empty password to the login form. If the server still has the default password, the check passes, and the attacker is presented with the password change form, allowing them to set a new password and gain administrative access without ever knowing the original one. The fixing commit 0978bcda644832b67357340e2f271e32d86fdf86 addresses this by adding a check to ensure the submitted password's hash matches the stored password hash: if (PASSWORD == hash('sha512', 'admin') && $submitted_hash === PASSWORD). Since the vulnerable logic is in the global scope of pheditor.php and not within a defined function, the file itself is the runtime indicator.

Identified Vulnerable Functions

pheditor.php
pheditor.php

The vulnerability exists in the main script file pheditor.php within the global scope. The script checks if the stored password is the default 'admin' password to force a password change. However, it fails to verify that the password submitted by the user in the POST request actually matches the current default password. This allows an unauthenticated attacker to trigger the forced password-change flow and set a new administrator password, leading to a full authentication bypass. The vulnerable code is not encapsulated within a specific function but is part of the script's main execution logic that handles authentication.


GHSA-w28w-gp39-m4p6: Prompty: Server-Side Template Injection to Remote Code Execution in the @prompty/core Nunjucks Renderer Critical

CVSS Score
10.0
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
Severity
critical
Published Date
July 24, 2026

Affected Packages

  • @prompty/core (npm) vulnerable: <= 0.1.4 patched in 0.1.5
  • @prompty/core (npm) vulnerable: >= 2.0.0-alpha.1, <= 2.0.0-beta.4 patched in 2.0.0-beta.5

Vulnerability Analysis

The vulnerability exists in the NunjucksRenderer.render function within @prompty/core. The function directly rendered Nunjucks templates without sanitizing the input data or restricting the execution environment. This allowed for Server-Side Template Injection (SSTI), enabling an attacker to execute arbitrary JavaScript code by accessing and manipulating object prototypes through crafted template syntax. The provided patch addresses this by introducing several security controls:

  1. Input Sanitization: A new sanitizeInputs function recursively cleans the data passed to the template, removing any properties that are not own-properties and preventing prototype traversal.
  2. Safe Member Lookup: A safeMemberLookup function is injected into the Nunjucks runtime to explicitly block access to sensitive properties like __proto__, constructor, and prototype.
  3. Disabled Template Function Calls: A safeCallWrap function is used to completely disable the ability to call functions from within the template.

The render method was modified to use a new renderSafely function, which orchestrates these security measures before rendering the template. The vulnerable function is NunjucksRenderer.render as it was the entry point for the untrusted data into the template engine.

Identified Vulnerable Functions

NunjucksRenderer.render
runtime/typescript/packages/core/src/renderers/nunjucks.ts

The render method of the NunjucksRenderer class was vulnerable to Server-Side Template Injection. Before the patch, it directly used env.renderString with user-provided inputs without proper sanitization. This allowed an attacker to craft a malicious template that could access and manipulate object prototypes (__proto__, constructor, prototype), leading to arbitrary code execution in the Node.js process. The patch mitigates this by introducing input sanitization and a safe rendering wrapper that restricts access to dangerous properties and disallows function calls within the template.


CVE-2026-44935: Rancher Fleet vulnerable to cross namespace secret disclosure via unvalidated `valuesFrom` references in Helm Deployer Critical

Common Weakness Enumeration (CWE)
CWE-1287
CVSS Score
9.9
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Severity
critical
Published Date
July 02, 2026

Affected Packages

  • github.com/rancher/fleet (go) vulnerable: >= 0.15.0, < 0.15.2 patched in 0.15.2
  • github.com/rancher/fleet (go) vulnerable: >= 0.14.0, < 0.14.6 patched in 0.14.6
  • github.com/rancher/fleet (go) vulnerable: >= 0.13.0, < 0.13.11 patched in 0.13.11
  • github.com/rancher/fleet (go) vulnerable: >= 0.12.0, < 0.12.15 patched in 0.12.15

Vulnerability Analysis

The vulnerability in Rancher Fleet (GHSA-xr65-5cpm-g36x) allowed for cross-namespace secret and configmap disclosure. This was due to the Helm deployer using the Fleet controller's own privileged Kubernetes client when processing valuesFrom references in GitRepo or HelmOp resources. An attacker could craft a resource that referenced a secret in any namespace, and the controller would fetch and expose its contents.

The root cause was traced to the internal/helmdeployer package. Specifically, the getValues function used the controller's client instead of a client scoped to the permissions of the service account specified for the deployment. The fix, identified in commit 190f2815a2f6bb208d7ffd3b7da1c9f942716cc0, involved a chain of modifications:

  1. The createCfg function was updated to accept a RESTClientGetter, allowing it to create Helm configurations with specific, non-privileged credentials.
  2. The install function was changed to generate a correctly-scoped Kubernetes client based on the deployment's serviceAccount.
  3. The getValues function was modified to use this passed-in, scoped client for all Kubernetes API calls, thereby enforcing RBAC policies correctly.

A new Policy custom resource was introduced as a defense-in-depth measure, allowing administrators to define explicit restrictions on what resources can be accessed. However, the core vulnerability fix was the correct scoping of the client used for valuesFrom lookups.

Identified Vulnerable Functions

Helm.getValues
internal/helmdeployer/install.go

This function resolves valuesFrom references by fetching Kubernetes ConfigMaps and Secrets. Before the patch, it used the Fleet controller's internal, privileged Kubernetes client (h.client). This allowed a malicious user to specify a valuesFrom reference to a resource in any namespace, and the controller would fetch it, bypassing RBAC and disclosing the resource's content. The patch changes the function to accept and use a kubeClient that is scoped to the permissions of the service account designated for the deployment, thus enforcing proper authorization.

Helm.install
internal/helmdeployer/install.go

This function orchestrates the Helm chart installation process. It was part of the vulnerable call chain because it invoked getValues without providing a properly scoped Kubernetes client. The patch modifies this function to first create a Helm configuration (cfg) and a kubeClient that honors the serviceAccount specified in the deployment options. This correctly-scoped client is then passed to getValues, ensuring that all subsequent Kubernetes API calls for valuesFrom are properly authorized.

Helm.createCfg
internal/helmdeployer/deployer.go

This function is responsible for creating the Helm action configuration used for deployments. The vulnerability existed because this function was hardcoded to use the controller's default REST client getter (h.getter), which has elevated privileges. This meant that all Helm operations, including valuesFrom lookups, were performed with the controller's identity. The patch refactors this function to accept a getter parameter, allowing the caller to supply a RESTClientGetter that is configured for the specific service account of the tenant, thereby ensuring operations are performed with the correct, limited permissions.


CVE-2026-45262: FacturaScripts: Authenticated SQL injection in the FacturaScripts REST API filter parameter via parenthesis bypass in `Where::sqlColumn` Critical

CVSS Score
9.9
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
Severity
critical
Published Date
July 14, 2026

Affected Packages

  • facturascripts/facturascripts (composer) vulnerable: <= 2026.1 patched in None

Vulnerability Analysis

The vulnerability is a SQL injection in the FacturaScripts REST API. The root cause is in the FacturaScripts\Core\Where::sqlColumn function, which improperly handles field names containing parentheses, bypassing SQL escaping. This flaw is exploitable through the API because several getWhereValues functions in API controllers (APIModel, ApiAttachedFiles, ApiProductoImagen) did not validate the filter parameter from user requests. An attacker could craft a malicious filter key with parentheses to inject arbitrary SQL, as demonstrated by the provided PoC. The identified patch, commit 03e282e88b8a0ae1a639c878469d040729f344e2, mitigates the vulnerability by adding strict validation to the getWhereValues functions, ensuring that only valid column names are processed. This prevents malicious input from reaching the vulnerable sqlColumn function through the API.

Identified Vulnerable Functions

FacturaScripts\Core\Where::sqlColumn
Core/Where.php

The function sqlColumn in Core/Where.php is vulnerable to SQL injection. It exempts any field name that contains both ( and ) from identifier escaping, returning the raw string. This allows an attacker to inject arbitrary SQL by crafting a filter key with parentheses.

FacturaScripts\Core\Lib\API\APIModel::getWhereValues
Core/Lib/API/APIModel.php

The getWhereValues function in Core/Lib/API/APIModel.php was vulnerable because it took a raw request key from the filter parameter and passed it to DataBaseWhere without any validation. This allowed an attacker to pass a malicious SQL expression to the sqlColumn function. The patch mitigates this by adding a regex validation to ensure the field name is a simple identifier.

FacturaScripts\Core\Controller\ApiAttachedFiles::getWhereValues
Core/Controller/ApiAttachedFiles.php

Similar to APIModel::getWhereValues, this function in Core/Controller/ApiAttachedFiles.php was vulnerable because it did not validate the filter parameter from the user request. This allowed an attacker to exploit the SQL injection vulnerability in sqlColumn. The patch adds the same regex validation as a mitigation.

FacturaScripts\Core\Controller\ApiProductoImagen::getWhereValues
Core/Controller/ApiProductoImagen.php

This function in Core/Controller/ApiProductoImagen.php was also vulnerable due to the lack of input validation on the filter parameter, making it another entry point for the SQL injection in sqlColumn. The patch applies the same regex validation to prevent the exploit.