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-2024-37155

CVE-2024-37155: Security Bypass in OpenCTI GraphQL Introspection via Whitespace and Control Character Manipulation

Amit Schendel
Amit Schendel
Senior Security Researcher

Jun 22, 2026·5 min read·116 visits

Executive Summary (TL;DR)

A flaw in OpenCTI's custom validation plugin allows unauthenticated attackers to bypass GraphQL schema introspection restrictions by modifying whitespaces and control characters, exposing the full database schema.

OpenCTI versions prior to 6.1.9 fail to properly restrict GraphQL schema introspection queries due to a weak pattern-matching implementation. An unauthenticated attacker can bypass the introspection block list by stripping whitespace and carriage returns, enabling complete reconnaissance of the GraphQL schema.

Vulnerability Overview

OpenCTI is an open-source cyber threat intelligence platform that utilizes a GraphQL API backend to manage and query threat data and observables. By default, GraphQL APIs expose a feature known as schema introspection, which allows clients to query information about the API's schema itself. Because this can expose internal data structures and sensitive API capabilities, organizations frequently restrict introspection to authenticated administrators.

To enforce this restriction, OpenCTI implemented a custom validation mechanism named secureIntrospectionPlugin within its Apollo Server initialization. This plugin intercepts incoming HTTP POST requests directed at the /graphql endpoint and inspects the raw query payload. If it detects signatures associated with introspection, it rejects the request for unauthenticated users.

However, prior to version 6.1.9, this validation relied on a naive string blacklist. This report analyzes how attackers can easily bypass this filter using formatting tricks, the security implications of such leaks, and the technical drawbacks of the vendor's patch.

Root Cause Analysis

