Loading...
Skip to main content

CVE-2026-32805 — Vulnerability in...

HIGH

Romeo is vulnerable to Archive Slip due to missing checks in sanitization

Published March 16, 2026Updated March 26, 2026Source: osv

Summary

## Summary The `sanitizeArchivePath` function in `webserver/api/v1/decoder.go` (lines 80-88) is vulnerable to a path traversal bypass due to a missing trailing path separator in the `strings.HasPrefix` check. A crafted tar archive can write files outside the intended destination directory. ## Vulnerable Code File: `webserver/api/v1/decoder.go`, lines 80-88 ```go func sanitizeArchivePath(d, t string) (v string, err error) { v = filepath.Join(d, t) if strings.HasPrefix(v, filepath.Clean(d)) { return v, nil } return "", &ErrPathTainted{ Path: t, } } ``` The function is called at line 48 inside `[*Decompressor].Unzip`, which is invoked by `Decode` (line 80) during execution of the webserver CLI (command `download`). ## Root Cause `strings.HasPrefix(v, filepath.Clean(d))` does not append a trailing `/` to the directory prefix, causing a **directory name prefix collision**. If the destination is `/home/user/extract-output` and a tar entry is named `../extract-outputevil/pwned`, the joined path `/home/user/extract-outputevil/pwned` passes the prefix check — it starts with `/home/user/extract-output` — even though it is entirely outside the intended directory. ## Steps to Reproduce 1. **Deploy Romeo**. A measured app writes its coverage data. 2. **Place the PoC zip on the PVC.** Any pod with write access to the `ReadWriteMany` PVC (or the webserver itself) copies a `poc-path-traversal.tar` into the `coverdir` mount path. The archive contains legitimate coverage files alongside two crafted entries with path-traversal names. 3. **Run the webserver CLI against the running webserver:** ``` webserver download \ --server http://localhost:8080 \ --directory /home/user/extract-output ``` 4. **Observe the bypass.** `unzip` processes the zip stream. For the malicious entries: ``` // entry name: ../extract-outputevil/poc-proof.txt filepath.Join("/home/user/extract-output", "../extract-outputevil/poc-proof.txt") => "/home/user/extract-outputevil/poc-proof.txt" strings.HasPrefix("/home/user/extract-outputevil/poc-proof.txt", "/home/user/extract-output") => true // BUG: prefix collision; file lands OUTSIDE target dir ``` Both malicious entries are written outside `/home/user/extract-output/`. The legitimate coverage files land correctly inside it. ## Impact Successful exploitation gives an attacker arbitrary file write on the machine running the webserver CLI. Real-world primitives include: - Overwriting `~/.bashrc` / `~/.zshrc` / `~/.profile` for RCE on next shell login - Appending to `~/.ssh/authorized_keys` for persistent SSH backdoor - Dropping a malicious entry into `~/.kube/config` to hijack cluster access - Writing crontab entries for persistent scheduled execution The attack surface is widened by the default `ReadWriteMany` PVC access mode, which means any pod in the cluster with the PVC mounted can inject the payload — not just the Romeo webserver itself.

Advisory Timeline

  • First published March 16, 2026 (210 days ago).
  • Last revised March 26, 2026 — 10 days after initial publication.

Remediation

Upgrade to the fixed version using your package manager.

Go
Update github.com/ctfer-io/romeo/webserver to 0.2.2 or later
go get github.com/ctfer-io/romeo/webserver@v0.2.2

After upgrading, run your dependency scanner again to confirm the vulnerability is resolved.

Affected Packages (1)

Affects 1 ecosystem: go (1).

PackageEcosystemAffectedFixed In
github.com/ctfer-io/romeo/webserver
go
All versions0.2.2

Vulnerability Classification

Common Weakness Enumeration (CWE) identifiers for this vulnerability type.

CVSS Score Breakdown

What the CVSS (Common Vulnerability Scoring System) 9.9 score means for each attack dimension.

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
—
Confidentiality
—
Integrity
—
Availability
—

CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:H/VA:H/SC:N/SI:L/SA:L

Frequently Asked Questions

What is CVE-2026-32805?
Romeo is vulnerable to Archive Slip due to missing checks in sanitization This vulnerability has been assigned a severity rating of HIGH (CVSS score: 9.9/10).
How do I check if my project is affected by CVE-2026-32805?
CVE-2026-32805 affects github.com/ctfer-io/romeo/webserver. Use GeekWala's free vulnerability scanner to check your dependencies against CVE-2026-32805 and 200,000+ other known vulnerabilities.

Severity & Exploitability

CVSS Score
9.9

Exploitation is straightforward and causes maximum impact. Patch immediately.

Also Known As

GHSA-p799-g7vv-f279
GO-2026-4719

Related CVEs

  • CVE-2026-107809
    HIGH

    Nginx-UI AuthRequired token cookie fallback enables CSRF against management APIs

  • CVE-2025-53632
    HIGH

    Chall-Manager is vulnerable to Path Traversal when extracting/decoding a zip archive

  • CVE-2026-32720
    HIGH

    github.com/ctfer-io/monitoring Vulnerable to Improper Access Control

  • CVE-2026-32771
    HIGH

    Monitoring is vulnerable to Archive Slip due to missing checks in sanitization

  • CVE-2026-32737
    HIGH

    Romeo's invalid NetworkPolicy enables a malicious actor to pivot into another namespace

  • CVE-2026-107813
    HIGH

    Nginx UI: Incomplete fix of CVE-2026-84315 - the api/cluster router was not - wrapped in RequireSecureSession, so those sensitive mutations run without OTP step-up

  • CVE-2026-32769
    HIGH

    Fullchain's Invalid NetworkPolicy enables a malicious actor to pivot into another namespace

  • CVE-2026-32768
    HIGH

    Chall-Manager's invalid NetworkPolicy enables a malicious actor to pivot into another namespace

Check if you're affected

Scan your dependencies to see if this vulnerability affects your projects.

Scan Your Dependencies