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



GHSA-9HC2-HJX8-Q6PV

GHSA-9HC2-HJX8-Q6PV: Remote Code Execution in TidGi Desktop via Malicious TiddlyWiki Repository Import

Alon Barad
Alon Barad
Software Engineer

Jul 14, 2026·5 min read·14 visits

Executive Summary (TL;DR)

Unauthenticated remote code execution occurs when TidGi Desktop automatically registers and runs malicious startup modules found in imported TiddlyWiki repositories.

A critical remote code execution vulnerability exists in TidGi Desktop up to version 0.13.0. The flaw allows an attacker to execute arbitrary code with Node.js privileges when a user imports or clones a malicious TiddlyWiki repository. This occurs due to the automatic execution of 'startup' modules defined in user-imported tiddler files.

Vulnerability Overview

TidGi Desktop is a desktop-based manager for TiddlyWiki workspaces, providing users with Git integration and synchronization features. When running local or cloned wikis, the application spins up a Node.js-based wiki worker process to compile and serve the workspace.

The attack surface of this application expands significantly when it imports third-party wikis. A severe vulnerability exists within the workspace initialization phase. This flaw permits arbitrary code execution if an attacker convinces a user to import or clone a maliciously crafted TiddlyWiki repository.

The bug class is categorized as Improper Control of Generation of Code ('Code Injection'), tracking under CWE-94. Because the wiki worker executes with full Node.js privileges, arbitrary code executed within this context compromises the underlying host operating system.

Root Cause Analysis

The root cause lies in TiddlyWiki's core initialization design and TidGi Desktop's lack of sandboxing during the workspace boot sequence. When the application loads a wiki, it performs automatic discovery of tiddler files from the local directory structure. This process is handled recursively, reading and registering files ending in the .tid extension.

During the boot phase, the system iterates over all registered tiddlers. If a loaded tiddler contains the metadata field module-type set to a valid system category such as startup, the loader treats the file as an executable plugin module. This metadata tag instructs TiddlyWiki's engine to register the file content as executable JavaScript.

Finally, during the execution phase, the bootstrapper collects all modules categorized under the startup type. It calls their exported startup functions sequentially. There are no isolation barriers or validation checks to ensure that these modules originate from a trusted vendor space or signed package, resulting in immediate execution of user-supplied code.

Code Analysis

In TidGi Desktop's wiki worker initialization pipeline, specifically within src/services/wiki/wikiWorker/loadWikiTiddlersWithSubWikis.ts, the application reads the filesystem contents and registers tiddlers directly into the workspace memory without validating the attributes of the loaded objects:

const tiddlerFiles = wikiInstance.loadTiddlersFromPath(subWikiTiddlersPath);
for (const tiddlerFile of tiddlerFiles) {
    // Unconditionally add tiddlers to the active wiki instance
    wikiInstance.wiki.addTiddlers(tiddlerFile.tiddlers);
}

Once added, the TiddlyWiki core bootloader (node_modules/tiddlywiki/boot/boot.js) parses these tiddlers inside defineTiddlerModules. It converts tiddlers with module-type fields into executable modules:

$tw.Wiki.prototype.defineTiddlerModules = function() {
    this.each(function(tiddler, title) {
        if (tiddler.hasField("module-type") && (!tiddler.hasField("draft.of"))) {
            switch (tiddler.fields.type) {
                case "application/javascript":
                    $tw.modules.define(
                        tiddler.fields.title,
                        tiddler.fields["module-type"],
                        tiddler.fields.text
                    );
                    break;
            }
        }
    });
};

Because the system is running in a Node.js backend context rather than a browser sandbox, the subsequent execution of $tw.boot.remainingStartupModules invokes the custom startup hook. The worker thread directly runs the arbitrary payload under the permissions of the parent desktop application process.

Exploitation Methodology

To execute the attack, an adversary constructs a malicious TiddlyWiki repository. This repository contains a customized tiddler file located under the tiddlers/ directory structure, for example, tiddlers/payload.tid. The attacker structures the file with specific metadata tags to register it as a startup module.

title: $:/plugins/poc/startup.js
type: application/javascript
module-type: startup
 
exports.startup = function() {
  require('child_process').execSync('touch /tmp/TidGi-RCE-PoC.txt');
};

Once the victim clones this repository via the TidGi interface or loads the folder locally, the workspace boot sequence is triggered automatically. The loader detects the metadata, registers the module, and invokes the exported startup method. This spawns the operating system command specified in the execSync payload.

No authorization is needed, as the exploit leverages the standard repository import workflow. The only prerequisite is user interaction to import or clone the malicious repository folder into TidGi Desktop.

Impact Assessment

The security impact of this vulnerability is critical, reflected by its CVSS base score of 9.6. By gaining arbitrary code execution within the wiki worker, an attacker effectively gains full control over the user's host environment under the privilege level of the running application.

An attacker can read, modify, or delete sensitive local files, access environmental credentials, or extract SSH keys and system configuration files. Since the worker process has unrestricted outbound network connectivity, extracted secrets can be exfiltrated easily over standard protocols.

