<?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>Seroval (Versions Prior to 1.5.3) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/seroval-versions-prior-to-1.5.3/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Fri, 24 Jul 2026 16:23:52 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/seroval-versions-prior-to-1.5.3/feed.xml" rel="self" type="application/rss+xml"/><item><title>Seroval Type Confusion Vulnerability in fromJSON() Leads to Deserialization RCE</title><link>https://feed.craftedsignal.io/briefs/2026-07-seroval-type-confusion/</link><pubDate>Fri, 24 Jul 2026 16:23:52 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-07-seroval-type-confusion/</guid><description>A critical type confusion vulnerability, CVE-2026-59940, in `seroval.fromJSON()` versions prior to 1.5.3 allows attackers to provide malicious JSON input that misleads Promise control nodes into operating on attacker-controlled values, potentially leading to arbitrary method invocation and remote code execution or server compromise in downstream server frameworks like TanStack Start that deserialize untrusted input with plugins enabled.</description><content:encoded><![CDATA[<p>A critical type confusion vulnerability, identified as CVE-2026-59940, exists in the <code>seroval</code> JavaScript serialization library, specifically within the <code>seroval.fromJSON()</code> function, affecting all versions prior to 1.5.3. This flaw allows an attacker to craft special JSON input that exploits a logic error where internal Promise resolver records are confused with attacker-controlled values during deserialization. When applications, particularly downstream server frameworks such as TanStack Start, deserialize untrusted Seroval JSON with plugins enabled, this type confusion can lead to the invocation of attacker-controlled methods or callable wrappers. This primitive could enable unintended server-side invocation, potentially resulting in remote code execution (RCE) or equivalent server compromise, depending on the application's exposed functionality. The issue was privately coordinated and fixed in <code>seroval@1.5.3</code>.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li><strong>Craft Malicious JSON</strong>: An attacker crafts a specially designed Seroval JSON payload. This payload contains values that, due to the type confusion vulnerability (CVE-2026-59940), are engineered to be misinterpreted by <code>seroval.fromJSON()</code> as internal Promise resolver records.</li>
<li><strong>Deliver Payload</strong>: The attacker sends this malicious Seroval JSON input to a vulnerable server-side application that uses <code>seroval.fromJSON()</code> for deserialization of untrusted client input.</li>
<li><strong>Initiate Deserialization</strong>: The vulnerable application receives the untrusted JSON and passes it to <code>seroval.fromJSON()</code> for processing. This typically occurs when plugins are enabled in the Seroval configuration.</li>
<li><strong>Trigger Type Confusion</strong>: During the deserialization, <code>seroval.fromJSON()</code> attempts to process Promise control nodes. Due to the type confusion flaw, it fails to properly verify the type of values from the general deserialization reference table, mistakenly treating attacker-controlled data as legitimate Promise resolver records.</li>
<li><strong>Invoke Attacker-Controlled Methods</strong>: This misinterpretation leads to the Promise control nodes operating on these attacker-controlled values, causing the unintended invocation of methods or callable wrappers that were defined through registered plugins in the downstream framework.</li>
<li><strong>Achieve Server Compromise</strong>: Depending on the specific methods invoked and the functionality exposed by the application's plugins, this arbitrary method invocation can lead to severe consequences, including remote code execution (RCE), arbitrary file manipulation, or other forms of server compromise.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The vulnerable deserialization path can confuse attacker-created values with internal Seroval promise resolver records, leading to a deserialization side-effect primitive when untrusted JSON is processed with plugins enabled. The direct impact on applications using <code>seroval</code> is the ability for an attacker to influence program flow during deserialization. In downstream server frameworks, such as TanStack Start, which might register plugins returning callable wrappers, this vulnerability can be leveraged to trigger unintended server-side invocations. This can escalate to remote code execution (RCE), arbitrary file system access, or full server compromise, depending on the scope of the invoked methods. The vulnerability was privately validated against TanStack Start, confirming potential downstream exploitation.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade the <code>seroval</code> package to version <code>1.5.3</code> or later immediately to mitigate CVE-2026-59940.</li>
<li>For downstream projects accepting Seroval JSON from untrusted clients, implement defense-in-depth controls such as restricting accepted Seroval node types for client-to-server payloads.</li>
<li>Restrictively allowlist plugin tags for inbound deserialization processes to prevent unintended plugin activation.</li>
<li>Avoid registering plugins that produce callable or privileged values for untrusted inputs unless absolutely necessary.</li>
<li>Implement regression tests to ensure deserialization cannot cause unintended server-side invocation as a side effect.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>type-confusion</category><category>deserialization</category><category>rce</category><category>npm</category><category>ghsa</category></item></channel></rss>