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-21887

CVE-2026-21887: Server-Side Request Forgery in OpenCTI Data Ingestion Component

Amit Schendel
Amit Schendel
Senior Security Researcher

Jun 22, 2026·7 min read·17 visits

Executive Summary (TL;DR)

A semi-blind Server-Side Request Forgery (SSRF) in OpenCTI allows authenticated low-privileged users to probe internal network services and query cloud metadata endpoints by supplying absolute URLs to the platform's feed ingestion engine.

A technical analysis of CVE-2026-21887, a Server-Side Request Forgery (SSRF) vulnerability in OpenCTI. The flaw occurs in the platform's data ingestion mechanism, which processes user-supplied feed URLs via Axios under a default configuration. Authenticated users with low privileges can exploit this to pivot into internal infrastructure, target metadata services, and scan private networks.

Vulnerability Overview

The OpenCTI platform relies on an ingestion engine to import external cyber threat intelligence knowledge. This ingestion framework supports various data schemas and delivery methods, such as TAXII streams, RSS updates, and structured CSV documents. Analysts use these feeds to synchronize indicators of compromise and observables directly into their central repository.

Because threat intelligence feeds are hosted on external infrastructures, the platform exposes an input surface allowing authorized users to register remote server URLs. Once registered, the backend scheduling engine periodically issues HTTP requests to pull the feeds. This mechanism creates an attack surface if input validation is missing, as the backend server acts as a proxy for any outbound HTTP communication initiated by users.

CVE-2026-21887 represents a classic Server-Side Request Forgery vulnerability where the platform fails to restrict or validate the target destination before sending the request. The application relies on the Axios library under its default settings to execute HTTP requests. This architecture allows low-privileged, authenticated users to abuse the system's role and manipulate outbound requests to target internal interfaces and local services.

Root Cause Analysis

The primary technical defect resides in the execution flow of the data ingestion scheduler. When processing ingestion configurations, the backend retrieves the user-configured URL string directly from the database and passes it to an Axios client instance. Axios is a promise-based HTTP client designed for Node.js applications that handles absolute and relative URLs dynamically.

