<?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/" xmlns:webfeeds="http://webfeeds.org/rss/1.0"><channel><title>@Openhop/Server (0.3.5) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/@openhop/server-0.3.5/</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>Thu, 10 Sep 2026 00:50:53 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/@openhop/server-0.3.5/feed.xml" rel="self" type="application/rss+xml"/><image><url>https://feed.craftedsignal.io/favicon-32x32.png</url><title>CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/</link><width>32</width><height>32</height></image><webfeeds:icon>https://feed.craftedsignal.io/favicon.svg</webfeeds:icon><item><title>Path Traversal Vulnerability in @openhop/server</title><link>https://feed.craftedsignal.io/briefs/2026-09-openhop-path-traversal/</link><pubDate>Thu, 10 Sep 2026 00:50:53 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-09-openhop-path-traversal/</guid><description>The @openhop/server package is vulnerable to unauthenticated path traversal, allowing remote attackers to read or delete arbitrary YAML files via unsanitized route parameters in the Flow ID endpoint.</description><content:encoded><![CDATA[<p>The @openhop/server package (0.3.5 and potentially surrounding versions) is affected by a path traversal vulnerability (CWE-22) originating from the unsafe construction of filesystem paths in <code>FlowStore.filePath()</code>. The application concatenates unsanitized HTTP route parameters directly into a <code>path.join</code> call without validation. Because the Fastify router (<code>find-my-way</code>) automatically decodes URL-encoded characters, an attacker can supply sequences such as <code>..%2F</code> to escape the intended <code>OPENHOP_DATA_DIR</code> directory.</p>
<p>This vulnerability impacts both the read (GET) and delete (DELETE) operations of the <code>/api/flows/:id</code> endpoint. Furthermore, the application registers CORS with <code>origin: true</code>, making local instances exploitable via malicious browser-based requests. Default Docker deployments binding to <code>0.0.0.0</code> allow direct unauthenticated network access, significantly increasing the risk of data exfiltration and file destruction for exposed instances.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker sends a crafted HTTP GET or DELETE request to the <code>/api/flows/:id</code> endpoint using a traversal payload (e.g., <code>..%2Ffilename</code>).</li>
<li>The Fastify <code>find-my-way</code> router decodes the URL-encoded <code>%2F</code> character into a literal <code>/</code>, resulting in an <code>id</code> parameter value of <code>../filename</code>.</li>
<li>The <code>FlowStore.filePath()</code> method receives the malicious <code>id</code> string.</li>
<li>The method executes <code>path.join(this.dir, '../filename.yaml')</code>, which normalizes to a path outside the designated data directory.</li>
<li>The application performs a file system operation (<code>readFile</code> for GET or <code>unlink</code> for DELETE) on the resulting path.</li>
<li>The server confirms the action by returning the contents of the target file or a success status for the file deletion.</li>
<li>The attacker succeeds in either exfiltrating sensitive YAML-serialized information or permanently deleting application-critical files.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The vulnerability allows unauthenticated attackers to read or delete any <code>.yaml</code> file accessible to the user running the OpenHop process. Successful exploitation can lead to the exposure of sensitive application secrets or configuration data (Confidentiality) and the permanent loss of flow configurations (Integrity/Availability). Deployment environments with default Docker settings (<code>HOST=0.0.0.0</code>) are reachable directly from the internet, while local instances are vulnerable via cross-origin browser-based exploitation.</p>
<h2 id="recommendation">Recommendation</h2>
<ol>
<li>Patch immediately by implementing an allowlist validation for the <code>id</code> parameter in <code>packages/server/src/store.ts</code> using a regex pattern (e.g., <code>/^[A-Za-z0-9_-]+$/</code>).</li>
<li>If an immediate update is not possible, restrict access to the <code>/api/flows/</code> endpoint via network-level firewalls or reverse proxy access control lists to prevent unauthenticated access.</li>
<li>Reconfigure the OpenHop deployment to bind to <code>127.0.0.1</code> rather than <code>0.0.0.0</code> if remote access is not required for the management API.</li>
<li>Disable <code>origin: true</code> in the CORS configuration within <code>packages/server/src/index.ts</code> and replace it with a restrictive allowlist of trusted origins.</li>
</ol>
]]></content:encoded><category domain="severity">high</category><category domain="type">threat</category></item></channel></rss>