<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Composer — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/vendors/composer/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata — refreshed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Wed, 22 Apr 2026 17:28:39 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/vendors/composer/feed.xml" rel="self" type="application/rss+xml"/><item><title>CI4MS Backup Restore Zip Slip Vulnerability Leads to RCE</title><link>https://feed.craftedsignal.io/briefs/2024-01-09-ci4ms-zip-slip/</link><pubDate>Wed, 22 Apr 2026 17:28:39 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2024-01-09-ci4ms-zip-slip/</guid><description>The CI4MS Backup restore function is vulnerable to Zip Slip, allowing remote code execution by uploading a malicious ZIP archive that writes PHP files to the public web root due to missing validation of entry names during extraction, affecting versions prior to 0.31.5.0.</description><content:encoded><![CDATA[<p>A Zip Slip vulnerability exists in the CI4MS backup restore functionality. Authenticated users with backup creation permissions can exploit this by uploading a specially crafted ZIP archive. The vulnerability lies in the <code>Backup::restore</code> function (modules/Backup/Controllers/Backup.php), where the application extracts the uploaded ZIP without proper validation of the entry names. This allows an attacker to write files to arbitrary locations, including the public web root, leading to remote code execution (RCE). This vulnerability affects CI4MS versions prior to 0.31.5.0. By crafting a ZIP file with malicious paths, attackers can bypass intended directory restrictions.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An authenticated user with <code>create</code> role accesses the vulnerable <code>/backend/backup/restore</code> endpoint.</li>
<li>The attacker crafts a malicious ZIP archive containing a PHP file (e.g., <code>shell.php</code>) with a path traversing outside the intended extraction directory (e.g., <code>../../public/shell.php</code>).</li>
<li>The attacker uploads the malicious ZIP archive via the <code>backup_file</code> parameter in a POST request.</li>
<li>The server moves the uploaded ZIP file to <code>WRITEPATH . 'uploads/'</code> without sanitizing or validating the ZIP entry names.</li>
<li>The <code>ZipArchive::extractTo()</code> function is called on the uploaded ZIP, extracting the malicious file to the specified path <code>../../public/shell.php</code>.</li>
<li>The PHP file is written to the web root, allowing for remote code execution.</li>
<li>The attacker triggers the injected PHP code by sending a request to <code>/shell.php?c=id</code>, executing arbitrary commands on the server.</li>
<li>The attacker gains complete control over the compromised server, including access to sensitive data and the ability to further compromise the network.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability allows an attacker to achieve remote code execution (RCE) on the CI4MS server. This can lead to full compromise of the installation, including the database credentials stored in <code>.env</code> and any other sensitive data handled by the site. Because the affected route is in the <code>csrfExcept</code> list, this vulnerability can be triggered cross-site against a logged-in administrator, potentially leading to drive-by RCE against site operators. The vulnerability affects versions of <code>composer/ci4-cms-erp/ci4ms</code> prior to <code>0.31.5.0</code>.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade <code>composer/ci4-cms-erp/ci4ms</code> to version 0.31.5.0 or later to patch the vulnerability as described in GHSA-xp9f-pvvc-57p4.</li>
<li>Implement server-side validation of uploaded ZIP archive entry names to prevent path traversal vulnerabilities. Specifically, validate the file paths extracted from the ZIP archive before calling <code>extractTo()</code>.</li>
<li>Deploy the Sigma rule <code>Detect CI4MS Zip Slip via Web Request</code> to identify potential exploitation attempts by monitoring HTTP requests to the vulnerable endpoint.</li>
<li>Enable web server logging and monitor for suspicious file creations, especially in web-accessible directories, after ZIP archive uploads, based on the attack chain described above.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>zip-slip</category><category>rce</category><category>code-injection</category><category>vulnerability</category></item><item><title>CI4MS Authenticated Remote Code Execution via Theme Upload</title><link>https://feed.craftedsignal.io/briefs/2024-01-30-ci4ms-rce/</link><pubDate>Tue, 30 Jan 2024 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2024-01-30-ci4ms-rce/</guid><description>CI4MS versions 0.26.0.0 through 0.31.6.0 are vulnerable to remote code execution; an authenticated backend user with theme upload permissions can upload a crafted ZIP file containing a PHP file, which is then installed into the web-accessible public directory without filtering, allowing direct execution via HTTP.</description><content:encoded><![CDATA[<p>CI4MS versions 0.26.0.0 through 0.31.6.0 are vulnerable to authenticated remote code execution. The vulnerability lies in the theme upload feature, where any authenticated backend user with theme-upload permissions can upload a crafted ZIP file. PHP files included in the uploaded ZIP are installed into a web-accessible directory without extension or content filtering. This allows attackers to execute arbitrary PHP code on the server by directly accessing the uploaded files via HTTP requests. The vulnerability was reported on April 29, 2026 and can lead to full server compromise if exploited.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker gains valid credentials for a backend user account with theme upload permissions.</li>
<li>The attacker crafts a malicious ZIP archive containing a PHP file (e.g., shell.php) with code to execute system commands via a GET parameter.</li>
<li>The attacker uploads the malicious ZIP file (e.g., evil_theme.zip) through the /backend/themes/upload endpoint using a POST request with multipart/form-data.</li>
<li>The application extracts the ZIP archive to a temporary directory.</li>
<li>The application copies the PHP file from the temporary directory to the public/templates/evil/ directory using the rename() function, with no file type validation or content inspection.</li>
<li>The attacker crafts an HTTP GET request targeting the uploaded PHP file (e.g., /templates/evil/shell.php?c=id).</li>
<li>The web server executes the PHP code, running the system command specified in the &lsquo;c&rsquo; parameter.</li>
<li>The output of the executed command is returned in the HTTP response, granting the attacker remote code execution.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows the attacker to execute arbitrary PHP code on the server under the context of the web server user. This can be leveraged to achieve OS-level command execution, potentially leading to data exfiltration, lateral movement, persistence, or full server compromise. Any deployment where a backend user has been granted theme upload permission is vulnerable. While a superadmin already has full privileges, this vulnerability allows lower-privileged roles to escalate their access.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Apply the necessary patch or upgrade to a version of CI4MS beyond 0.31.6.0 to remediate CVE-2026-41587.</li>
<li>Monitor web server logs for suspicious HTTP requests targeting newly created directories under <code>/templates/</code> with PHP file extensions to detect potential exploitation attempts. Create a rule to detect this.</li>
<li>Implement stricter file upload validation, including file extension allowlists, MIME type checking, and content inspection, to prevent the upload of malicious PHP files.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>code-execution</category><category>web-application</category><category>php</category></item><item><title>Admidio Inverted 2FA Reset Allows Privilege Escalation</title><link>https://feed.craftedsignal.io/briefs/2024-01-admidio-2fa-bypass/</link><pubDate>Mon, 22 Jan 2024 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2024-01-admidio-2fa-bypass/</guid><description>A logic error in Admidio's two-factor authentication reset inverts the authorization check, allowing non-admin users to remove other users' TOTP, including administrators, reducing their security to password-only authentication in versions 5.0.8 and earlier.</description><content:encoded><![CDATA[<p>Admidio, a web-based content management system for organizations, contains a critical vulnerability in its two-factor authentication (2FA) reset mechanism. The vulnerability, present in versions 5.0.8 and earlier, stems from an inverted authorization check within the <code>modules/profile/two_factor_authentication.php</code> script. This flaw enables non-administrative users, specifically group leaders with profile edit rights, to disable 2FA for other users, including administrator accounts. The vulnerability was reported on April 29, 2026. By exploiting this flaw, attackers can bypass 2FA, gaining unauthorized access to privileged accounts and potentially compromising the entire Admidio installation. This highlights the importance of rigorous security audits and proper authorization checks in web applications.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker compromises or gains access to a non-admin user account within Admidio that possesses <code>hasRightEditProfile()</code> permission over an administrator account.</li>
<li>The attacker crafts a POST request to <code>/adm_program/modules/profile/two_factor_authentication.php</code> with the <code>mode</code> parameter set to <code>reset</code> and the <code>user_uuid</code> parameter set to the UUID of the target administrator account.</li>
<li>The server-side script <code>modules/profile/two_factor_authentication.php</code> executes the flawed authorization check at line 84. Due to the inverted logic (<code>!==</code> instead of <code>===</code>), the check incorrectly grants permission to the non-admin user to reset the administrator&rsquo;s 2FA.</li>
<li>The server removes the TOTP configuration associated with the administrator&rsquo;s account from the database or configuration files.</li>
<li>The attacker can now attempt to log in to the administrator account using only the password, bypassing the 2FA requirement.</li>
<li>If the attacker knows or can guess the administrator&rsquo;s password (via credential stuffing, brute force, or other means), they successfully gain access to the account.</li>
<li>With administrator privileges, the attacker can perform a variety of malicious actions, such as creating new accounts, modifying website content, or accessing sensitive data.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The vulnerability allows attackers to bypass two-factor authentication on administrator accounts in Admidio installations. This can lead to unauthorized access to sensitive data, modification of website content, and potentially full control over the affected system. While the number of affected installations is unknown, organizations using vulnerable versions of Admidio are at risk. Success of the attack results in complete compromise of the Admidio instance and the data it manages.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Apply the recommended fix by changing <code>!==</code> to <code>===</code> on line 84 of <code>modules/profile/two_factor_authentication.php</code> to correct the authorization logic (see Overview).</li>
<li>Deploy the Sigma rule <code>Detect Admidio 2FA Reset Request</code> to detect attempts to exploit this vulnerability by monitoring HTTP POST requests to the vulnerable endpoint (see Rules).</li>
<li>Upgrade Admidio to a patched version that incorporates the fix for CVE-2026-41660.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>2fa</category><category>bypass</category><category>privilege-escalation</category><category>admidio</category></item><item><title>AzuraCast Path Traversal Leads to Remote Code Execution</title><link>https://feed.craftedsignal.io/briefs/2024-01-azuracast-rce/</link><pubDate>Wed, 03 Jan 2024 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2024-01-azuracast-rce/</guid><description>AzuraCast is vulnerable to path traversal in the Flow.js media upload endpoint, allowing authenticated users with media permissions to write arbitrary files, leading to remote code execution via PHP webshell upload.</description><content:encoded><![CDATA[<p>AzuraCast, a self-hosted web radio management suite, is susceptible to a critical path traversal vulnerability (CVE-2026-42605) in its Flow.js media upload endpoint (<code>/api/station/{station_id}/files/upload</code>). This flaw allows an authenticated user with media management permissions, such as a DJ or station manager, to bypass file storage directory restrictions. By manipulating the <code>currentDirectory</code> parameter during file uploads, attackers can write arbitrary files to locations outside the intended media directory. The vulnerability is present in versions up to and including 0.23.5, and exploitation leads to remote code execution via PHP webshell upload, potentially resulting in full server compromise. The default local filesystem storage backend is required for exploitation; S3 or remote storage is not vulnerable.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>The attacker authenticates to the AzuraCast web interface with a valid user account that has the <code>StationPermissions::Media</code> permission (e.g., DJ or Station Manager).</li>
<li>The attacker crafts a malicious HTTP POST request to the <code>/api/station/{station_id}/files/upload</code> endpoint, targeting a station that uses local storage.</li>
<li>The request includes a <code>currentDirectory</code> parameter containing path traversal sequences (e.g., <code>../../../../../var/azuracast/www/public</code>).</li>
<li>The request also includes a PHP webshell file (<code>shell.php</code>) as the <code>file_data</code> parameter.</li>
<li>The server-side code in <code>FlowUploadAction.php</code> concatenates the unsanitized <code>currentDirectory</code> value with the sanitized filename.</li>
<li>The server attempts to process the uploaded file, but the <code>.php</code> extension triggers a <code>CannotProcessMediaException</code>.</li>
<li>The <code>finally</code> block in <code>MediaProcessor.php</code> executes, calling <code>LocalFilesystem::upload()</code> to copy the file to the concatenated path, bypassing normal path sanitization due to <code>PathPrefixer::prefixPath()</code>.</li>
<li>The webshell is written to the web root, allowing the attacker to execute arbitrary commands by accessing the webshell via HTTP.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability allows an attacker to execute arbitrary code on the AzuraCast server. This can lead to full server compromise, including reading sensitive configuration files (database credentials, API keys), accessing all station data, modifying application code, and potentially escalating privileges to root. A DJ-level user, the lowest privileged role with media access, can achieve the equivalent of full system administrator access, resulting in data exfiltration and complete control over the AzuraCast instance.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Apply the vendor-provided patch by sanitizing the <code>currentDirectory</code> parameter in <code>FlowUploadAction.php</code> using <code>UploadedFile::filterClientPath()</code> to prevent path traversal.</li>
<li>Implement path normalization in <code>LocalFilesystem::upload()</code> to prevent traversal even after concatenation, as described in the advisory.</li>
<li>Deploy the Sigma rule &ldquo;Detect AzuraCast Webshell Upload via Path Traversal&rdquo; to identify exploitation attempts based on suspicious <code>currentDirectory</code> parameters.</li>
<li>Monitor web server logs for access to unusual PHP files in the web root directory, such as <code>shell.php</code> as described in the PoC.</li>
<li>Ensure that AzuraCast instances do not grant excessive permissions to users; minimize the number of accounts with <code>StationPermissions::Media</code>.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>path-traversal</category><category>rce</category><category>azuracast</category><category>webserver</category></item><item><title>AzuraCast Account Takeover via X-Forwarded-Host Poisoning</title><link>https://feed.craftedsignal.io/briefs/2024-01-azuracast-account-takeover/</link><pubDate>Wed, 03 Jan 2024 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2024-01-azuracast-account-takeover/</guid><description>AzuraCast is vulnerable to password reset poisoning due to unconditionally trusting the X-Forwarded-Host header, allowing an attacker to inject a malicious host into the password reset URL, exfiltrate the reset token, reset the victim's password, and disable 2FA, leading to account takeover.</description><content:encoded><![CDATA[<p>AzuraCast versions 0.23.5 and earlier are vulnerable to an account takeover vulnerability stemming from the unconditional trust of the <code>X-Forwarded-Host</code> HTTP header. An unauthenticated attacker can exploit this by injecting a malicious hostname into the password reset URL sent to a user. This is achieved by sending a crafted request to the <code>/forgot</code> endpoint with the <code>X-Forwarded-Host</code> header set to a domain controlled by the attacker. The victim, upon clicking the poisoned link in the reset email, inadvertently sends their password reset token to the attacker&rsquo;s server. This allows the attacker to reset the victim&rsquo;s password and disable their two-factor authentication, gaining complete control of the account. This vulnerability exists because the <code>ApplyXForwarded</code> middleware doesn&rsquo;t validate the <code>X-Forwarded-Host</code> header against a trusted proxy allowlist and the application uses the request host for generating security-critical URLs.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>The attacker crafts a POST request to the <code>/forgot</code> endpoint with the <code>X-Forwarded-Host</code> header set to a malicious domain (e.g., <code>evil.com</code>).</li>
<li>The AzuraCast application generates a password reset email containing a poisoned URL with the attacker&rsquo;s domain.</li>
<li>The victim receives the password reset email and clicks on the malicious link, sending a GET request to the attacker&rsquo;s domain, inadvertently leaking the password reset token.</li>
<li>The attacker&rsquo;s server captures the password reset token from the URL path.</li>
<li>The attacker uses the captured token to access the password reset page on the legitimate AzuraCast instance.</li>
<li>The attacker obtains a CSRF token from the reset page.</li>
<li>The attacker crafts a POST request to the password reset endpoint on the real AzuraCast instance, including the CSRF token and a new password.</li>
<li>The victim&rsquo;s password is changed, and their 2FA is disabled, granting the attacker full account access.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability allows for full account takeover of any user, including administrators, without prior authentication. The attack also bypasses 2FA, negating its security benefits. If an administrator account is compromised, the attacker gains full control of the AzuraCast instance, including all stations, media, and system settings. The attack requires the victim to click a link in a legitimate-looking password reset email, increasing the likelihood of success. This can lead to unauthorized access to sensitive data, disruption of service, and reputational damage.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Implement a trusted proxy allowlist in <code>backend/src/Middleware/ApplyXForwarded.php</code> to validate the <code>X-Forwarded-Host</code> header, as described in the provided fix, to prevent hostname injection (Fix 1).</li>
<li>Modify <code>ForgotPasswordAction.php</code> to generate the reset URL using the configured <code>base_url</code> setting rather than the request-derived URL to ensure the correct domain is used in the reset email (Fix 2).</li>
<li>Deploy the following Sigma rule to detect suspicious requests to the <code>/forgot</code> endpoint with a non-standard <code>X-Forwarded-Host</code> header to identify potential exploitation attempts.</li>
<li>Remove the line <code>$user-&gt;two_factor_secret = null;</code> from <code>LoginTokenAction.php:75</code> to prevent 2FA from being disabled during password reset, requiring a separate, explicit flow for 2FA recovery (Fix 3).</li>
</ul>
]]></content:encoded><category domain="severity">medium</category><category domain="type">advisory</category><category>account takeover</category><category>x-forwarded-host</category><category>password reset poisoning</category></item><item><title>CI4MS Theme Upload Zip Slip Vulnerability</title><link>https://feed.craftedsignal.io/briefs/2024-01-02-ci4ms-zip-slip/</link><pubDate>Tue, 02 Jan 2024 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2024-01-02-ci4ms-zip-slip/</guid><description>A critical vulnerability exists in ci4ms Theme::upload, where improper validation of ZIP archive entry names allows authenticated users with theme creation permissions to write files to arbitrary locations, leading to remote code execution.</description><content:encoded><![CDATA[<p>The ci4ms application is vulnerable to a Zip Slip attack in its theme upload functionality. This vulnerability, present in versions prior to 0.31.5.0, allows an authenticated backend user with theme creation privileges to upload a specially crafted ZIP archive. Due to the lack of proper validation of entry names during extraction, the attacker can write files to arbitrary locations on the filesystem. This is achieved by including malicious path traversal sequences (e.g., <code>../../</code>) in the ZIP archive&rsquo;s entry names. The vulnerability allows an attacker to place a PHP webshell in the public web root, enabling remote code execution on the server. This issue poses a significant risk to organizations using ci4ms, as it allows attackers to fully compromise the installation and access sensitive data.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker authenticates to the ci4ms backend with an account possessing the theme <code>create</code> role.</li>
<li>The attacker crafts a malicious ZIP archive containing a PHP webshell (e.g., <code>shell.php</code>) and an <code>info.xml</code> file for theme validation. The webshell is placed with a path traversal sequence, such as <code>../../public/shell.php</code>.</li>
<li>The attacker navigates to the theme upload functionality within the ci4ms backend, accessible via the <code>backend/themes/themesUpload</code> route.</li>
<li>The attacker uploads the malicious ZIP archive through the web interface, triggering the <code>Theme::upload</code> function.</li>
<li>The <code>ZipArchive::extractTo()</code> function extracts the contents of the ZIP archive to a temporary directory (<code>WRITEPATH . 'tmp/' . str_replace('_theme.zip', '', $file-&gt;getName()) . '/'</code>) without validating entry names.</li>
<li>Due to the path traversal sequences in the ZIP archive, the PHP webshell is written to the web server&rsquo;s document root (e.g., <code>/var/www/html/public/shell.php</code>).</li>
<li>The attacker accesses the PHP webshell via a web browser or command-line tool like <code>curl</code>, passing commands to be executed on the server (e.g., <code>https://target.example.com/shell.php?c=id</code>).</li>
<li>The webserver executes the attacker-supplied command, granting the attacker remote code execution on the compromised system.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this Zip Slip vulnerability allows an attacker to gain remote code execution on the ci4ms server. This grants the attacker full control over the server, potentially leading to the exfiltration of sensitive data, including database credentials stored in the <code>.env</code> file. The attacker can also modify or delete website content, install malware, or use the compromised server as a launching point for further attacks. This vulnerability affects versions of ci4ms prior to 0.31.5.0, and impacts any installation where an attacker can obtain theme creation privileges.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade ci4ms to version 0.31.5.0 or later to patch CVE-2026-41203.</li>
<li>Deploy the Sigma rule <code>Detect CI4MS Webshell Upload via Theme Exploit</code> to detect attempts to upload malicious themes containing webshells.</li>
<li>Implement input validation and sanitization measures to prevent path traversal attacks in file upload functionalities.</li>
<li>Restrict theme creation privileges to only trusted administrators and monitor theme creation activity for suspicious behavior.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>zip-slip</category><category>rce</category><category>codeigniter</category><category>vulnerability</category></item></channel></rss>