{"id":1634,"date":"2026-09-22T22:26:03","date_gmt":"2026-09-23T01:26:03","guid":{"rendered":"https:\/\/www.linuxpro.com.br\/?p=1634"},"modified":"2026-09-22T22:26:03","modified_gmt":"2026-09-23T01:26:03","slug":"ispconfig-3-3-2-ubuntu-26-04-dmarc-e-correcoes-de-seguranca","status":"publish","type":"post","link":"https:\/\/www.linuxpro.com.br\/en\/2026\/09\/ispconfig-3-3-2-ubuntu-26-04-dmarc-e-correcoes-de-seguranca\/","title":{"rendered":"ISPConfig 3.3.2: Ubuntu 26.04, DMARC, and security fixes"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/2026\/09\/ispconfig-3-3-2-v1.webp\" alt=\"Mascote LinuxPro ajoelhado encaixando um m\u00f3dulo atualizado num rack com o \u00edcone do ISPConfig, com o cachorro caramelo cyborg deitado ao lado\" width=\"1486\" height=\"856\" \/><\/p>\n<p>The <strong>ISPConfig 3.3.2<\/strong> was released on 18 September 2026 and, three days later, received the patch <strong>3.3.2p1<\/strong>. It is an update worth applying right away: besides support for Ubuntu 26.04 and new email features, it fixes a <strong>SQL injection in the remote API<\/strong>, a <strong>privilege escalation in Fetchmail<\/strong> and a series of flaws found in a code audit. This guide summarizes what changed, what to check after the update, and how to update without surprises.<\/p>\n<p><!-- more --><\/p>\n<p>If you're new to the panel, it's worth reading first <a href=\"\/en\/2017\/01\/a-historia-do-ispconfig\/\">the history of ISPConfig<\/a> and our guide to <a href=\"\/en\/2017\/01\/hospedagem-com-ispconfig\/\">website hosting with ISPConfig<\/a>.<\/p>\n<h2>Security: why update now<\/h2>\n<p>The official announcement does not cite CVE numbers, only the project issues and who reported each flaw. The two most serious:<\/p>\n<ul>\n<li><strong>SQL injection in the remote API (#7051).<\/strong> The record ID passed to the <em>update<\/em> and <em>delete<\/em> functions of the API went into the SQL query without validation. A user of the API with permission for one of these functions could alter or delete records outside their permission and read data from other tables. The ID now needs to be a positive integer and the queries use <em>placeholders<\/em>. Reported by Nguyen Chi Quang, from MBBank.<\/li>\n<li><strong>Privilege escalation in Fetchmail (#7052).<\/strong> The fields of a Fetchmail account were written to the getmail configuration file without validation: with line breaks, a client could inject extra sections. Line breaks and null bytes are now removed, the destination needs to be a valid email, and the plugin refuses to write to symbolic links or outside the getmail directory. Reported by Arvin Shivram, from Brutecat Security.<\/li>\n<\/ul>\n<p>Fixes from a <strong>code audit performed by siteguardian.io<\/strong> (#7044):<\/p>\n<ul>\n<li>also went in: the password reset link was assembled from the header <code data-no-translation=\"\">Host<\/code> from the request, which allowed sending the user a link pointing to an attacker's server;<\/li>\n<li>CSRF tokens are now required in backups, DNS zone import, extension management, and vpopmail import;<\/li>\n<li>TLS verification is back in effect when downloading extensions and APS packages;<\/li>\n<li>the session ID is regenerated on login;<\/li>\n<li>hashes and tokens are compared in constant time;<\/li>\n<li>email headers are protected against CRLF injection;<\/li>\n<li>shell arguments are now escaped in PowerDNS DNSSEC, certbot, and PostgreSQL size commands;<\/li>\n<li>APS package extraction rejects <em>path traversal<\/em>;<\/li>\n<li><code data-no-translation=\"\">unserialize()<\/code> no longer accepts objects;<\/li>\n<li>the old file <code data-no-translation=\"\">interface\/web\/remote\/monitor.php<\/code> is removed.<\/li>\n<\/ul>\n<p>Two security-affecting bugs round out the list. The client field on forms reverted to the first item after a validation error, which could cause a record to be moved to the reseller, or a site to change directories (#7048). And a traffic quota equal to <code data-no-translation=\"\">0<\/code> was not applied, which allowed bypassing the client's traffic limit (#7024).<\/p>\n<p>The previous cycle also shipped security fixes: <a href=\"https:\/\/www.ispconfig.org\/blog\/ispconfig-3-3-1-released\/\">ISPConfig 3.3.1<\/a>, from January of 2026, closed three privilege-escalation flaws in themes, restore, and backup download. Anyone still on 3.3.0 has even more reason to upgrade.<\/p>\n<h2>What's new<\/h2>\n<h3>Ubuntu 26.04 LTS<\/h3>\n<p>ISPConfig 3.3.2 supports Ubuntu 26.04 LTS, including the Dovecot 2.4 configuration syntax used by that version (#6996). The official list of supported distributions now reads:<\/p>\n<ul>\n<li>Debian 11 to 13 (recommended) and Debian testing;<\/li>\n<li>Ubuntu 22.04 LTS to 26.04 LTS (recommended);<\/li>\n<li>AlmaLinux 8 to 10 and Rocky Linux 8 to 10;<\/li>\n<li>CentOS 8.<\/li>\n<\/ul>\n<h3>DMARC on email input<\/h3>\n<p>A new option makes rspamd <strong>apply the DMARC policy<\/strong> published by the sending domain: the failing message is rejected or sent to quarantine, according to the domain's policy, <code data-no-translation=\"\">p=reject<\/code> or <code data-no-translation=\"\">p=quarantine<\/code> (#6995).<\/p>\n<h3>Separate sender for system emails<\/h3>\n<p>The administrator's e-mail served both as the sender and as the recipient of system messages. When the administrator's mailbox is at another provider, this broke SPF: the ISPConfig server sent using a domain it does not host. In <strong>System &gt; Main Config &gt; Mail<\/strong> there are now two fields (#7028):<\/p>\n<ul>\n<li><strong>Administrator's contact e-mail<\/strong> (<code data-no-translation=\"\">admin_mail<\/code>): receives the notifications and is the reply address;<\/li>\n<li><strong>Server sender e-mail address<\/strong> (<code data-no-translation=\"\">server_sender_mail<\/code>): the sender of system messages, such as traffic and quota notices, monitoring, OTP, password reset, and welcome messages.<\/li>\n<\/ul>\n<p>The update copies the administrator's current e-mail to the new field, so nothing changes until you configure another sender. It is worth taking the opportunity to use an address from a domain hosted on the server itself. Custom templates in <code data-no-translation=\"\">conf-custom\/mail\/<\/code> that set their own sender are not altered.<\/p>\n<h3>Database backup without locking tables<\/h3>\n<p>The <code data-no-translation=\"\">mysqldump<\/code> locks all database tables during the dump, and the site may become unresponsive while the backup runs. In <strong>System &gt; Server Config &gt; Server<\/strong> there is a new option for using <code data-no-translation=\"\">--single-transaction<\/code> (#7049):<\/p>\n<ul>\n<li><strong>Automatic<\/strong> (default): uses <code data-no-translation=\"\">--single-transaction<\/code> only when all tables use a transactional engine such as InnoDB. Databases with MyISAM or MEMORY tables continue with the lock, because without it the dump of those tables would not be consistent.<\/li>\n<li><strong>Yes<\/strong>: never locks. It is the choice for mixed databases where availability matters more than consistency of non-transactional tables.<\/li>\n<li><strong>On<\/strong>: keeps the old behavior.<\/li>\n<\/ul>\n<h3>Other changes<\/h3>\n<ul>\n<li><strong>Extensible limits (#7019):<\/strong> extensions can register their own client and reseller limits without modifying core files.<\/li>\n<li><strong>Updated CA list for CAA records (#7017).<\/strong><\/li>\n<li><strong>Custom error pages disabled by default<\/strong> on new sites; existing ones do not change (#7021).<\/li>\n<li><code data-no-translation=\"\">ispconfig_update.sh<\/code> gained a command line option to update from a specific branch.<\/li>\n<li>Improvements to acme.sh for loopback addresses, with better logging in the installer and download via <code data-no-translation=\"\">curl<\/code> as an alternative.<\/li>\n<li>The systemd temporary directory override also now applies to the Apache unit.<\/li>\n<\/ul>\n<p>Among the fixes: backslashes disappearing from configuration values, such as the SMTP password (#7042); internal cron that never ran again after an aborted execution (#7034); lack of warning about failed nightly backup (#7002); <code data-no-translation=\"\">.htaccess<\/code> changing to <code data-no-translation=\"\">root:root<\/code> (#7035); <code data-no-translation=\"\">DivisionByZeroError<\/code> in PHP traffic statistics 8 (#7023); and BIND unable to write secondary zones on Ubuntu 24.04 with AppArmor. The full list is on the <a href=\"https:\/\/git.ispconfig.org\/ispconfig\/ispconfig3\/-\/milestones\/99\">milestone 99<\/a> on the project's GitLab.<\/p>\n<h2>The 3.3.2p1 patch: regressions already fixed<\/h2>\n<p>On 21 September the <strong>3.3.2p1<\/strong>, came out, which fixes issues found right after the launch. If you have already updated to 3.3.2, check if you were affected:<\/p>\n<ul>\n<li><strong>rspamd was not starting<\/strong> after the update with service reconfiguration (#7054). The update renamed <code data-no-translation=\"\">\/etc\/rspamd\/local.d\/users.conf<\/code>, but the include directive remained in <code data-no-translation=\"\">\/etc\/rspamd\/rspamd.conf<\/code> when it did not end with a line break. P1 removes the directive and repairs already affected servers.<\/li>\n<li><strong>ISPConfig cron aborting<\/strong> with <code data-no-translation=\"\">Unsupported operand types: string + string<\/code> on PHP 8, due to incorrect reading of the output from <code data-no-translation=\"\">repquota<\/code> (#7053).<\/li>\n<li><strong>Old MySQL and MariaDB:<\/strong> the column <code data-no-translation=\"\">pid<\/code> was not created in <code data-no-translation=\"\">sys_cron<\/code> on MySQL and MariaDB prior to 10.0.2 (#7055). And database users were not created in MariaDB prior to 10.1.3 and in MySQL prior to 5.7.8 (#7056).<\/li>\n<li><strong>Mailboxes created on the wrong server<\/strong> when the same domain exists on more than one mail server (#7057).<\/li>\n<\/ul>\n<p>In practice: <strong>update directly to 3.3.2p1<\/strong>. The channel <em>stable<\/em> already ships this version.<\/p>\n<h2>Before updating<\/h2>\n<ol>\n<li><strong>Backup.<\/strong> The updater itself offers to create a backup in <code data-no-translation=\"\">\/var\/backup\/<\/code>. Accept it, and also have a VM snapshot or an external database backup <code data-no-translation=\"\">dbispconfig<\/code> and <code data-no-translation=\"\">\/usr\/local\/ispconfig<\/code>.<\/li>\n<li><strong>Current version.<\/strong> Check where you are coming from:\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">grep ISPC_APP_VERSION \/usr\/local\/ispconfig\/server\/lib\/config.inc.php<\/code><\/pre>\n<\/li>\n<li><strong>Multiserver.<\/strong> Enable maintenance mode, update the master server first, then the slaves, and only then disable maintenance. That is the order the update script itself recommends.<\/li>\n<\/ol>\n<h2>How to update<\/h2>\n<p>The simplest path is the script already installed on the server, pointing to the stable channel. Run as root:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">ispconfig_update.sh --update-source=stable<\/code><\/pre>\n<p>Without the option, the script asks for the source; choose <code data-no-translation=\"\">stable<\/code>. The channels <code data-no-translation=\"\">nightly<\/code> and <code data-no-translation=\"\">git-develop<\/code> are for development environments and should not be used on servers with sites in production.<\/p>\n<p>The alternative is the manual package. The official announcement shows the commands with the file <code data-no-translation=\"\">ISPConfig-3.3.2.tar.gz<\/code>; to already include the patch fixes, use the <code data-no-translation=\"\">3.3.2p1<\/code>, published in the same downloads directory:<\/p>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">cd \/tmp\nwget https:\/\/www.ispconfig.org\/downloads\/ISPConfig-3.3.2p1.tar.gz\ntar xvfz ISPConfig-3.3.2p1.tar.gz\ncd ispconfig3_install\/install\nphp -q update.php<\/code><\/pre>\n<p>The updater asks a few questions. The defaults suit most cases:<\/p>\n<ul>\n<li><strong>Shall the script create a ISPConfig backup in \/var\/backup\/ now?<\/strong> <code data-no-translation=\"\">yes<\/code>.<\/li>\n<li><strong>Reconfigure Permissions in master database?<\/strong> <code data-no-translation=\"\">no<\/code> on a single server; on multi-server, only if you changed something in the permissions.<\/li>\n<li><strong>Reconfigure Services?<\/strong> <code data-no-translation=\"\">yes<\/code>, to apply changes to Dovecot, rspamd, Apache, or nginx. Use <code data-no-translation=\"\">selected<\/code> if you want to choose service by service.<\/li>\n<li><strong>Create new ISPConfig SSL certificate<\/strong>: <code data-no-translation=\"\">no<\/code>, unless you want to replace the panel certificate.<\/li>\n<li><strong>Reconfigure Crontab?<\/strong> <code data-no-translation=\"\">yes<\/code>.<\/li>\n<\/ul>\n<h2>After updating: checklist<\/h2>\n<pre data-no-translation=\"\"><code class=\"language-bash\" data-no-translation=\"\">grep ISPC_APP_VERSION \/usr\/local\/ispconfig\/server\/lib\/config.inc.php   # 3.3.2p1\nsystemctl status rspamd dovecot postfix --no-pager\ntail -n 50 \/var\/log\/ispconfig\/cron.log<\/code><\/pre>\n<ul>\n<li><strong>Password reset link:<\/strong> if the panel is accessed by a name other than the server hostname, set <code data-no-translation=\"\">interface_base_url<\/code> in <code data-no-translation=\"\">\/usr\/local\/ispconfig\/interface\/lib\/config.inc.php<\/code>. Without this, the link comes out with the server hostname.<\/li>\n<li><strong>IDS Whitelist:<\/strong> the scope of entries (<code data-no-translation=\"\">any<\/code>, <code data-no-translation=\"\">user<\/code>, <code data-no-translation=\"\">admin<\/code>) is now respected. If you have <code data-no-translation=\"\">security\/ids.whitelist.custom<\/code>, check that reseller-editable fields use the scope <code data-no-translation=\"\">user<\/code>.<\/li>\n<li><strong>System sender:<\/strong> adjust the <em>Server sender e-mail address<\/em> if the administrator's email is off the server.<\/li>\n<li><strong>Unblocked backup:<\/strong> review the new option in <em>Server Config<\/em> if your databases mix InnoDB and MyISAM.<\/li>\n<li><strong>DMARC:<\/strong> enable policy enforcement at the inbound entry point gradually, monitoring the quarantine during the first days.<\/li>\n<\/ul>\n<h2>Known issues<\/h2>\n<p>The project maintains the list of <a href=\"https:\/\/git.ispconfig.org\/ispconfig\/ispconfig3\/-\/issues?scope=all&amp;utf8=%E2%9C%93&amp;state=opened&amp;label_name[]=Bug\">open bugs<\/a> on GitLab. Check it before updating critical servers, and file new failures on the <a href=\"https:\/\/git.ispconfig.org\/ispconfig\/ispconfig3\/issues\">issue tracker<\/a>. So far, the regressions confirmed by the project itself are the five fixed in 3.3.2p1. ISPConfig's GitLab sits behind a Cloudflare check, so open the links in the browser; command-line tools are often blocked.<\/p>\n<h2>Summary<\/h2>\n<p>3.3.2 is a security update disguised as a feature release. Ubuntu 26.04, DMARC, and lock-free backup are welcome, but the reason to schedule the window this week is the SQL injection in the remote API and Fetchmail, especially on servers with resellers or customers using the API. Update straight to 3.3.2p1, take the backup and go through the checklist. For those setting up the server from scratch, the <a href=\"\/en\/2017\/04\/ispconfig3-no-debian\/\">ISPConfig on Debian<\/a> guide shows the classic path, and the one on <a href=\"\/en\/2026\/09\/nginx-varias-versoes-php-debian-ubuntu\/\">Nginx with multiple PHP versions<\/a> helps understand what the panel configures underneath.<\/p>","protected":false},"excerpt":{"rendered":"<p>ISPConfig 3.3.2 ships Ubuntu 26.04, DMARC on the inbound path, database backups that don't lock up tables, and fixes a SQL injection in the remote API and a privilege escalation in Fetchmail. See what changed, the 3.3.2p1 patch, and how to update safely.<\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,78,71,2,120,3],"tags":[15,73,145,57,5],"class_list":["post-1634","post","type-post","status-publish","format-standard","hentry","category-debian","category-email","category-hospedagem","category-linux","category-servidores","category-ubuntu","tag-debian","tag-hospedagem","tag-ispconfig","tag-painel","tag-ubuntu"],"_links":{"self":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/1634","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/comments?post=1634"}],"version-history":[{"count":2,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/1634\/revisions"}],"predecessor-version":[{"id":1637,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/posts\/1634\/revisions\/1637"}],"wp:attachment":[{"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/media?parent=1634"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/categories?post=1634"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.linuxpro.com.br\/en\/wp-json\/wp\/v2\/tags?post=1634"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}