Severity by source
AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N
AC:H reflects the prerequisite of controlling a configured app-store repository; PR:N applies because the logo endpoint itself requires no authentication once that precondition is met.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
3DescriptionCVE.org
Runtipi is a personal homeserver orchestrator. In versions 4.9.1 through 4.9.3, Runtipi serves marketplace app logos from files inside cloned app-store repositories through an unauthenticated endpoint, which leads to arbitrary file read through app-store logo symlinks. The path guard checks only the lexical path before Node reads the file, so a Git app store that contains metadata/logo.jpg as a symbolic link can cause Runtipi to read and return the symlink target. Because the endpoint is public and the symlink target may point outside the cloned repository, this can expose local files from the Runtipi container such as /data/.env, /data/state/seed, logs, or application files. This can disclose JWT secrets, service credentials, local configuration, and operational logs depending on the instance. The issue has been fixed in version 4.10.0.
AnalysisAI
Arbitrary file read in Runtipi 4.9.1-4.9.3 exposes sensitive container secrets via symlink following in an unauthenticated app-store logo endpoint. An attacker who controls a Git-based app-store repository can embed a symbolic link as a marketplace logo file; because the path guard performs only lexical validation before Node.js reads the file, Runtipi resolves and returns the symlink target, potentially leaking /data/.env, JWT secrets, service credentials, and seed values to any unauthenticated requester. No public exploit code has been identified at time of analysis and the issue is not listed in CISA KEV; a vendor-confirmed fix is available in v4.10.0.
Technical ContextAI
Runtipi is a Node.js-based homeserver orchestrator that clones Git app-store repositories to present a marketplace of self-hosted applications. Marketplace logos are served via a public HTTP endpoint that constructs a file path from the requested app identifier and reads the corresponding image. The path guard validates the lexical path only - it checks the string representation without resolving symbolic links first. Node.js's filesystem read then follows any symlink present in the repository to its target on the host filesystem, bypassing the intended directory restriction. This is a CWE-22 (Path Traversal) instance specifically triggered by TOCTOU-style symlink substitution: the validated path is safe as a string but resolves to an unintended target at read time. The affected product is cpe:2.3:a:runtipi:runtipi:*:*:*:*:*:*:*:* for versions 4.9.1 through 4.9.3. The v4.10.0 release notes confirm the fix: 'Tighten filesystem type checks to not follow symlinks when serving public data.'
RemediationAI
Vendor-released patch: v4.10.0. Update using the Runtipi CLI by running ./runtipi-cli update v4.10.0 from the root of the Runtipi installation directory; the release is available at https://github.com/runtipi/runtipi/releases/tag/v4.10.0. The fix tightens filesystem type checks so symlinks are never followed when serving public marketplace data. As a compensating control for instances that cannot immediately update, restrict app-store configuration to the official Runtipi store only and prevent administrators from adding third-party or user-supplied Git repositories as app sources - this eliminates the attacker's ability to introduce a malicious symlink, since the official store does not contain them. Note that this workaround depends on access control at the administrative layer and does not address the underlying code defect; upgrade to v4.10.0 is the only definitive remediation. The security advisory is at https://github.com/runtipi/runtipi/security/advisories/GHSA-qrqj-p7hm-4m66.
Runtipi versions 3.7.0 through 4.6.x suffer from arbitrary command execution when authenticated users upload backups wit
Runtipi versions 4.5.0 through 4.7.1 contain an unauthenticated path traversal vulnerability in the UserConfigController
Critical authentication bypass vulnerability in Runtipi (versions prior to 4.8.1), a personal homeserver orchestrator, w
Symlink-following vulnerability in Runtipi 4.10.0 and earlier enables authenticated administrators to write arbitrary co
Same weakness CWE-22 – Path Traversal
View allSame technique Path Traversal
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-37508