The root cause of CVE-2024-37155 lies in a fundamental mismatch between how the validation plugin matches text and how the GraphQL parser interprets it. The secureIntrospectionPlugin attempted to block introspection by searching for specific string sequences like __schema { or __schema(. This regex-like string-inclusion check assumes that all clients format their requests using standard white spacing and indentation rules.

In contrast, the GraphQL specification defines a grammar where white space, carriage returns, and line feeds function merely as separators and are largely ignored during the lexical analysis phase. Consequently, a query string that omits spaces entirely, such as __schema{, is syntactically valid and executes perfectly on the backend parser. The custom validation plugin, however, fails to match this string because it lacks the expected space character.

Furthermore, an attacker can insert alternative control characters or inline comments to disrupt the static string verification. For example, injecting a line break, a carriage return (\r\n), or an inline comment like # comment between the type definition and the opening bracket will completely bypass the block list. The validation layer reads these as non-matching strings, whereas the downstream Apollo Server strips them and processes the introspection command successfully.

Code Analysis & Patch Evaluation

In the vulnerable codebase of OpenCTI, the secureIntrospectionPlugin was declared in opencti-graphql/src/graphql/graphql.js. The plugin defined introspectionPatterns as an array of four specific string sequences: ['__schema {', '__schema(', '__type {', '__type(']. The application then evaluated incoming requests using introspectionPatterns.some((pattern) => request.query.includes(pattern)).

The patch committed in f87d96918c63b0c3d3ebfbea6c789d48e2f56ad5 attempted to correct this by modifying the pattern matching array to check for the raw strings directly: ['__schema', '__type'].some((pattern) => request.query.includes(pattern)). While this eliminates the whitespace bypass vector, it introduces a risk of false positives. Legitimate queries containing these substrings as arguments or values will be incorrectly blocked.

There is also a structural fragility in this implementation. The plugin directly accesses request.query.includes(). If Automatic Persisted Queries (APQ) are enabled, the client transmits only a SHA-256 hash instead of the raw query body. In this scenario, request.query is evaluated as undefined, causing the node process to throw a TypeError and crash, resulting in a potential Denial of Service vulnerability.

Exploitation Methodology

Exploitation of this vulnerability requires no authentication and can be performed with standard command-line tools. An attacker begins by sending a baseline introspection request formatted with standard spacing. The server intercepts this query and returns a 403 ForbiddenAccess error indicating that the request is not authorized.

To execute the bypass, the attacker reformats the request payload to strip all whitespace between the GraphQL keywords and their arguments. For example, replacing the standard sequence __schema { with __schema{ prevents the custom validator from triggering. The request bypasses the validation plugin entirely and reaches the schema interpreter.

The GraphQL parser successfully resolves this compressed string and executes the introspection query. The server then responds with a complete JSON representation of the schema. This exposes all available types, queries, mutations, and fields to the unauthenticated client.

Security Impact Assessment

The primary impact of a schema introspection bypass is comprehensive information disclosure. By dumping the GraphQL schema, an unauthenticated attacker maps out the entire data model of the OpenCTI deployment. This includes hidden administrative fields, experimental queries, and the structural relationships of threat intelligence data.

Additionally, exposure of the schema highlights specific mutation points. This allows attackers to identify potential input parameters and design targeted exploitation payloads for other vulnerabilities, such as injection points or privilege escalation pathways. The leaked metadata significantly reduces the effort required to conduct sophisticated, multi-stage attacks against the application.

From an operational perspective, repeated execution of complex introspection queries can exhaust server CPU and memory resources. Attackers can weaponize these large, nested queries to orchestrate application-layer Denial of Service attacks. Given these factors, the CVSS base score is calculated at 6.5, reflecting partial confidentiality and availability impacts.

Remediation & Detection Guidance

The primary remediation strategy is upgrading the OpenCTI platform to version 6.1.9 or later. This replaces the flawed string validation array with a more inclusive filter. To ensure absolute protection, organizations should verify that the backend configuration has PLAYGROUND_ENABLED set to false in production environments.

A more robust programmatical solution is to avoid custom string-matching validation plugins entirely. Instead, developers should rely on native Abstract Syntax Tree (AST) validation rules. Implementing the NoSchemaIntrospectionCustomRule provided by the standard graphql package ensures that introspection requests are blocked safely regardless of request formatting or whitespace encoding.

For immediate network-level mitigation, Web Application Firewalls (WAF) can be configured to inspect payloads destined for /graphql. Rules should match the regular expressions __schema or __type on any unauthenticated requests. Security Operations Centers should also monitor application logs for unhandled TypeError exceptions associated with the GraphQL plugin.

Official Patches

OpenCTI-PlatformGitHub Security Advisory GHSA-4mvw-j8r9-xcgc

Fix Analysis (1)

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:L
EPSS Probability
0.44%
Top 65% most exploited

Affected Systems

OpenCTI Platform (backend GraphQL service)

Affected Versions Detail

Product
Affected Versions
Fixed Version
opencti
Citeum
< 6.1.96.1.9
AttributeDetail
CWE IDCWE-284
Attack VectorNetwork
CVSS v3.1 Score6.5
EPSS Score0.00442
ImpactPartial Confidentiality, Partial Availability
Exploit Statuspoc
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1592Gather Victim Host Information
Reconnaissance
T1082System Information Discovery
Discovery
CWE-284
Improper Access Control

Improper Access Control occurs when software does not restrict or incorrectly restricts access to a resource from an unauthorized actor.

Vulnerability Timeline

Code patch committed to OpenCTI GitHub repository
2024-06-06
GitHub Security Advisory GHSA-4mvw-j8r9-xcgc published
2024-11-18
CVE-2024-37155 assigned and published to NVD
2024-11-18

References & Sources

  • [1]Vulnerable Source File in OpenCTI Repository
  • [2]OpenCTI Official Commit Fix
  • [3]CVE-2024-37155 Record on CVE.org
  • [4]NVD Vulnerability Details
  • [5]Wiz Vulnerability Database Overview

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 6 hours 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
6 views•9 min read
•about 7 hours 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
5 views•10 min read
•about 8 hours ago•CVE-2026-113787
6.1

CVE-2026-113787: Stored Cross-Site Scripting via Unescaped Style Attributes in odf-kit

CVE-2026-113787 is a stored Cross-Site Scripting (XSS) and HTML injection vulnerability affecting the odf-kit npm package from version 0.6.0 prior to 0.14.2. The HTML conversion engines (odtToHtml and odsToHtml) interpolate document-controlled styling and image attributes directly into inline style and src attributes without escaping double-quote characters. A remote attacker can supply a crafted .odt or .ods document to break out of HTML attribute boundaries and execute arbitrary JavaScript in the context of any web application rendering the converted HTML.

Alon Barad
Alon Barad
5 views•11 min read
•about 22 hours ago•GHSA-M3QR-FVP4-78XJ
5.3

GHSA-m3qr-fvp4-78xj: Authentication Bypass and Log Disclosure in Basekick Labs Arc

GHSA-m3qr-fvp4-78xj is an authentication bypass and information disclosure vulnerability in Arc, an open-source, SQL-native time-series database developed by Basekick Labs and written in Go. Due to an improper route registration sequence within the Go Fiber HTTP server initialization pipeline, the application registered the /api/v1/logs endpoint prior to mounting the global authentication middleware. Because Fiber evaluates route handlers in strict declaration order and terminates request traversal when a handler returns without invoking c.Next(), unauthenticated remote callers can query the logs endpoint and retrieve up to 10,000 buffered operational log entries even when authentication is enabled.

Alon Barad
Alon Barad
8 views•8 min read
•about 23 hours ago•CVE-2026-62848
7.3

CVE-2026-62848: Local Arbitrary Code Execution via Unsafe Deserialization in Metalama Named Pipe IPC

CVE-2026-62848 (GHSA-h26j-4vp7-x9w2) is a high-severity unsafe deserialization vulnerability in Metalama, a Roslyn-based meta-programming and code generation framework for C#. The flaw resides in the inter-process communication (IPC) channel used by Metalama within Microsoft Visual Studio. Across versions 2023.0 through 2026.1.18, the framework utilized either Newtonsoft.Json with TypeNameHandling.All or MessagePack with TypelessObjectResolver over local Windows named pipes without enforcing a strict type allow-list. Because the named pipes use predictable identifiers, any local process running under the same Windows user session can connect to the endpoint and transmit crafted serialized payloads, resulting in arbitrary Common Language Runtime (CLR) type instantiation and code execution within the host Visual Studio process.

Alon Barad
Alon Barad
10 views•9 min read
•about 24 hours ago•GHSA-9PPR-WFW9-XVR2
5.3

GHSA-9ppr-wfw9-xvr2: DNS Cache TTL Manipulation Failure in Netfoil via Go Value-Copy Range Iteration

A logic flaw in github.com/tinfoil-factory/netfoil versions 0.3.0 through 0.6.0 prevents the DNS proxy from properly decrementing Time-To-Live (TTL) values on cached DNS responses and enforcing configured maximum TTL limits. Due to an idiomatic Go programming mistake where a range loop modifies value copies of slice elements rather than the underlying slice array, netfoil continually serves DNS answers with their original static TTLs. This condition causes downstream clients and resolvers to retain stale DNS records beyond their intended expiration window and bypasses local MaxTTL administrative policies.

Alon Barad
Alon Barad
8 views•10 min read