CVE-2026-78381: RansomLook Arbitrary File Read via Path Traversal in Post screen Field
RansomLook contains a path traversal vulnerability in the handling of the screen field associated with group posts. The GroupPost.get API handler concatenates the database-controlled screen value directly with the application's source/ directory and opens the resulting path without verifying that the resolved file remains within the intended directory.
Because the screen field is free-form and can be populated either through the administrative post editor or through data imported from a remote RansomLook instance, a malicious upstream instance can provide traversal sequences such as ../config/generic.json. When the affected post is subsequently retrieved through the API, RansomLook resolves and reads the attacker-controlled path and returns the contents of the referenced file Base64-encoded in the API response.
This can allow an attacker (being admin) controlling imported post data to read arbitrary files accessible to the RansomLook process, potentially exposing sensitive configuration data, API credentials, password hashes, or other application secrets. The attack does not require the malicious upstream to possess an account on the affected RansomLook instance.
The vulnerability is addressed by resolving screen paths with os.path.realpath() and verifying that the resolved path remains beneath the application's source/ directory. Validation is performed both when values are written and immediately before files are read. Using canonical paths also prevents traversal through symbolic links that would bypass purely lexical path normalization checks.
Affected Software
Remediation
Recommended actions to resolve this vulnerability, in priority order.
- Configuration
Update the GroupPost.get handler to resolve the database-controlled screen value with os.path.realpath() and verify the resolved path remains within the application's source/ directory before opening the file; ensure this validation is performed both when screen values are written and immediately before the file is read.
RansomLook GroupPost.get API handler screen path handling (realpath containment check) = Use os.path.realpath() and verify resolved path remains beneath the application's source/ directory before opening; perform the same validation immediately before reading (and when values are written).
Event History
Frequently Asked Questions
What conditions must exist for exploitation to occur?
An attacker must be able to control a group post's screen value, either through the administrative post editor or by supplying post data from a remote RansomLook instance that is imported by the target. The affected post must then be retrieved through the API.
Does a malicious remote RansomLook instance need an account on the target instance?
No. A malicious upstream instance can supply traversal-bearing imported post data without possessing an account on the affected RansomLook instance.
What can be exposed if exploitation succeeds?
The attacker can cause the application to return files readable by the RansomLook process, with contents Base64-encoded in the API response. Potentially exposed data includes configuration files, API credentials, password hashes, and other application secrets.