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

CVE-2026-30857: Unauthorized Cross-Tenant Knowledge Base Cloning in WeKnora

Alon Barad
Alon Barad
Software Engineer

Mar 9, 2026·7 min read·64 visits

Executive Summary (TL;DR)

An IDOR/BOLA vulnerability in WeKnora < 0.3.0 allows authenticated attackers to clone and exfiltrate other tenants' knowledge bases by providing a known or guessed UUID to the copy endpoint.

WeKnora versions prior to 0.3.0 suffer from a Broken Object Level Authorization (BOLA) vulnerability in the knowledge base duplication endpoint. The vulnerability allows authenticated users to exfiltrate arbitrary knowledge bases across tenant boundaries by exploiting an insecure direct object reference during asynchronous cloning tasks.

Vulnerability Overview

WeKnora is an LLM-powered framework designed for deep document understanding and semantic retrieval. Within its architecture, the application relies on strict tenant isolation to partition knowledge bases, documents, and frequently asked questions across different organizational users. A structural flaw in the authorization model affects versions prior to 0.3.0, specifically within the asynchronous knowledge base duplication functionality.

This vulnerability is classified as a Broken Object Level Authorization (BOLA) or Insecure Direct Object Reference (IDOR) weakness under CWE-639. The application exposes an API endpoint that accepts a target knowledge base identifier but fails to validate whether the authenticated requester possesses explicit access rights to that object. Consequently, the system processes the request solely based on the presence of a valid UUID.

Exploitation allows an authenticated user to initiate a background task that systematically clones a knowledge base belonging to another tenant. The cloned data is entirely transferred into the attacker's administrative domain, exposing sensitive organizational information. The attack requires no specialized privileges beyond standard application access within any tenant workspace.

The primary impact is a full loss of confidentiality for the targeted knowledge base. Because the operation is a non-destructive copy, the integrity and availability of the original data remain entirely unaffected, rendering the attack silent from the perspective of the victim. System administrators must rely on secondary audit logs to detect unauthorized cloning operations.

Root Cause Analysis

The root cause of the vulnerability resides in the data access pattern utilized by the asynchronous task worker. When a user sends a request to the POST /api/v1/knowledge-bases/copy endpoint, the API handler enqueues a ProcessKBClone task. This task operates independently of the initial HTTP request context, receiving only the source and target identifiers as parameters.

The task worker subsequently invokes the CopyKnowledgeBase service method, which must retrieve the complete configuration and metadata of the source knowledge base. To achieve this, the service calls the GetKnowledgeBaseByID method within the application's repository layer. This repository function is responsible for executing the underlying database query via the GORM library.

The critical failure occurs within this database query, which applies a filter strictly on the primary key id without incorporating the tenant_id associated with the execution context. In multi-tenant systems, isolating data access requires appending a tenant constraint to every read and write operation. The absence of this constraint allows the application to retrieve records globally across the entire database.

By relying entirely on the statistical unguessability of UUIDs as a substitute for explicit access control, the system violates fundamental secure design principles. If an attacker discovers, predicts, or leaks a valid UUID belonging to another tenant, the application provides no secondary defense mechanism to prevent unauthorized data retrieval.

Code Analysis

Analyzing the source code reveals the precise nature of the authorization failure at the database level. In WeKnora versions up to 0.2.14, the repository layer implements retrieval operations assuming that the calling service has already performed necessary authorization checks. However, the service layer delegates this responsibility downward, resulting in a gap where no checks occur.

The vulnerable implementation of GetKnowledgeBaseByID queries the database using a simple Where("id = ?", id) clause. This structure instructs the Object-Relational Mapper (ORM) to return the first matching record regardless of the logical boundaries established by the application's multi-tenant architecture.

// internal/application/repository/knowledgebase.go
// Vulnerable Implementation
func (r *knowledgeBaseRepository) GetKnowledgeBaseByID(ctx context.Context, id string) (*types.KnowledgeBase, error) {
	var kb types.KnowledgeBase
	// Only filters by ID, ignoring the tenant context
	if err := r.db.WithContext(ctx).Where("id = ?", id).First(&kb).Error; err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			return nil, ErrKnowledgeBaseNotFound
		}
		return nil, err
	}
	return &kb, nil
}

The patch introduced in version 0.3.0 correctly enforces tenant isolation directly within the SQL query construction. The remediated code extracts the tenant_id from the provided context and appends it to the Where clause. This structural change guarantees that the database engine itself rejects access attempts where the record's ownership does not match the requester's context.

