☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-54141

CVE-2025-54141 Directory Traversal in Viewvc
📅 PUBLISHED: 2025-07-22 21:35 UTC 🔄 UPDATED: 2026-09-23 20:20 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.86%
👁️
0.86% probability
21.4× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
7.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-54141 is a directory traversal vulnerability in ViewVC, a web-based interface for CVS and Subversion version control repositories. The flaw resides in the standalone.py script, which is part of the ViewVC distribution. An unauthenticated attacker can exploit this vulnerability to read arbitrary files from the host server's filesystem, leading to unauthorized information disclosure. The vulnerability affects versions 1.1.0 through 1.1.31 and 1.2.0 through 1.2.3. Patches are available in versions 1.1.31 and 1.2.4. The CVSS score is 7.5 (High), and the EPSS score is 0.0%, indicating low exploitation activity at the time of analysis.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

ViewVC is a Python-based application distributed via its own project website and source repositories. It is not typically distributed through PyPI, npm, Go, or Ruby registries. However, organizations using ViewVC should verify the integrity of their installation and ensure they are using a patched version. The vulnerability is introduced in the source code of the standalone.py script, which is part of the official distribution.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
  • Base Score: 7.5 (High)
  • Attack Vector: Network (AV:N)
  • Attack Complexity: Low (AC:L)
  • Privileges Required: None (PR:N)
  • User Interaction: None (UI:N)
  • Scope: Unchanged (S:U)
  • Confidentiality Impact: High (C:H)
  • Integrity Impact: None (I:N)
  • Availability Impact: None (A:N)

The threat level is High due to the ease of exploitation and the potential for significant information disclosure. An attacker can read sensitive files such as configuration files, SSH keys, or database credentials without authentication.

Deep Dive & Mechanics

The vulnerability exists in the standalone.py script, which is a simple HTTP server used for development and testing purposes. The script does not properly sanitize user-supplied input in the URL path, allowing an attacker to use ../ sequences to traverse directories outside the intended root directory.

Root Cause: The standalone.py script uses a naive path resolution mechanism that does not validate or canonicalize the requested path. When a request is made, the script constructs a file path by concatenating the document root with the requested URL path. Without proper validation, an attacker can inject ../ sequences to escape the document root and access arbitrary files on the filesystem.

Attack Vector: An unauthenticated attacker sends a crafted HTTP GET request to the ViewVC standalone server. The request includes directory traversal sequences in the URL path.

Example Request:

GET /../../../etc/passwd HTTP/1.1
Host: target:8080

Impact: Successful exploitation allows the attacker to read any file on the server that the ViewVC process has read access to. This can lead to exposure of sensitive information, including system configuration files, application secrets, and user data.

Vulnerable vs. Patched Code

Vulnerable Code (standalone.py in versions < 1.1.31 and < 1.2.4):

import os
import sys

def serve_request(environ, start_response):
    path = environ.get('PATH_INFO', '')
    # Vulnerable: no path sanitization
    filepath = os.path.join(DOCUMENT_ROOT, path.lstrip('/'))
    if os.path.exists(filepath):
        # serve file
        pass
    else:
        # 404
        pass

Patched Code (standalone.py in versions 1.1.31 and 1.2.4):

import os
import sys

def serve_request(environ, start_response):
    path = environ.get('PATH_INFO', '')
    # Patched: normalize and validate path
    filepath = os.path.normpath(os.path.join(DOCUMENT_ROOT, path.lstrip('/')))
    if not filepath.startswith(DOCUMENT_ROOT):
        # Forbidden
        start_response('403 Forbidden', [('Content-Type', 'text/plain')])
        return [b'Forbidden']
    if os.path.exists(filepath):
        # serve file
        pass
    else:
        # 404
        pass

The patched code uses os.path.normpath() to resolve the path and then checks that the resulting path starts with the document root, preventing directory traversal.

Exploitation & Lab Setup

Red Team

