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

CVE-2026-58270: Regular Expression Denial of Service (ReDoS) in Sync-in Server

Amit Schendel
Amit Schendel
Senior Security Researcher

Sep 22, 2026·6 min read·33 visits

Executive Summary (TL;DR)

Authenticated users can cause a complete server-wide denial of service in Sync-in Server by supplying a catastrophic backtracking regular expression to the sync diff endpoint, freezing the Node.js event loop.

CVE-2026-58270 identifies a Regular Expression Denial of Service (ReDoS) vulnerability in Sync-in Server prior to version 2.4.0. An authenticated attacker can supply a complex regular expression in the pathFilters parameter of the sync diff endpoint. When evaluated, this causes catastrophic backtracking, blocking the single-threaded Node.js event loop and rendering the entire server unresponsive.

Vulnerability Overview

The Sync-in Server provides an open-source platform designed for file storage, sharing, and synchronization. The primary entry point for determining differences between client-side and server-side directories is the API endpoint POST /api/app/sync/operation/diff/:id. This endpoint allows clients to optimize operations by filtering synchronization tasks based on file paths. The system exposes an input parameter named pathFilters within the HTTP request body to handle this filtering functionality.

In vulnerable instances (prior to version 2.4.0), the application accepts user-controlled inputs for this parameter and compiles them directly into native JavaScript RegExp objects. Because these inputs are evaluated synchronously against paths during directory traversal, the endpoint exposes a significant attack surface. An attacker can exploit this behavior by introducing complex regular expression patterns designed to exhaust server resources.

Because Node.js runs on a single-threaded architecture, any CPU-intensive synchronous operation immediately impacts application performance. Evaluating a complex regular expression against a large directory structure under these conditions results in thread starvation. The resulting event-loop blockage denies access to all other application features for all active users.

Root Cause Analysis

The underlying technical flaw lies in the handling of the pathFilters property during data transfer object (DTO) validation. The backend employs the class-transformer library to map and sanitize input properties incoming from the request. In the vulnerable configuration, the mapping process lacks constraints on both string length and regular expression syntax structure.

The JavaScript regular expression engine inside the V8 runtime uses a backtracking-based matching algorithm (a Non-deterministic Finite Automaton, or NFA). When a regular expression containing nested quantifiers or overlapping alternations (such as (a+)+) is evaluated against an input string that matches the pattern only partially before failing (such as aaaa...aaac), the engine attempts to evaluate every possible parsing permutation before determining a non-match. This causes the matching complexity to scale exponentially ($O(2^N)$) or as a high-degree polynomial relative to the input length.

Because the V8 regular expression engine executes synchronously within the active thread context, the event loop is unable to process other ticks. This blocks inbound TCP connections, HTTP requests, database transactions, and health checks. System metrics will show 100% CPU utilization on the core running the Node.js process while the process remains completely unresponsive.

Code Analysis

Prior to version 2.4.0, the vulnerability was located in backend/src/applications/sync/dtos/sync-operations.dto.ts. The class SyncDiffDto contained the following insecure instantiation logic:

export class SyncDiffDto {
  // ... other properties
 
  @IsOptional()
  @Transform(({ value }) => (typeof value === 'string' && value.length > 0 ? new RegExp(value, 'i') : null))
  pathFilters?: RegExp = null
}

The implementation shown above executes the new RegExp(value, 'i') constructor directly on any non-empty string. It does not limit the length of value or analyze the input for nested repetitions.

To resolve this issue, the patch implemented in commit b1dcaa1d1c1bb17ab6c31a404cc9cead7efdd979 routes the string validation through a secure helper function named transformPathFilters:

import { BadRequestException } from '@nestjs/common'
import safeRegex from 'safe-regex2'
 
const MAX_PATH_FILTER_LENGTH = 200
const MAX_PATH_FILTER_REPETITIONS = 25
 
export function transformPathFilters(value: unknown): RegExp | null {
  // 1. Verify type structure
  if (typeof value !== 'string' || value.length === 0) {
    return null
  }
 
  // 2. Reject inputs exceeding static length limits
  if (value.length > MAX_PATH_FILTER_LENGTH) {
    throw new BadRequestException('Path filter pattern is too long')
  }
 
  // 3. Prevent runtime syntax compilation errors
  let pathFilter: RegExp
  try {
    pathFilter = new RegExp(value, 'i')
  } catch {
    throw new BadRequestException('Invalid path filter pattern')
  }
 
  // 4. Validate regular expression complexity via AST heuristic analysis
  if (!safeRegex(pathFilter, { limit: MAX_PATH_FILTER_REPETITIONS })) {
    throw new BadRequestException('Unsafe path filter pattern')
  }
 
  return pathFilter
}