// internal/application/repository/knowledgebase.go
// Patched Implementation
func (r *knowledgeBaseRepository) GetKnowledgeBaseByID(ctx context.Context, id string) (*types.KnowledgeBase, error) {
	var kb types.KnowledgeBase
	// Extract tenantID from context
	tenantID := ctx.Value(types.TenantIDContextKey).(uint64)
	
	// Enforce tenant scoping in the query
	if err := r.db.WithContext(ctx).Where("id = ? AND tenant_id = ?", id, tenantID).First(&kb).Error; err != nil {
		if errors.Is(err, gorm.ErrRecordNotFound) {
			return nil, ErrKnowledgeBaseNotFound
		}
		return nil, err
	}
	return &kb, nil
}

Exploitation Methodology

Exploiting CVE-2026-30857 requires the attacker to fulfill two specific preconditions. First, the attacker must possess a valid, authenticated session within any tenant workspace on the vulnerable WeKnora instance. Second, the attacker must acquire the exact UUID of the target knowledge base they intend to clone, which represents the primary barrier to exploitation.

The attack sequence begins with the generation of an HTTP POST request directed at the knowledge base duplication endpoint. The attacker structures the JSON payload to include the victim's UUID in the source_id field. Because the endpoint does not mandate a specific target_id, the system will automatically allocate a new identifier within the attacker's environment.

curl -X POST http://<weknora-host>/api/v1/knowledge-bases/copy \
  -H "Authorization: Bearer <ATTACKER_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"source_id":"<VICTIM_KB_UUID>","target_id":""}'

Upon receiving the request, the server responds immediately with an HTTP 200 OK status, confirming that the duplication task has entered the asynchronous processing queue. This decoupling of the request and the execution means the exploit does not require maintaining an active connection while the data transfer occurs in the background.

Once the background worker completes the execution cycle, the application materializes a comprehensive duplicate of the victim's knowledge base within the attacker's administrative dashboard. The attacker gains unrestricted read access to all cloned documents, semantic vectors, and internal FAQ structures, completing the exfiltration process.

Impact Assessment & Remediation

The security impact of this vulnerability is strictly confined to data confidentiality, but the severity within that domain is high. An attacker successfully executing this technique extracts entire repositories of processed organizational intelligence. For enterprises utilizing WeKnora to parse proprietary documentation, financial records, or internal policies, this represents a complete compromise of sensitive informational assets.

The CVSS 3.1 base score of 5.3 accurately reflects the technical parameters of the flaw. The Attack Complexity is rated as High specifically because the vulnerability relies on the attacker acquiring a 128-bit UUID prior to exploitation. Since the application does not naturally expose external tenant UUIDs through normal operation, the attacker must rely on secondary information disclosure vectors, social engineering, or side-channel leakage to obtain the requisite identifier.

Remediation requires upgrading the WeKnora deployment to version 0.3.0 or later. The update introduces systemic tenant boundary enforcement at the database abstraction layer, permanently neutralizing the authorization bypass. Organizations running affected versions should apply the patch immediately to secure multi-tenant deployments against cross-tenant data access.

For environments where immediate patching is not feasible, administrators can detect active exploitation by implementing targeted log analysis. Security operations teams should correlate asynchronous task creation events, specifically searching for instances where the authenticated user initiating a knowledge base copy does not match the canonical owner of the source_id specified in the task parameters.

Technical Appendix

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

Affected Systems

WeKnora Knowledge Base Module (<= 0.2.14)

Affected Versions Detail

Product
Affected Versions
Fixed Version
WeKnora
Tencent
< 0.3.00.3.0
AttributeDetail
CWE IDCWE-639
Attack VectorNetwork (Authenticated)
CVSS v3.1 Score5.3
EPSS Score0.00028
Exploit StatusProof of Concept
CISA KEVNot Listed

MITRE ATT&CK Mapping

T1213.003Data from Information Repositories: Knowledge Bases
Collection
T1048Exfiltration Over Alternative Protocol
Exfiltration
CWE-639
Authorization Bypass Through User-Controlled Key

The system does not properly authorize a user's request to access a specific object via its identifier.

Vulnerability Timeline

Advisory published on GitHub
2026-03-06
CVE-2026-30857 published in NVD and CVE.org
2026-03-07
Issue officially reported as fixed in version 0.3.0
2026-03-07

References & Sources

  • [1]NVD Record
  • [2]CVE Record
  • [3]GitHub Security Advisory

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

•33 minutes ago•CVE-2026-119203
7.1

CVE-2026-119203: Infinite Loop in pypdf Standard Cross-Reference Table Parser