Axios contains a design pattern where any parameter containing an absolute URI scheme (such as http:// or https://) overrides any configured baseURL. In OpenCTI's implementation, even if the Axios instance is constructed with restrictions, passing the user-defined absolute URL forces Axios to discard local constraints and target the supplied address directly. The application does not deploy a custom connection agent or an IP filter to screen resolving addresses.

This behavior is problematic when deploying applications within private cloud environments or isolated networks. Because the Node.js runtime executes with the host's networking permissions, Axios resolves and routes requests to loopback adapters, internal gateways, and cloud metadata services. The system does not implement a validation pass or custom DNS resolution checking before establishing the TCP connection socket.

Code Analysis & Patch Walkthrough

Prior to version 6.8.16, the data ingestion component implemented direct, unvalidated connections. The following simplified snippet illustrates the vulnerable implementation pattern inside the ingestion module:

// Vulnerable Implementation
async function fetchThreatFeed(userSuppliedUrl) {
  const config = {
    timeout: 10000,
    headers: { 'Accept': 'application/xml, application/json' }
  };
  // Axios resolves the absolute URL directly without validating the destination host
  const response = await axios.get(userSuppliedUrl, config);
  return response.data;
}

To remediate this issue, the maintainers integrated strict URL parsing and address verification. The patched version validates that the target host does not resolve to an IP address within private or loopback ranges before initiating the TCP handshake. The following code illustrates the safe implementation introduced in the patch:

// Patched Implementation with Safe Lookup Validation
const dns = require('dns');
const ipRangeCheck = require('ip-range-check');
 
const PRIVATE_RANGES = ['127.0.0.0/8', '10.0.0.0/8', '172.16.0.0/12', '192.168.0.0/16', '169.254.0.0/16'];
 
async function validateUrl(targetUrl) {
  const parsedUrl = new URL(targetUrl);
  const hostname = parsedUrl.hostname;
 
  return new Promise((resolve, reject) => {
    dns.lookup(hostname, (err, address) => {
      if (err) return reject(new Error('DNS resolution failed'));
      if (ipRangeCheck(address, PRIVATE_RANGES)) {
        return reject(new Error('Forbidden target: IP is within a private network range'));
      }
      resolve(address);
    });
  });
}

Although this validation pass reduces the attack surface, developers must ensure that the validation is not vulnerable to DNS rebinding. If the application resolves the DNS record once during validation, and then resolves it again during the actual HTTP request, an attacker can configure a malicious nameserver to return a public IP first and then a private IP. Implementing a pinned IP connection agent or using the validated IP directly in the Axios request is necessary to prevent DNS rebinding variants.

Exploitation Methodology & Threat Vectors

An attacker must obtain standard credentials with permissions to define or modify ingestion feeds to exploit this flaw. Once logged in, the attacker initiates a request to register a new threat feed, passing a target loopback or cloud metadata address as the source URI. For instance, to target the internal Redis or Elasticsearch instances within the container network, the attacker enters http://elasticsearch:9200/_cat/indices or http://127.0.0.1:6379/.

The diagram below outlines the communication flow during an exploitation attempt:

Because the ingestion worker expects a highly specific XML or JSON structure, querying generic internal services causes the parser to fail. The application logs the connection details or the parsing failure, exposing the internal service's presence and state to the attacker. This error channel enables port scanning and asset discovery across the private network, transforming the OpenCTI server into an internal network reconnaissance tool.

Impact & Post-Exploitation Assessment

The impact of CVE-2026-21887 is significant due to the role OpenCTI plays in security operations environments. By acting as a trusted node within a corporate network, the OpenCTI server often has direct network routes to critical assets like log management platforms, directories, and internal development tools. An attacker leverages this trusted path to bypass traditional perimeter firewalls and access unauthenticated internal APIs.

In cloud environments, the SSRF can lead to a full infrastructure takeover if the host can reach the Instance Metadata Service. On AWS, querying http://169.254.169.254/latest/meta-data/iam/security-credentials/ reveals the temporary access keys assigned to the server's IAM role. If the IAM role possesses write permissions over AWS resources, the attacker gains control over external infrastructure assets.

The CVSS v3.1 score is calculated at 7.7. The changed scope (S:C) reflects that the vulnerability allows the attacker to pivot from the application layer to the host's physical or virtual network, breaching the isolation boundaries of the platform. Since the attacker must be authenticated to access the ingestion configuration, the privilege requirement is set to Low, which moderates the score.

Remediation & Defense-in-Depth

The primary remediation path requires upgrading all OpenCTI components and associated client libraries, such as pycti, to version 6.8.16 or higher. The update replaces default HTTP clients with secure instances that restrict network resolution to public IP addresses. Organizations must verify that all worker nodes and backend API servers run the patched container images.

When patching is not immediately feasible, system administrators should deploy egress firewall policies on the OpenCTI host. In a Docker or Kubernetes environment, configure network policies to explicitly deny outgoing traffic to private subnets (RFC 1918) and the link-local address 169.254.169.254. This ensures that even if the application processes an arbitrary absolute URL, the underlying network layer blocks the connection.

Additionally, cloud engineers should configure metadata services to enforce version 2 tokens and restrict token hop limits. On AWS, setting the IMDSv2 Hop Limit to 1 prevents containerized workloads on a bridge network from accessing host metadata. This mitigation prevents credential extraction even if an application-layer SSRF vulnerability exists.

Official Patches

CiteumFix commit for SSRF in ingestion engine

Fix Analysis (1)

Technical Appendix

CVSS Score
7.7/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
EPSS Probability
0.21%
Top 89% most exploited

Affected Systems

OpenCTI Platform Backendpycti Python Package

Affected Versions Detail

Product
Affected Versions
Fixed Version
OpenCTI
Citeum
< 6.8.166.8.16
pycti
Citeum
< 6.8.166.8.16
AttributeDetail
CWE IDCWE-918
Attack VectorNetwork
CVSS v3.1 Score7.7
EPSS Score0.00212 (0.21%)
ImpactSemi-Blind Server-Side Request Forgery
Exploit StatusNo Public Exploit Available
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1005Data from Local System
Collection
CWE-918
Server-Side Request Forgery (SSRF)

The web application fetches a remote resource without validating the user-supplied URL, allowing requests to be sent to arbitrary destinations, including internal systems.

Vulnerability Timeline

Vulnerability published and advisory GHSA-ffm6-vvph-g5f5 released
2026-03-12
OpenCTI version 6.8.16 released containing the security patch
2026-03-12
NVD catalogs CVE-2026-21887 with high severity (7.7)
2026-03-12

References & Sources

  • [1]GitHub Security Advisory GHSA-ffm6-vvph-g5f5
  • [2]NVD - CVE-2026-21887
  • [3]CVE.org - CVE-2026-21887
  • [4]PyPI Advisory PYSEC-2026-118
  • [5]OpenCTI Platform Repository
  • [6]OpenCTI Fix Commit 177a74f

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

•1 day ago•CVE-2026-54068
5.9

CVE-2026-54068: Unauthenticated Server-Side Template Injection and SQLite Exfiltration in SiYuan PKM

An authentication bypass in the SiYuan personal knowledge management system before version 3.7.0 exposes a dynamic icon rendering endpoint. This endpoint processes client-supplied Go template directives. By submitting a crafted request, an unauthenticated remote attacker can leverage registered database template functions to execute arbitrary read-only SQL queries and exfiltrate workspace contents.

Amit Schendel
Amit Schendel
10 views•5 min read
•1 day ago•CVE-2026-54069
9.1

CVE-2026-54069: Authentication Bypass in SiYuan Note via Origin Header Spoofing

CVE-2026-54069 is a critical authentication bypass vulnerability in the SiYuan Note personal knowledge management system. The flaw is located in the HTTP server's middleware handling API authorization, which unconditionally trusts requests carrying a 'chrome-extension://' scheme in the Origin HTTP header, granting administrative access without validating API tokens.

Alon Barad
Alon Barad
9 views•5 min read
•1 day ago•CVE-2026-54089
9.1

CVE-2026-54089: Authentication Bypass by Spoofing in File Browser

CVE-2026-54089 is a critical authentication bypass vulnerability in File Browser affecting instances configured with proxy-based authentication. An unauthenticated remote attacker with direct network access can impersonate arbitrary users or register new accounts by spoofing configured HTTP headers.

Amit Schendel
Amit Schendel
7 views•7 min read
•1 day ago•GHSA-99J7-FHR2-XFJ4
10.0

GHSA-99J7-FHR2-XFJ4: Malicious Remote Code Execution Payload in 'exploration' Cargo Crate

The malicious Cargo package 'exploration' was uploaded to the crates.io registry. During compilation or package import, the crate executes code designed to establish an outbound TCP/HTTP connection, download an external second-stage binary, and execute the binary locally on the host machine. This creates an unauthenticated remote code execution vector impacting developer environments and continuous integration pipelines.

Amit Schendel
Amit Schendel
9 views•6 min read
•1 day ago•CVE-2026-54088
9.3

CVE-2026-54088: Pre-Authentication Remote Code Execution in File Browser Hook Authentication

CVE-2026-54088 is a critical command injection vulnerability in File Browser prior to version 2.63.6. When Hook Authentication is enabled, the application interpolates unsanitized credentials into a shell command, allowing unauthenticated remote code execution.

Alon Barad
Alon Barad
7 views•6 min read
•1 day ago•GHSA-QV4M-M73M-8HJ7
8.8

GHSA-qv4m-m73m-8hj7: Authenticated Arbitrary File Upload leading to Remote Code Execution in NotrinosERP

An authenticated remote code execution vulnerability exists in NotrinosERP (versions up to and including 1.0.0) within the Human Resource Management (HRM) module. Users with employee management permissions can upload arbitrary file types, including PHP scripts, which are written directly to a web-accessible directory. This allows for arbitrary code execution in the context of the web-server user.

Alon Barad
Alon Barad
7 views•6 min read