MultiPortal Community Return to multiportal.io
Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Support Portal
Collapse

Global Moderators

Private

Forum wide moderators

Posts


  • Where should we meet you next year?
    D Diane
    General Discussion conferences events community

    Hi everyone, I’m Diane from the MultiPortal marketing team.

    We’re planning which conferences to attend next year and we’d like to be at the events you already go to.

    Reply with:

    • The conference, meetup or user group you attended
    • What makes it worth your time
    • Any topic you’d like us to cover if we contribute a talk or workshop

    We’ll share the final list here once it’s decided, so you’ll know where to find us.


  • [RELEASE] MultiPortal 1.2.3 is now available
    woodyW woody
    Product Updates

    Hi everyone,

    MultiPortal 1.2.3 is a patch release that resolves issues identified after the 1.2.2 release. It stops tenants reaching each other’s ISO images, closes an open redirect in legacy SAML sign-in, and hardens the virtual machine console and its Node.js proxy in line with the October 2026 Node.js security releases.

    It also fixes white-label branding on installations with more than one application node, duplicate backup records, cloning into HA-enabled data centres and from Windows templates, virtual machine import on LINSTOR/DRBD storage, and VM ID allocation on busy clusters. The networking API now identifies everything by UUID, which is a breaking change for integrations (see Upgrade Notes).

    We recommend upgrading at the next available maintenance window for all environments, and particularly for those that let tenants upload ISO images, run more than one application node behind a load balancer, or use legacy SAML sign-in.

    Security and Access

    • Tenants are kept to their own ISO images. A tenant who had the link to another tenant’s ISO image could edit or delete it, including the file on Proxmox, and could delete a shared ISO. A tenant now sees its own, shared and public ISO images, as the list shows them, and can change only its own. A reseller works through its tenants, and any other request is answered as not found, so the existence of another tenant’s ISO is not confirmed. Editing an ISO changes only its name and description.
    • Legacy SAML sign-in returns only to this site. The return address carried through a legacy SAML sign-in was followed as given, so a crafted sign-in link could send a signed-in user on to another website. An address on another host, scheme or port, or one that cannot be read, now goes to the home page instead.
    • Virtual machine creation is limited to the user’s own VDCs. Creating a virtual machine, in the portal and through the API, now checks that the target virtual data centre belongs to the user’s own company. Custom roles can also only be granted the permissions the role editor offers; anything else in the request is discarded and logged.
    • Virtual machine hardware shows only its own data centre’s networks. When two data centres used the same Proxmox VNet ID, a virtual machine’s Hardware tab could show the name of another tenant’s network. Network names are now looked up within the virtual machine’s own data centre.
    • Virtual machine console hardened. A console link can no longer point the browser’s console connection at another server; the console always connects to the page’s own address, so custom domains work as before. The console service no longer writes the Proxmox login ticket to its log, its shared API key is compared in constant time, and each use of the console credentials endpoint is recorded in the virtual machine log, without credentials. Console session records, which hold short-lived console credentials, are now deleted after five minutes. Unused legacy console code has been removed.
    • Console proxy protected against the October 2026 Node.js advisories. The console proxy (multiportal-websocket) no longer accepts Brotli-compressed responses, so the Node.js Brotli decoder flaw (CVE-2026-111497) cannot be reached on any Node.js version. The proxy logs a start-up warning on an end-of-life Node.js (18 or 20), and its redirect library has been updated to a release that no longer leaks credential headers across origins. Node.js 22 LTS is recommended (see Upgrade Notes).
    • Uploaded files can no longer be run as scripts. The Caddy configuration now refuses PHP and other script files under /uploads. Existing installations need a one-line configuration change (see Upgrade Notes).
    • Dependency update. symfony/yaml has been updated to 7.4.21 to address CVE-2026-109413.

    Reliability and Performance

    • White-label branding works on every application node. Logos, favicons and login backgrounds were saved to the disk of whichever node handled the upload, so behind a load balancer they disappeared intermittently. Branding images are now stored in the database and served from every node. Existing images are moved across during the upgrade.
    • The white-label logo now appears on the two-factor sign-in page. Logos set by URL were shown on the login page but not on the two-factor verification page.
    • Backup sync no longer creates duplicate backup records. Two scheduled tasks could each register the same backup archive, so one backup appeared twice and was counted twice in backup storage usage. Each archive is now recorded once, existing duplicates are removed during the upgrade, and backup storage usage counts each archive once.
    • ISO images are no longer marked Failed when Proxmox cannot be reached. A timeout, an offline node or an expired token used to mark a healthy ISO image as Failed, and nothing set it back. An ISO image is now marked Failed only when Proxmox confirms the file is gone, and a Failed ISO that Proxmox lists again is restored. While a data centre is unreachable, the ISO page no longer hangs; it shows the status as Unknown and names the data centres it could not reach.
    • ISO images with long file names upload successfully. An upload with a very long file name reached 100% and then vanished. It now completes and appears in the list, under its original display name.
    • Cloning into an HA-enabled data centre no longer leaves the virtual machine in an HA error state. The clone was registered with Proxmox HA while it was still copying, which pinned it to the source node and left it unable to start. HA is now applied once the clone has finished. If the clone is still copying when the wait ends, the virtual machine is kept, HA is not applied, and the clone wizard says why. A clone is also placed on a node allowed by its node-affinity rule.
    • New virtual machines avoid nodes in HA maintenance. Creating, cloning and restoring a virtual machine, and uploading an ISO image, no longer pick a Proxmox node that HA has placed in maintenance.
    • VM creation no longer fails with “Unable to generate unique Proxmox VM ID after 100 attempts”. On a busy cluster, a record left behind by a machine deleted directly in Proxmox, or more than 100 machines above the “begin VM IDs at” setting, could stop every create, clone and restore. The new machine now gets the next free ID, the old record’s ID is never reused, and container IDs are no longer handed to virtual machines. If Proxmox cannot be read, creation stops with a message saying so rather than guessing an ID. A retried create now carries the right name in Proxmox and gives up after five attempts. A new read-only command, php yii vm-orphan/stale-records, lists records whose virtual machine is no longer on the cluster.
    • Divided bandwidth is shared correctly when a virtual machine is added. In a virtual data centre using Divided bandwidth, adding a virtual machine left the existing machines on their old, larger limit, so the pool was over-committed. Every network card’s limit is now updated.
    • Clone node lookup restored. A background lookup that confirms which node a cloned virtual machine landed on failed on every call and filled the post-task log with errors. It now works.

    Bug Fixes

    • Clones from Windows (Cloudbase-Init) templates get a network card. Cloning a template without cloud-init hid the whole network section, so the virtual machine was created with no network card. The network section is now always shown; only the in-guest IP settings are hidden for templates without cloud-init. New virtual machines created from an ISO now have their network card connected by default.
    • Deploy from Template no longer shows cloud-init errors for templates without cloud-init. Hidden cloud-init fields, for example ones filled by a password manager, were still submitted and validated. They are now ignored for templates without cloud-init.
    • Deploy from Template opens on VDCs that already contain virtual machines. The wizard failed with “Error loading content” when the resources already in use could not be totalled. It now opens.
    • Custom tenant roles can create virtual machines. A custom tenant role holding the Virtual Machine Admin permission got “Error loading content” from New Virtual Machine unless the user was also a Tenant Administrator.
    • Editing an internal network opens the right network. Internal networks could be issued a VNet ID already in use, so editing one could open a different network, and a reseller got a blank “Error loading content” dialog. New IDs are now unique within each data centre. Dialogs that are refused now show the reason, such as “Access denied” or “Not found”, instead of a blank error.
    • Internal networks can be created on a second Proxmox cluster. Creation failed with “Zone ID already exists” when the zone ID was already used in the data centre. A repair command for zone records already duplicated is described in the Upgrade Notes.
    • VM Import recognises disks on LINSTOR/DRBD storage. The VM Import wizard reported “has no storage configured” for virtual machines on LINSTOR/DRBD storage, whose volumes are named differently. Disks are now recognised by the slot they are attached to. A template on such storage now reports its real size, so clones from it are checked against the virtual data centre’s free storage. A disk written as size=1T is read at its real size, and a storage defined once per node, such as local, is accepted when any node’s entry is on one of the virtual data centre’s storage policies. EFI and TPM state volumes are no longer counted as disks.
    • Editing virtual machine hardware no longer fails with “Capacity cannot be downgraded”. A disk whose size is not a whole number of mebibytes, which is usual on LINSTOR/DRBD storage, was shown rounded, and saving any other change refused the whole edit. Disk sizes are now compared in whole bytes, in the portal and the API, so an unchanged disk is left alone.
    • Backup Job virtual machine picker no longer selects two machines on a double-click.
    • Backup protection can be changed on a backup with no virtual machine. A backup that is no longer associated with a virtual machine can now have its protection enabled or disabled.
    • Disabled form fields look disabled in light mode. Fields switched off, such as the retention fields when “Keep all backups” is ticked, looked the same as editable fields.
    • Scheduled backup schedules are translated. The weekly day picker, time field and schedule summary now follow the selected language.
    • The Upload ISO wizard’s Public option is saved. A Service Provider’s public upload was saved as private.

    API and Integrations

    • Breaking change: the networking API uses UUIDs only. The v1 networking endpoints identified data centres, virtual data centres, tenants and networks by internal integer IDs that the API never exposed. They now accept and return UUIDs only, and an integer value is rejected with HTTP 422 (see Upgrade Notes).
    • Attaching and detaching networks through the API. DELETE /virtual-machine/{id}/network/{device} returned a server error while Proxmox still removed the network card, so the API and the portal kept listing it; it now succeeds and both update straight away. The response to attaching a network now says a network was added, not storage.
    • Virtual machine creation is scoped to the caller’s own VDCs. POST /virtual-machine now refuses a virtual data centre that belongs to another company.
    • Hardware updates compare disk sizes in whole bytes. The API’s hardware update no longer refuses an unchanged disk whose size is not a whole number of mebibytes. A size that is not a plain number is refused with “Capacity is not a valid size.”

    Upgrade Notes

    • This patch release includes database migrations. Please take a backup of your database prior to upgrading; the migrations run as part of the standard upgrade procedure.
    • Breaking API change: networking endpoints are UUID-only. Replace any integer data_center_id, tenant_id or virtual_data_center_ids value, and any integer network ID in a URL, with the UUID from GET /api/v1/data-center, GET /api/v1/virtual-data-center or GET /api/v1/tenant. Reseller networking endpoints are UUID-only for tenants, data centres and VDCs as well. Existing networks are given a UUID during the upgrade.
    • Duplicate VNet IDs within one data centre stop the upgrade. The upgrade adds a unique index on internal-network VNet IDs per data centre. Two data centres sharing an ID is expected and allowed. If one data centre holds the same ID twice, the migration stops with a message listing the duplicates and the query that finds them; reconcile them and run the upgrade again.
    • Duplicate backup records are removed. The upgrade keeps the oldest record for each backup archive and removes the rest. Backup storage usage figures may fall to the true value.
    • Branding images move into the database. The upgrade copies each logo, favicon and login background from disk into the database. On an installation with more than one application node, an image that sits only on another node’s disk is left as it was; check branding after the upgrade and upload again any image that does not appear.
    • Block scripts under /uploads in Caddy. New installations get this automatically. On an existing installation, add the following to the (backend_common) snippet, and to the main site block if it does not import that snippet, then reload Caddy.
    @uploads_scripts path_regexp ^/uploads/.*\.(php|php5|php7|phtml|phar)$
    handle @uploads_scripts {
        respond 403
    }
    
    • Node.js 22 LTS recommended for the console proxy. Upgrading to 1.2.3 does not require a new Node.js, and Node.js 18 and 20 keep working with a start-up warning. To move to Node.js 22, install it from NodeSource (https://deb.nodesource.com/setup_22.x), then run sudo systemctl restart multiportal-websocket. Do not use nvm or a per-user Node.js; the service does not see it.
    • Proxmox API token privileges. VM ID allocation now reads every guest on the cluster. MultiPortal’s Proxmox API token needs VM.Audit on every guest; without it, creation can stop with a message that Proxmox could not be read.
    • Repair duplicated network zones. If internal-network creation failed with “Zone ID already exists”, run php yii zone-dedupe/proxmox-ids to preview the repair, then again with --commit=1 to apply it. The shared zone on Proxmox is not changed.
    • Find records for virtual machines deleted in Proxmox. php yii vm-orphan/stale-records lists them and says what is safe to do with each. It changes nothing.
    • Clones from LINSTOR/DRBD templates are checked against quota. Such templates used to report a size of zero, so their clones were never checked against free storage. A clone that went through over quota before is now refused.

    Thanks

    Thanks to everyone who reported the issues that went into 1.2.3, especially the support tickets that pinned down the LINSTOR/DRBD import and VM ID allocation problems. If you have already upgraded, let us know how it went, and questions or anything odd are welcome in the usual categories.


  • Security Advisory: Critical PHP Vulnerabilities - CVE-2026-109618 and CVE-2026-109619
    woodyW woody
    Security Advisories

    For further references on the vulnerabilities

    Vendor (PHP)

    Security advisory:
    https://www.php.net/archive/2026.php#2026-10-21-5

    CVE-2026-109618:
    https://github.com/php/php-src/security/advisories/GHSA-w8hw-w9fx-j79w

    CVE-2026-109619:
    https://github.com/php/php-src/security/advisories/GHSA-6wmf-4rv5-p3rp

    Government advisories

    CERT-EU Security Advisory 2026-018:
    https://cert.europa.eu/publications/security-advisories/2026-018/

    NCSC-NL operational repository:
    https://github.com/NCSC-NL/php2shell


  • Security Advisory: Critical PHP Vulnerabilities - CVE-2026-109618 and CVE-2026-109619
    woodyW woody
    Security Advisories

    Update: PHP 8.2.35 is now available

    PHP 8.2.35, which fixes CVE-2026-109618 and CVE-2026-109619, is now published for Ubuntu 22.04 and 24.04 (ondrej/php) and Debian 12 and 13 (packages.sury.org).

    The post above has been updated with the confirmed version and steps. It also covers:

    • what to do if apt reports “Mirror sync in progress?” or 503 Service Unavailable while the repositories are under load
    • a download of the official PHP 8.2.35 packages, if your server can’t reach the repository

    Once updated, php8.2 -v should show PHP 8.2.35 and “with the ionCube PHP Loader”.

    Matt


  • Hiding features and Public Toggle Idea
    StellS Stell
    Product Feedback

    Love the global features toggle. We’re exploring different ways we could do this but it’ll take a little bit of time. As for the template and ISO question, we’ve got a new marketplace design coming that’ll replace the catalogue and introduce functionality similar to what you’re describing


  • Security Advisory: Critical PHP Vulnerabilities - CVE-2026-109618 and CVE-2026-109619
    woodyW woody
    Security Advisories

    Security Advisory: Critical PHP Vulnerabilities

    Updated 22 October 2026: PHP 8.2.35 is now available. The steps below are current.

    CVE-2026-109618 and CVE-2026-109619 · CVSS v4.0 9.2 (Critical)

    Action required: the fix is now released. Update PHP 8.2 to 8.2.35 on every MultiPortal server. No MultiPortal update is needed.


    What’s happening

    The PHP security team has released fixes for two critical vulnerabilities in PHP itself. They are not in MultiPortal’s code, but every MultiPortal installation runs on PHP, so all servers are affected until PHP is updated.

    For PHP 8.2, which MultiPortal uses, the fix is PHP 8.2.35.

    Availability

    PHP release PHP 8.2.35, released 21 October 2026 (release notes)
    Ubuntu (ondrej/php) Available for 22.04 and 24.04
    Debian (packages.sury.org) Available

    Will MultiPortal be affected by the update?

    We do not expect the update to cause any issues. MultiPortal and its required packages, including the ionCube loader, are designed to work with any PHP 8.2.x release.

    We are testing the update now and will advise here once we have performed the updates, including if anything further is required.


    How to update

    Update PHP 8.2 to 8.2.35 or later.

    Ubuntu (ondrej/php repository)

    1. Check the fix has reached your repository

    sudo apt update
    apt-cache policy php8.2-fpm
    

    The Candidate line must start with 8.2.35, for example 8.2.35-1+ubuntu22.04.1+deb.sury.org+1. If it still shows an older version, run sudo apt update again.

    2. Upgrade PHP

    sudo apt install --only-upgrade 'php8.2*'
    

    3. Restart PHP and the MultiPortal workers

    sudo systemctl restart php8.2-fpm 'multiportal-queue@*'
    

    4. Confirm

    php8.2 -v
    

    Debian (packages.sury.org repository)

    Debian servers often don’t have sudo installed. If yours doesn’t, run these as root (su -) and leave sudo off each command.

    1. Check the fix has reached your repository

    sudo apt update
    apt-cache policy php8.2-fpm
    

    The Candidate line must start with 8.2.35 and come from packages.sury.org, for example 8.2.35-1+0~20261021.94+debian12~1.gbp8bff78 on Debian 12. If it still shows an older version, run sudo apt update again.

    2. Upgrade PHP

    sudo apt install --only-upgrade 'php8.2*'
    

    3. Restart PHP and the MultiPortal workers

    sudo systemctl restart php8.2-fpm 'multiportal-queue@*'
    

    4. Confirm

    php8.2 -v
    

    On both Ubuntu and Debian, you should see PHP 8.2.35 and the line “with the ionCube PHP Loader”.


    If the repository is unavailable

    If your server cannot download the update from the repository, we have packaged the official PHP 8.2.35 files for Ubuntu 22.04, Ubuntu 24.04, Debian 12 and Debian 13:

    php8.2.35-debs.zip

    SHA-256: 20c256092cf6d0314e86abe3ed7ad40b0adbfa78ba5fcbf0f8e7963dab22d45e

    These are the official packages from the ondrej/php PPA and packages.sury.org, unchanged. Each folder includes a SHA256SUMS file matching the repository’s signed package index.

    wget https://downloads.multiportal.io/packages/php/php8.2.35-debs.zip
    sha256sum php8.2.35-debs.zip
    unzip php8.2.35-debs.zip
    cd php8.2.35-debs/*-$(lsb_release -cs)
    sha256sum -c SHA256SUMS
    sudo apt install ./*.deb
    sudo systemctl restart php8.2-fpm 'multiportal-queue@*'
    php8.2 -v
    

    The cd line picks the folder for your server’s release automatically: ubuntu-22.04-jammy, ubuntu-24.04-noble, debian-12-bookworm or debian-13-trixie. Every line of sha256sum -c must say OK.

    If apt install reports unmet dependencies such as libc6 (>= 2.38) or libssl3t64, those packages are for a different release than your server. Nothing has been installed. Check lsb_release -cs and use the matching folder.


    What you don’t need to do

    • No MultiPortal update is required
    • No ionCube changes and no re-encoding are needed
    • New installations pick up PHP 8.2.35 automatically

    We’ll update this post with our test results once we have completed our own updates. If you run into any trouble, reply here or raise a support ticket.

    Matt


  • Virtio Warning Handler
    StellS Stell
    Product Feedback

    Good spot - Yea I’ll add this to the backlog :)


  • Restricted API access for tenants
    StellS Stell
    Feature Requests

    Hey @peconi we can arrange a roadmap/what’s new session for the upcoming 1.3.0 release if you’d like? While it seems MP hasn’t had any love I can assure you this release is absolutely monstrous :D
    We know about the API issues, we’re pushing hard to get this sorted


  • Suspected Bug: In self created tenant role with all rights, users cannot create New VM
    StellS Stell
    Users & Permissions

    Hey @espenw-nordlo

    Can you raise a ticket with support bundle attached please?

    For other readers of this thread: did you try recreating the role? Or reapplying the role?


  • Shifting numbers for total amount of vms of a vdc
    StellS Stell
    Product Feedback

    OK @kth can I get you to raise a support ticket and submit your support bundle with it? We’ll check this out

Member List

D Diane Group Owner
1 Posts 0 Reputation
J joseb Group Owner
40 Posts 1 Reputation
L lawrenzem Group Owner
0 Posts 0 Reputation
woodyW woody Group Owner
17 Posts 5 Reputation
StellS Stell Group Owner
84 Posts 18 Reputation
  • Login

  • Don't have an account? Register

  • Login or register to search.
Powered by NodeBB Contributors
  • First post
    Last post
0
  • Categories
  • Recent
  • Tags
  • Popular
  • Support Portal