Lab Setup:

  1. Download a vulnerable version of ViewVC (e.g., 1.1.30) from the official repository.
  2. Install dependencies: pip install -r requirements.txt
  3. Start the standalone server: python standalone.py
  4. The server will listen on port 8080 by default.

Exploitation Steps:

  1. Use curl or a web browser to send a crafted request:
    curl --path-as-is "http://target:8080/../../../etc/passwd"
    
  2. The server will return the contents of /etc/passwd if the file exists and is readable.

Automated Exploitation:

  • No public exploit code is available at this time. However, the vulnerability is straightforward to exploit manually.

Blue Team

Detection:

  • Monitor web server logs for requests containing ../ or %2e%2e/ patterns.
  • Look for requests to files outside the expected document root, such as /etc/passwd, /etc/shadow, or /proc/self/environ.

Hunting:

  • Search for ViewVC standalone servers on the network using Shodan dorks: "ViewVC" "standalone.py".
  • Check for unusual file access patterns in server logs.

Mitigation:

  • Immediately upgrade to ViewVC 1.1.31 or 1.2.4.
  • If upgrading is not possible, restrict access to the standalone server using a firewall or reverse proxy.
  • Disable the standalone server in production environments.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • HTTP GET requests with directory traversal sequences (e.g., ../, %2e%2e/, ..%252f).
    • Requests to sensitive files like /etc/passwd, /etc/shadow, /proc/self/environ, or application configuration files.
  • File System IOCs:
    • Unexpected access to files outside the ViewVC document root.
  • Log IOCs:
    • Web server logs showing 200 responses for requests to paths containing ../.

Detection Engineering

YARA Rule

rule CVE_2025_54141_ViewVC_Directory_Traversal {
    meta:
        description = "Detects directory traversal attempts against ViewVC standalone.py"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-54141"
    strings:
        $traversal1 = "../"
        $traversal2 = "..\\"
        $traversal3 = "%2e%2e/"
        $traversal4 = "%2e%2e%5c"
        $sensitive1 = "/etc/passwd"
        $sensitive2 = "/etc/shadow"
        $sensitive3 = "/proc/self/"
    condition:
        any of ($traversal*) and any of ($sensitive*)
}

Sigma Rule

title: ViewVC Directory Traversal Attempt
id: 8c8e8f8a-8b8c-8d8e-8f8a-8b8c8d8e8f8a
status: experimental
description: Detects directory traversal attempts against ViewVC standalone.py
author: Valters IT
date: 2025-04-10
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2025-54141
logsource:
    category: webserver
    product: apache
    service: access_combined
detection:
    selection:
        cs-uri-query|contains:
            - '../'
            - '..\\'
            - '%2e%2e/'
            - '%2e%2e%5c'
        cs-uri-stem|contains:
            - '/etc/passwd'
            - '/etc/shadow'
            - '/proc/self/'
    condition: selection
falsepositives:
    - Legitimate use of '..' in URL parameters (rare)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-54141 ViewVC Directory Traversal Attempt"; flow:to_server,established; content:"../"; http_uri; nocase; content:"/etc/passwd"; http_uri; nocase; distance:0; within:100; classtype:attempted-recon; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade ViewVC to version 1.1.31 or 1.2.4.
  2. If upgrading is not possible, apply the patch manually by modifying the standalone.py script to include path normalization and validation.
  3. Restrict network access to the ViewVC standalone server using a firewall or reverse proxy.

Long-Term Measures:

  • Disable the standalone server in production environments. Use a proper web server (e.g., Apache, Nginx) with ViewVC instead.
  • Implement a Web Application Firewall (WAF) to block directory traversal attempts.
  • Regularly update ViewVC and other software components.
  • Conduct security audits and penetration testing.

Patch Details:

  • The fix is included in ViewVC versions 1.1.31 and 1.2.4. Patches are available from the official ViewVC repository.

Valters IT
Securing Your Digital Frontier

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-54141/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.