This remediation structure enforces verification layers at four distinct stages. The inclusion of the safe-regex2 library analyzes the compiled regular expression's abstract syntax tree (AST) to identify potential catastrophic backtracking scenarios before the pattern can be run against system-level file paths.

Exploitation & Attack Methodology

To exploit this vulnerability, an attacker must first obtain low-privileged credentials on the target Sync-in Server. This is required because the POST /api/app/sync/operation/diff/:id endpoint requires authentication. Once authenticated, the attacker obtains an authorization header or cookie.

The attacker then maps or identifies an existing workspace ID (:id) or creates a directory to synchronize. The exploitation payload contains a classic catastrophic backtracking pattern, such as ^(a+)+b, embedded inside the pathFilters parameter of the sync request.

POST /api/app/sync/operation/diff/workspace-123 HTTP/1.1
Host: target-server.local
Authorization: Bearer <valid_low_privileged_token>
Content-Type: application/json
 
{
  "secureDiff": false,
  "pathFilters": "^(a+)+b"
}

When this payload is submitted, the backend compiles the pattern. During the synchronization phase, the engine attempts to match this pattern against directory files containing long strings of 'a' characters (such as aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa.txt). Because the string ends in .txt instead of b, the regex engine fails to match. The nested quantifiers force the engine to calculate billions of potential matching states, locking up the CPU and preventing the application from handling further operations.

Impact Assessment & Vector Analysis

The CVSS base score of 6.5 reflects a high availability impact with low exploit complexity. Because the server completely stops responding to requests, external reverse proxies or load balancers typically drop connections with gateway timeouts (HTTP 504).

The denial of service state persists as long as the V8 thread continues to compute the permutations. Because there is no default execution timeout for native RegExp.prototype.test() operations in JavaScript, the application remains unresponsive until the process is manually killed or restarted by an orchestrator like Docker or Kubernetes.

This vulnerability does not directly expose files or allow arbitrary code execution. However, the resulting outage can disrupt operational workflows. This makes it an effective tool for attackers seeking to degrade infrastructure during coordinated multi-stage incidents.

Remediation & Defensive Testing

The primary remediation step is to update the Sync-in Server installation to version 2.4.0 or later. This ensures the transformPathFilters security layer is integrated into the validation cycle of the application.

For systems where immediate upgrades are not possible, administrators should deploy Web Application Firewall (WAF) rules. These rules should inspect the body of requests destined for /api/app/sync/operation/diff/ to block known catastrophic backtracking regex signatures (such as nested repeating groups containing wildcard symbols).

To prevent regressions, developers should add defensive unit tests to the CI/CD pipeline. These tests should verify that the application properly handles both malicious and excessively long regular expression strings.

it('rejects unsafe regular expressions with an explicit error', () => {
  const runValidation = () => transformPathFilters('^(a+)+b')
  expect(runValidation).toThrow(BadRequestException)
  expect(runValidation).toThrow('Unsafe path filter pattern')
})

Official Patches

Sync-inGitHub commit fixing the vulnerability by integrating length and AST verification checks.

Fix Analysis (1)

Technical Appendix

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

Affected Systems

Sync-in Server < 2.4.0

Affected Versions Detail

Product
Affected Versions
Fixed Version
Sync-in Server
Sync-in
< 2.4.02.4.0
AttributeDetail
CWE IDCWE-1333: Inefficient Regular Expression Complexity
Attack VectorNetwork (AV:N)
CVSS Score6.5 (Medium)
EPSS Score0.00289 (21.75th percentile)
ImpactHigh Availability Impact (Event Loop Block)
Exploit StatusProof-of-Concept (PoC) available
KEV StatusNot listed

MITRE ATT&CK Mapping

T1499.004Endpoint Denial of Service: Application Exhaustion Flood
Impact
CWE-1333
Inefficient Regular Expression Complexity

The product uses a regular expression that can take exponential time or polynomial time to evaluate against certain inputs, leading to a denial of service.

Known Exploits & Detection

GitHub AdvisoryExploit workflow description detailing how to authenticate and deliver backtracking-inducing payloads to the path filter logic.

Vulnerability Timeline

Vulnerability identified and patch b1dcaa1d1c1bb17ab6c31a404cc9cead7efdd979 authored
2026-06-16
Public security advisory GHSA-jx63-h26r-8cph published and CVE-2026-58270 synchronized
2026-09-21
Sync-in Server version 2.4.0 released containing the official fix
2026-09-21

References & Sources

  • [1]GitHub Security Advisory GHSA-jx63-h26r-8cph
  • [2]NVD CVE-2026-58270 Record
  • [3]Sync-in Server Vulnerability Fix Commit

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 22 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
7 views•10 min read
•about 23 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
•1 day 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
•1 day 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
9 views•10 min read
•2 days 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
•2 days 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