<?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>Saltcorn — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/tags/saltcorn/</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>Sat, 11 Apr 2026 12:00:00 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/tags/saltcorn/feed.xml" rel="self" type="application/rss+xml"/><item><title>Unauthenticated Arbitrary File Write in Saltcorn</title><link>https://feed.craftedsignal.io/briefs/2026-04-saltcorn-file-write/</link><pubDate>Sat, 11 Apr 2026 12:00:00 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-04-saltcorn-file-write/</guid><description>Unauthenticated attackers can exploit a vulnerability in Saltcorn versions prior to 1.4.5, 1.5.5, and 1.6.0-beta.4 to write arbitrary files and list directory contents on the server.</description><content:encoded><![CDATA[<p>Saltcorn, a no-code database application builder, is vulnerable to an unauthenticated arbitrary file write vulnerability. Specifically, versions prior to 1.4.5, 1.5.5, and 1.6.0-beta.4 are affected. An attacker can leverage the POST <code>/sync/offline_changes</code> endpoint to create arbitrary directories and write a <code>changes.json</code> file with attacker-controlled content anywhere on the server&rsquo;s filesystem. Subsequently, the GET <code>/sync/upload_finished</code> endpoint allows an unauthenticated attacker to list directory contents and read specific JSON files. This combination of actions allows for complete control of the application, potentially leading to remote code execution. This vulnerability is resolved in Saltcorn versions 1.4.5, 1.5.5, and 1.6.0-beta.4.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>The attacker sends a POST request to the <code>/sync/offline_changes</code> endpoint.</li>
<li>This POST request includes crafted JSON content intended to be written to a <code>changes.json</code> file.</li>
<li>The server creates arbitrary directories based on the attacker&rsquo;s specifications within the POST request.</li>
<li>The server writes the attacker-supplied JSON content to the <code>changes.json</code> file in the created directory.</li>
<li>The attacker sends a GET request to the <code>/sync/upload_finished</code> endpoint.</li>
<li>The GET request specifies the directory the attacker previously created.</li>
<li>The server lists the contents of the specified directory, including the <code>changes.json</code> file.</li>
<li>The attacker reads the contents of the <code>changes.json</code> file. Successful exploitation allows arbitrary file creation, directory listing, and reading of file contents.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability allows an unauthenticated attacker to write arbitrary files and list directory contents on the Saltcorn server. This can lead to complete compromise of the application, including remote code execution, data theft, and denial of service. Given that Saltcorn is used in various sectors to build database applications, the potential impact is significant across multiple industries.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade Saltcorn to version 1.4.5, 1.5.5, or 1.6.0-beta.4 or later to patch CVE-2026-40163.</li>
<li>Deploy the Sigma rule <code>Detect Saltcorn Offline Changes Endpoint Abuse</code> to detect suspicious POST requests to the <code>/sync/offline_changes</code> endpoint.</li>
<li>Deploy the Sigma rule <code>Detect Saltcorn Upload Finished Endpoint Abuse</code> to detect suspicious GET requests to the <code>/sync/upload_finished</code> endpoint.</li>
<li>Monitor web server logs for unexpected POST requests to <code>/sync/offline_changes</code> and GET requests to <code>/sync/upload_finished</code> (webserver log source).</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>saltcorn</category><category>file-write</category><category>vulnerability</category></item></channel></rss>