CVE-2026-119203 is a denial-of-service vulnerability affecting the pypdf library in versions prior to 6.21.4. The flaw occurs within the standard cross-reference (xref) table parsing routine when processing truncated or malformed PDF streams that terminate before a valid trailer dictionary is encountered. Because the parser attempts to rewind the stream pointer by a fixed offset whenever the trailer token is absent without verifying forward progress, hitting the end-of-file (EOF) or non-advancing tokens causes the parser to re-read the same byte offset indefinitely. An unauthenticated attacker can exploit this flaw by supplying a crafted PDF document to an application using pypdf, resulting in continuous CPU consumption and thread exhaustion.

Amit Schendel
Amit Schendel
2 views•9 min read
•about 2 hours ago•CVE-2026-118759
7.5

CVE-2026-118759: Cross-Tenant Pod Log Exposure via Authorization Bypass in Kubeflow Pipelines

Prior to version 2.18.0, the Kubeflow Pipelines API server contains a missing authorization and confused deputy vulnerability in its run log streaming endpoint. The HTTP handler for `GET /apis/v1alpha1/runs/{run_id}/nodes/{node_id}/log` fails to propagate incoming request headers to gRPC metadata and omits caller authorization checks against the requested run. Furthermore, the backend accepts the caller-supplied `node_id` parameter directly as a Kubernetes pod name without verifying that the pod belongs to the specified pipeline run. An attacker with network access to the API server who knows a valid run identifier can read live or archived execution logs from any pod containing a `main` container within the run's Kubernetes namespace.

Alon Barad
Alon Barad
4 views•10 min read
•about 3 hours ago•CVE-2026-118761
7.5

CVE-2026-118761: Pre-Authorization Decompression Bomb Denial of Service in Kubeflow Pipelines API Server

A high-severity Denial of Service (DoS) vulnerability exists in Kubeflow Pipelines prior to version 2.18.0 due to improper handling of highly compressed archive files (CWE-409). The API server decompresses uploaded ZIP and gzip-compressed TAR archives directly into memory without bounding the expanded byte stream or archive traversal metadata. Because decompression occurs before namespace-level authorization in multipart upload handlers, an unauthenticated or unauthorized attacker with network access to the API server can exhaust container heap memory and trigger Out-Of-Memory (OOM) terminations.

Amit Schendel
Amit Schendel
4 views•11 min read
•about 4 hours ago•CVE-2026-118763
7.4

CVE-2026-118763: Cross-Origin Credential Exposure in @sigstore/oci

A credential exposure vulnerability exists in the @sigstore/oci library prior to version 0.7.2. The RegistryClient implementation stores sensitive authentication headers, including Bearer tokens, Basic authentication credentials, and custom Docker configuration headers, as client-wide defaults on its shared HTTP client instance. When uploading binary blobs via the OCI distribution specification, the client extracts the target upload URI from the server-supplied Location header and dispatches an independent HTTP PUT request. If a compromised or untrusted registry returns a cross-origin URI in the Location header, the client transmits the stored authentication credentials directly to the third-party host.

Alon Barad
Alon Barad
7 views•10 min read
•about 7 hours ago•CVE-2026-119282
7.3

CVE-2026-119282: OS Command Injection via Plugin Options in Nx (@nx/maven and @nx/gradle)

An OS command injection and argument injection vulnerability exists in the Nx build system and its official Maven (@nx/maven) and Gradle (@nx/gradle) plugins. When constructing the project dependency graph, the plugins invoke underlying Java build wrappers via subshells while interpolating unsanitized plugin options directly from nx.json into the command arguments. An attacker who supplies a crafted nx.json file via a repository or pull request can execute arbitrary shell commands with the privileges of the user or CI/CD runner invoking any Nx command that computes the project graph.

Amit Schendel
Amit Schendel
7 views•10 min read
•about 8 hours ago•CVE-2026-59978
7.5

CVE-2026-59978: Persistent Denial of Service via Array Injection in AdminNeo

AdminNeo versions 4.6.2 through 5.4.1 contain an improper input validation vulnerability (CWE-20) in the version verification endpoint (?script=version). An unauthenticated remote attacker can submit a crafted HTTP POST request containing an array parameter for 'version', which is serialized into a shared server-side temporary cache file without type checking or authentication. On subsequent requests, the application deserializes this cached array and passes it to cookie() and rawurlencode(), triggering an uncaught fatal TypeError in PHP 8.x environments and causing a persistent 24-hour Denial of Service (DoS) for all users.

Amit Schendel
Amit Schendel
6 views•8 min read