---
id: "CVE-2026-126378"
page: "https://infrastack.ai/live/CVE-2026-126378"
kind: "vulnerability"
aliases: ["CVE-2026-126378"]
title: "Vvveb: theme installer upload lets admins run PHP code on nginx"
severity: "critical"
cvss: 9.4
epss: null
exploited: false
status: "open"
category: "runtime"
products: [{"name": "Vvveb", "fixed": [], "affected": "<= 1.0.8.6", "ecosystem": "vendor"}]
ecosystems: ["vendor"]
tags: ["cms", "nginx", "php", "runtime", "self-hosted", "vvveb"]
not_affected_if: ["apache", "auth-required", "no-admin-access", "no-vvveb", "php-denied-in-themes"]
published_at: "2026-11-13T10:17:40+00:00"
first_seen_at: "2026-11-13T10:47:17+00:00"
updated_at: "2026-11-13T10:48:54+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-126378", "first_seen_at": "2026-11-13T10:47:17+00:00"}, {"source": "analyst", "url": null, "first_seen_at": "2026-11-13T10:48:54+00:00"}]
exploit_sources: []
---

# Vvveb: theme installer upload lets admins run PHP code on nginx

Link for people: https://infrastack.ai/live/CVE-2026-126378 (this .md is for agents)

Vvveb's theme installer validFile() uses strpos() to allow theme.php, so a ZIP entry like mytheme/scripts/theme.php passes the check and is extracted to public/themes/. With the bundled nginx-live.conf, which has no PHP deny rule for /themes/, an admin can then run it as a webshell. The advisory lists no patched version.

_Summary, check and fix written by a model from the sources; labelled as such._

## Affected

- vendor:Vvveb affected <= 1.0.8.6 fixed no fixed version listed

## How to check

- Check the Vvveb version: <= 1.0.8.6 is affected, no fixed version exists yet.
- Check system/extensions/themes.php (around line 195) for strpos($file, '/theme.php') === false.
- Check whether your nginx config (e.g. the bundled nginx-live.conf) lacks a PHP deny rule for /themes/; look for files under public/themes/*/ other than the expected theme.php, e.g. nested scripts/theme.php.
- Review who holds admin accounts; exploitation needs admin credentials.

## Fix

No patched release listed in the GitHub advisory (patched versions: None). Interim, per the advisory: in system/extensions/themes.php validFile() reject all PHP files (if ($extension == 'php') return false;) and add to nginx config: location /themes { location ~ \.php$ { deny all; } }

## Timeline

- 2026-11-13T10:47:17+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-126378
- 2026-11-13T10:48:54+00:00 analyst — Read GHSA and VulnCheck advisories: <=1.0.8.6 affected, GHSA lists patched versions None; no exploitation reported; PoC is in the advisory.

## Documents

- [advisory] GHSA-xpgr-r6c8-3hpq Vvveb theme installer validFile() bypass https://github.com/givanz/Vvveb/security/advisories/GHSA-xpgr-r6c8-3hpq
- [advisory] Third-party advisory: www.vulncheck.com https://www.vulncheck.com/advisories/vvveb-through-1.0.8.6-webshell-upload-via-theme-installer-validfile-bypass

## From the sources

Vvveb through 1.0.8.6 contains a file upload vulnerability in the theme installer validFile() function that uses strpos() instead of strict path matching. Attackers with admin credentials can upload a ZIP containing a PHP file whose path includes /theme.php to achieve remote code execution on nginx deployments.

---

_Free to read, with fair use of about 60 pages a minute. For higher limits or API access: sales@infrastack.ai_
