CVE-2025-54798
Low · 2.5tmp allows arbitrary temporary file / directory write via symbolic link `dir` parameter
CVSS
2.5
EPSS
0.4%
Published
Aug 6, 2025
CISA due date
—
Cloudanix analysis
A software component may write temporary files in the wrong place if tricked with a shortcut-like folder, which could let someone tamper with files the application can access.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Moderate
- Impact
- Data Tampering
- Component
- Library
- Class
- Path Traversal
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
The flaw is a path/symlink handling issue in tmp@0.2.3 as used by oakserver/oak. When code creates a temporary file or directory using an attacker-influenced dir parameter, the library may follow a symbolic link instead of safely constraining writes to an intended temporary location. This can allow an attacker who can control the temporary directory path or pre-place a symlink in a writable location to cause the application to create or overwrite files/directories at unintended filesystem paths with the privileges of the running process. Impact is generally limited by application-specific exposure, filesystem permissions, and whether untrusted input can reach the dir option.
Why it matters to the business
Successful exploitation could let an attacker tamper with files used by an affected application, potentially causing application errors, data corruption, or limited privilege escalation if sensitive writable paths are reachable by the application process. The assigned CVSS and EPSS are low, there is no known KEV listing, no ransomware association, and no reported exploit maturity, so this is not currently a broad internet exploitation priority; however, it should still be remediated in normal dependency maintenance because temporary-file vulnerabilities can become more serious in applications that process untrusted uploads, archives, build artifacts, or plugin-controlled paths.
How an attack unfolds
An attacker first needs a way to influence the directory path used for temporary file or directory creation, or a way to prepare a symlink in a location that the vulnerable application later uses for temporary operations. The attacker points the temporary directory parameter at a symbolic link or symlink-containing path that resolves outside the intended temporary area. When the vulnerable tmp@0.2.3 code creates a file or directory, it follows the symlink and writes to the attacker-selected destination instead of a safe temporary location. The practical outcome depends on what the application writes, whether existing files can be overwritten, and the privileges of the process. In a typical web-service context this may lead to file tampering or denial of service; in a privileged service or build pipeline it could potentially be chained with other weaknesses to modify configuration, scripts, cache files, or application-controlled artifacts.
How to fix it
Upgrade oakserver/oak to a revision that includes the fix, specifically commit b60e60330ef227707c4dc13ef0ea36192d894f44 or a later released version containing that commit. Ensure dependency lockfiles no longer resolve tmp to version 0.2.3 where the vulnerable behavior is reachable. If immediate upgrade is not possible, avoid passing attacker-controlled values to temporary-file dir options, force temporary files into a trusted directory owned by the application, reject paths containing symlinks, use lstat/realpath checks before writes, run the service with least-privilege filesystem permissions, and isolate temporary directories per process or workload with restrictive permissions.
How to confirm the fix worked
Confirm the deployed oakserver/oak version or source revision includes commit b60e60330ef227707c4dc13ef0ea36192d894f44 or later. Review package-lock.json, npm-shrinkwrap.json, yarn.lock, pnpm-lock.yaml, deno.lock, vendored dependency manifests, and SBOM output for tmp@0.2.3. Rebuild and redeploy from a clean dependency cache after upgrading. As a functional validation, test any code paths that create temporary files using configurable directories and verify symlinked temporary paths are rejected or resolved only within the intended trusted temporary directory. Confirm runtime service accounts cannot write to sensitive application, system, or configuration paths that are not required for normal operation.
Typical attack path
- Identify an application or workflow using the vulnerable tmp@0.2.3 dependency through oakserver/oak or a downstream package.
- Find an input, plugin, upload, archive extraction, build step, or API path that influences the temporary directory used by the application.
- Create or reference a symbolic link that points from an allowed temporary location to a target path outside the intended directory.
- Trigger the temporary file or directory creation operation in the vulnerable code path.
- Cause the application process to write to the symlink target with its filesystem permissions.
- Use the resulting file write for tampering, disruption, or as part of a chain to gain additional impact.
How to detect it
Look for evidence of unusual symlink use and unexpected file creation around application temporary-file operations. Useful sources include application logs, web/API request logs for parameters that control upload or temporary directories, file integrity monitoring alerts, endpoint telemetry for symlink creation and file writes, container runtime audit logs, CI/build logs, and Linux auditd or EDR filesystem events. Investigate writes by the affected application process to paths outside its expected temporary directory, especially shortly after requests, uploads, archive processing, plugin execution, or build jobs. Search for symlinks inside application-controlled temporary directories that point to application configuration, source directories, startup scripts, credential files, cache directories, or other sensitive locations. Also review dependency and deployment records to identify systems that ran tmp@0.2.3 while exposed to untrusted temporary-directory input. There are no public exploit-specific payload strings or actor-specific indicators known from the provided intelligence.
What your security team should do
- Inventory applications and build workflows that use oakserver/oak from Git or that bundle tmp@0.2.3.
- Prioritize remediation where untrusted users, uploaded content, plugins, CI jobs, or external requests can influence temporary-file locations.
- Upgrade to oakserver/oak commit b60e60330ef227707c4dc13ef0ea36192d894f44 or later and regenerate dependency lockfiles.
- Add dependency scanning rules to flag tmp@0.2.3 and affected oakserver/oak revisions in source repositories and container images.
- Harden runtime permissions so application processes cannot write to source code, startup scripts, service configuration, credential stores, or other high-impact filesystem locations.
- Review temporary-file handling patterns for use of attacker-controlled dir parameters and add canonical path and symlink checks where applicable.
- Because EPSS is low and there is no KEV or known ransomware use, handle through standard patch management unless the affected code path is externally reachable or runs with elevated privileges.
The record
`tmp@0.2.3` is vulnerable to an Arbitrary temporary file / directory write via symbolic link `dir` parameter.
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|---|---|---|
| npm | tmp | 0 | 0.2.4 |
| Chainguard | arangodb-3.11-compat | 0 | 3.11.14.1-r6 |
| Chainguard | foxx-cli | 0 | 2.1.1-r3 |
| Chainguard | kibana-9.1 | 0 | 9.1.3-r0 |
| Chainguard | kibana-9.1-bitnami | 0 | 9.1.3-r0 |
| Chainguard | kibana-9.1-iamguarded | 0 | 9.1.3-r0 |
| Chainguard | kubeflow-centraldashboard | 0 | 1.10.0-r10 |
| Chainguard | langfuse | 0 | 3.125.0-r0 |
| Chainguard | langfuse-compat | 0 | 3.125.0-r0 |
| Chainguard | langfuse-worker | 0 | 3.125.0-r0 |
| Chainguard | lerna | 0 | 8.2.4-r1 |
| Chainguard | opensearch-dashboards-2 | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-alerting-dashboards-plugin | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-anomaly-detection-dashboards-plugin | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-compat | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-config | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-dashboards-maps | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-dashboards-notifications | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-dashboards-observability | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-dashboards-query-workbench | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-dashboards-reporting | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-dashboards-search-relevance | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-dashboards-visualizations | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-fips | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-alerting-dashboards-plugin | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-anomaly-detection-dashboards-plugin | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-config | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-dashboards-maps | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-dashboards-notifications | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-dashboards-observability | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-dashboards-query-workbench | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-dashboards-reporting | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-dashboards-search-relevance | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-dashboards-visualizations | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-index-management-dashboards-plugin | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-ml-commons-dashboards | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-security-analytics-dashboards-plugin | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-fips-security-dashboards-plugin | 0 | 2.19.2-r4 |
| Chainguard | opensearch-dashboards-2-index-management-dashboards-plugin | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-ml-commons-dashboards | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-security-analytics-dashboards-plugin | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-2-security-dashboards-plugin | 0 | 2.19.2-r5 |
| Chainguard | opensearch-dashboards-3 | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-alerting-dashboards-plugin | 0 | 3.5.0-r0 |
| Chainguard | opensearch-dashboards-3-anomaly-detection-dashboards-plugin | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-config | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-dashboards-maps | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-dashboards-notifications | 0 | 3.5.0-r5 |
| Chainguard | opensearch-dashboards-3-dashboards-observability | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-dashboards-query-workbench | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-dashboards-reporting | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-dashboards-search-relevance | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-alerting-dashboards-plugin | 0 | 3.5.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-anomaly-detection-dashboards-plugin | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-config | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-dashboards-maps | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-dashboards-observability | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-dashboards-query-workbench | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-dashboards-reporting | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-dashboards-search-relevance | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-ml-commons-dashboards | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-fips-security-dashboards-plugin | 0 | 3.4.0-r0 |
| Chainguard | opensearch-dashboards-3-ml-commons-dashboards | 0 | 3.2.0-r0 |
| Chainguard | opensearch-dashboards-3-security-dashboards-plugin | 0 | 3.4.0-r0 |
| Chainguard | prism | 0 | 5.14.2-r7 |
| Chainguard | saf | 0 | 1.5.1-r0 |
| Chainguard | vitess-19 | 0 | 19.0.10-r15 |
| Chainguard | vitess-19-binaries | 0 | 19.0.10-r15 |
| Chainguard | vitess-20 | 0 | 20.0.8-r5 |
| Chainguard | vitess-20-binaries | 0 | 20.0.8-r5 |
| Chainguard | vitess-20-compat | 0 | 20.0.8-r5 |
| Chainguard | vitess-21 | 0 | 21.0.5-r6 |
| Chainguard | vitess-21-binaries | 0 | 21.0.5-r6 |
| Chainguard | vitess-21-compat | 0 | 21.0.5-r6 |
| Chainguard | vitess-22 | 0 | 22.0.1-r5 |
| Chainguard | vitess-22-binaries | 0 | 22.0.1-r5 |
| Chainguard | vitess-22-compat | 0 | 22.0.1-r5 |
| Debian:11 | node-tmp | 0 | 0.2.1+dfsg-1+deb11u1 |
| Debian:12 | node-tmp | 0 | No fix |
| Debian:13 | node-tmp | 0 | No fix |
| Debian:13 | node-tmp | 0 | 0.2.2+dfsg+~0.2.3-1.1~deb13u1 |
| Debian:14 | node-tmp | 0 | 0.2.2+dfsg+~0.2.3-1.1 |
| Wolfi | kubeflow-centraldashboard | 0 | 1.10.0-r10 |
| Wolfi | langfuse | 0 | 3.125.0-r0 |
| Wolfi | langfuse-compat | 0 | 3.125.0-r0 |
| Wolfi | langfuse-worker | 0 | 3.125.0-r0 |
| Wolfi | lerna | 0 | 8.2.4-r1 |
| Wolfi | opensearch-dashboards-2 | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-alerting-dashboards-plugin | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-anomaly-detection-dashboards-plugin | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-compat | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-config | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-dashboards-maps | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-dashboards-notifications | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-dashboards-observability | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-dashboards-query-workbench | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-dashboards-reporting | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-dashboards-search-relevance | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-dashboards-visualizations | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-index-management-dashboards-plugin | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-ml-commons-dashboards | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-security-analytics-dashboards-plugin | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-2-security-dashboards-plugin | 0 | 2.19.2-r5 |
| Wolfi | opensearch-dashboards-3 | 0 | 3.2.0-r0 |
| Wolfi | opensearch-dashboards-3-alerting-dashboards-plugin | 0 | 3.5.0-r0 |
| Wolfi | opensearch-dashboards-3-anomaly-detection-dashboards-plugin | 0 | 3.2.0-r0 |
| Wolfi | opensearch-dashboards-3-config | 0 | 3.2.0-r0 |
| Wolfi | opensearch-dashboards-3-dashboards-maps | 0 | 3.2.0-r0 |
| Wolfi | opensearch-dashboards-3-dashboards-notifications | 0 | 3.5.0-r5 |
| Wolfi | opensearch-dashboards-3-dashboards-observability | 0 | 3.2.0-r0 |
| Wolfi | opensearch-dashboards-3-dashboards-query-workbench | 0 | 3.2.0-r0 |
| Wolfi | opensearch-dashboards-3-dashboards-reporting | 0 | 3.2.0-r0 |
| Wolfi | opensearch-dashboards-3-dashboards-search-relevance | 0 | 3.2.0-r0 |
| Wolfi | opensearch-dashboards-3-ml-commons-dashboards | 0 | 3.2.0-r0 |
| Wolfi | opensearch-dashboards-3-security-dashboards-plugin | 0 | 3.4.0-r0 |
| Wolfi | prism | 0 | 5.14.2-r7 |
| Wolfi | saf | 0 | 1.5.1-r0 |
| Wolfi | vitess-20 | 0 | 20.0.8-r5 |
| Wolfi | vitess-20-binaries | 0 | 20.0.8-r5 |
| Wolfi | vitess-20-compat | 0 | 20.0.8-r5 |
| Wolfi | vitess-21 | 0 | 21.0.5-r6 |
| Wolfi | vitess-21-binaries | 0 | 21.0.5-r6 |
| Wolfi | vitess-21-compat | 0 | 21.0.5-r6 |
| Wolfi | vitess-22 | 0 | 22.0.1-r5 |
| Wolfi | vitess-22-binaries | 0 | 22.0.1-r5 |
| Wolfi | vitess-22-compat | 0 | 22.0.1-r5 |
| openSUSE:Tumbleweed | python-bqplot | 0 | 0.12.45-13.1 |
| openSUSE:Tumbleweed | python-nbdime | 0 | 4.0.2-23.1 |
Related vulnerabilities
- GHSA-7c78-jf6q-g5cm tmp: Type-confusion bypass of _assertPath allows path traversal via non-string… Also affects tmp
- CVE-2026-49982 tmp is a temporary file and directory creator for node.js. Also affects tmp
- CVE-2026-44705 tmp is a temporary file and directory creator for node.js. Also affects tmp
- GHSA-ph9p-34f9-6g65 tmp has Path Traversal via unsanitized prefix/postfix that enables directory escape Also affects tmp
- GHSA-6rw7-vpxm-498p qs's arrayLimit bypass in its bracket notation allows DoS via memory exhaustion Also affects arangodb-3.11-compat
- CVE-2025-15284 Improper Input Validation vulnerability in qs (parse modules) allows HTTP DoS.This issue… Also affects arangodb-3.11-compat
- GHSA-mh29-5h37-fv8m js-yaml has prototype pollution in merge (<<) Also affects arangodb-3.11-compat
- CVE-2025-64718 js-yaml is a JavaScript YAML parser and dumper. Also affects arangodb-3.11-compat