Furthermore, the execution capability allows the attacker to establish persistent access. By executing system commands, the payload can install permanent backdoors, modify startup configurations, or register persistent execution tasks on the victim's operating system.

Remediation & Mitigation

Currently, there is no official patched release for TidGi Desktop to resolve this flaw. Users should refrain from importing or cloning untrusted TiddlyWiki repositories. For developers or maintainers of downstream forks, implementing defense-in-depth mitigations is highly advised.

One approach is restricting the allowed values of module-type on user-imported tiddlers. System-level modules like startup should only be loaded from internal or signed plugin spaces. Below is an example of checking and rejecting unsafe modules during definition:

const ALLOWED_USER_MODULE_TYPES = ['widget', 'macro', 'filter', 'parser'];
if (!ALLOWED_USER_MODULE_TYPES.includes(tiddler.fields['module-type'])) {
    return;
}

Additionally, evaluating imported javascript modules in a sandboxed context (such as the vm module in Node.js) rather than the main thread will limit access to dangerous native modules like child_process and fs.

Technical Appendix

CVSS Score
9.6/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H

Affected Systems

TidGi Desktop

Affected Versions Detail

Product
Affected Versions
Fixed Version
TidGi Desktop
Lin Onetwo
<= 0.13.0null
AttributeDetail
CWE IDCWE-94
Attack VectorNetwork (AV:N)
CVSS Score9.6
Exploit StatusPoC
KEV StatusNot Listed
ImpactRemote Code Execution (RCE)

MITRE ATT&CK Mapping

T1204.002User Execution: Malicious File
Execution
T1059.007Command and Scripting Interpreter: JavaScript
Execution
CWE-94
Improper Control of Generation of Code ('Code Injection')

References & Sources

  • [1]GitHub Security Advisory GHSA-9HC2-HJX8-Q6PV
  • [2]Vendor 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

•about 20 hours ago•CVE-2026-12243
7.5

CVE-2026-12243: Incomplete Path Traversal Validation and Percent-Encoding Bypass in NLTK

CVE-2026-12243 is a path traversal vulnerability in the Natural Language Toolkit (NLTK) version 3.9.4. The flaw exists because the input validation routine fails to account for percent-encoded directory traversal sequences like '..%2f' before passing them to urllib.request.url2pathname(), which decodes them into active traversal sequences.

Amit Schendel
Amit Schendel
5 views•8 min read
•about 21 hours ago•CVE-2026-73654
8.5

CVE-2026-73654: Prototype Pollution in Trigger.dev leading to Cascading Denial of Service

CVE-2026-73654 is a high-severity prototype pollution vulnerability in Trigger.dev. The flaw occurs during the handling of run-metadata updates through the PUT /api/v1/runs/:runId/metadata endpoint. Because user-supplied keys are parsed directly by the @jsonhero/path library without sanitization, an authenticated attacker with low privileges can pollute the global Object.prototype. This causes database queries via Prisma ORM to fail validation and induces unhandled exceptions in the Prometheus metrics client, resulting in a process-wide denial of service.

Alon Barad
Alon Barad
11 views•6 min read
•about 23 hours ago•CVE-2026-73559
6.5

CVE-2026-73559: Uncontrolled Resource Consumption in vLLM API completions

CVE-2026-73559 is an uncontrolled resource consumption vulnerability in the vLLM engine, specifically within the /v1/completions API endpoint, allowing authenticated attackers to cause application-level denial of service via unbounded prompt arrays.

Amit Schendel
Amit Schendel
10 views•5 min read
•1 day ago•CVE-2026-54526
9.9

CVE-2026-54526: Strict Template Referencing Bypass and Privilege Escalation in Argo Workflows

A critical security bypass vulnerability in Argo Workflows allows authenticated attackers with workflow submission privileges to bypass 'Strict' or 'Secure' template referencing restrictions. By injecting unvalidated fields into the nested ArtifactGC configuration, attackers can execute arbitrary pod patches, leading to host namespace escape and cluster-wide privilege escalation.

Alon Barad
Alon Barad
15 views•6 min read
•1 day ago•CVE-2026-54249
6.8

CVE-2026-54249: Server-Side Request Forgery via Confused Deputy in Pydantic AI UI Adapters

A Server-Side Request Forgery (SSRF) / Confused Deputy vulnerability has been identified in Pydantic AI UI Adapters (such as VercelAIAdapter). Under certain conditions, a malicious client can supply manipulated message history with provider metadata that forces the server to resolve files within privileged cloud environments (AWS S3, Google Cloud Storage) or model providers. This occurs because the adapters deserialize client-provided metadata structures directly into UploadedFile instances without validation, which are subsequently fetched using high-privilege server credentials.

Alon Barad
Alon Barad
7 views•7 min read
•1 day ago•GHSA-RM43-82J9-R4MJ
8.2

GHSA-RM43-82J9-R4MJ: Path Traversal (Arbitrary File Read) in atomic-agents-stack Dashboard

A path traversal vulnerability in the optional dashboard server of atomic-agents-stack before version 1.1.0 allows unauthenticated remote attackers to read arbitrary files from the host filesystem.

Amit Schendel
Amit Schendel
8 views•6 min read