Description
Dinky's POST /download/uploadFromRsByLocal handler passes the caller-supplied path parameter directly to new File(path) and file.transferTo(dest) with no path validation. The route is marked @SaIgnore and /download/** is excluded from the Sa-Token interceptor, so the only guard is a header equality check against a dinkyToken value whose default (efda1551-7958-4e0f-80a8-dfd107df3e38) is hardcoded in source and shipped to every deployment. Anyone who can reach Dinky's HTTP port (8888 by default) and supplies the hardcoded token can write arbitrary files as the Dinky service account. The default Docker image runs on 8888 with no proxy or authentication and chmod 777 on /opt/dinky, so the application's own classpath, launch scripts, and static assets are writable. Demonstrated impact: overwriting /opt/dinky/config/static/index.html served attacker JavaScript to admin browsers immediately, and writing /opt/dinky/org/dinky/Dinky.class executed attacker code as the Dinky service account at the next JVM start via a classpath-shadow launched by script/bin/auto.sh. Writes are uid 9999 (flink), not root, so /etc, /root, /home, and /usr are refused. Affects Dinky v1.2.5 (the current release) and the development branch, where the code is byte-identical.
Published: 2026-08-06
Score: 9.3 Critical
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability resides in Dinky’s POST /download/uploadFromRsByLocal endpoint, which accepts a client‑supplied path and directly constructs a File object and uses file.transferTo without any path validation. The route bypasses authentication by being marked @SaIgnore and excluded from the Sa-Token interceptor; the only remaining guard is a header equality check against a hard‑coded token value (efda1551‑7958‑4e0f‑80a8‑dfd107df3e38). Because the token is embedded in the source and shipped with every deployment, any host that can reach the service’s HTTP port 8888 can write to any file location that the Dinky service account can access. In the default Docker image the writable directory /opt/dinky is world‑editable, allowing attackers to replace application assets and class files. Demonstrated impact includes overwriting /opt/dinky/config/static/index.html to deliver malicious JavaScript to privileged browsers and dropping a crafted Dinky.class file that is loaded on the next JVM startup, enabling persistent code execution.

Affected Systems

The affected system is the DataLinkDC Dinky product, version 1.2.5, and the current development branch, both of which contain identical code. The vulnerability exists in the bundled Docker image that exposes port 8888, runs without a reverse proxy or authentication layer, and mounts /opt/dinky with 0777 permissions. The service account used for file writes operates under UID 9999 (flink). Direct write access is limited to the application’s own files and directories; system directories such as /etc, /root, /home, and /usr are protected by filesystem permissions.

Risk and Exploitability

The CVSS score of 9.3 indicates critical severity. The EPSS score is not available, but the lack of authentication, the presence of a hard‑coded token, and the existence of a publicly reachable write endpoint make exploitation highly feasible. The vulnerability is not listed in the CISA KEV catalog. An attacker with network reachability to the service can trivially perform arbitrary file writes, potentially leading to remote code execution as the Dinky service account. Because the service account uid 9999 is non‑root, compromise is limited to the application’s writable files, but this is sufficient for persistent compromise through classpath modification or injection of malicious JavaScript.

Generated by OpenCVE AI on August 7, 2026 at 01:23 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the vendor patch that removes the hard‑coded token and enforces path validation in the /download/uploadFromRsByLocal endpoint.
  • Reconfigure or disable the default dinkyToken by setting a strong, unique secret in the configuration files or environment, ensuring that the hard‑coded default is no longer used.
  • Restrict external network access to the Dinky service by placing the container behind a reverse proxy that enforces authentication or by firewalling the HTTP port 8888.
  • Modify filesystem permissions on /opt/dinky to remove world‑write access and restrict the Dinky service account to read‑only on the application’s classpath and static assets.

Generated by OpenCVE AI on August 7, 2026 at 01:23 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 14 Aug 2026 17:15:00 +0000

Type Values Removed Values Added
First Time appeared Dinky
Dinky dinky
CPEs cpe:2.3:a:dinky:dinky:*:*:*:*:*:*:*:*
Vendors & Products Dinky
Dinky dinky

Sat, 08 Aug 2026 03:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'total'}, 'version': '2.0.3'}


Fri, 07 Aug 2026 01:30:00 +0000

Type Values Removed Values Added
First Time appeared Datalinkdc
Datalinkdc dinky
Vendors & Products Datalinkdc
Datalinkdc dinky

Thu, 06 Aug 2026 22:15:00 +0000

Type Values Removed Values Added
Description Dinky's POST /download/uploadFromRsByLocal handler passes the caller-supplied path parameter directly to new File(path) and file.transferTo(dest) with no path validation. The route is marked @SaIgnore and /download/** is excluded from the Sa-Token interceptor, so the only guard is a header equality check against a dinkyToken value whose default (efda1551-7958-4e0f-80a8-dfd107df3e38) is hardcoded in source and shipped to every deployment. Anyone who can reach Dinky's HTTP port (8888 by default) and supplies the hardcoded token can write arbitrary files as the Dinky service account. The default Docker image runs on 8888 with no proxy or authentication and chmod 777 on /opt/dinky, so the application's own classpath, launch scripts, and static assets are writable. Demonstrated impact: overwriting /opt/dinky/config/static/index.html served attacker JavaScript to admin browsers immediately, and writing /opt/dinky/org/dinky/Dinky.class executed attacker code as the Dinky service account at the next JVM start via a classpath-shadow launched by script/bin/auto.sh. Writes are uid 9999 (flink), not root, so /etc, /root, /home, and /usr are refused. Affects Dinky v1.2.5 (the current release) and the development branch, where the code is byte-identical.
Title Dinky Unauthenticated Arbitrary File Write via /download/uploadFromRsByLocal Gated Only by Hardcoded Default Token
Weaknesses CWE-434
References
Metrics cvssV3_1

{'score': 9.8, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H'}

cvssV4_0

{'score': 9.3, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N'}


cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-08-14T16:51:29.559Z

Reserved: 2026-08-04T19:19:05.906Z

Link: CVE-2026-70558

cve-icon Vulnrichment

Updated: 2026-08-08T02:29:48.762Z

cve-icon NVD

Status : Received

Published: 2026-08-06T22:18:26.227

Modified: 2026-08-08T03:16:46.910

Link: CVE-2026-70558

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-07T01:30:04Z

Weaknesses
  • CWE-434

    Unrestricted Upload of File with Dangerous Type