<?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>Cpe:2.3:a:esm_sh:esm_sh_web:*:*:*:*:*:*:*:* - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/cpes/cpe2.3aesm_shesm_sh_web/</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>Tue, 10 Nov 2026 04:16:54 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/cpes/cpe2.3aesm_shesm_sh_web/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>esm.sh: web.NewHandler arbitrary file read via encoded dot-segment path traversal (CVE-2026-102657)</title><link>https://feed.craftedsignal.io/briefs/2026-11-esm-sh-path-traversal/</link><pubDate>Tue, 10 Nov 2026 04:16:54 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-11-esm-sh-path-traversal/</guid><description>An unauthenticated path traversal vulnerability in esm.sh/web allows remote attackers to read arbitrary files by sending requests with URL-encoded dot-segments.</description><content:encoded><![CDATA[<p>The <code>web.NewHandler</code> component in <code>esm.sh/web</code> (versions &lt; 0.2.0) contains a path traversal vulnerability. When a request path contains URL-encoded dot-segments (e.g., <code>%2e%2e</code>), Go's <code>ServeMux</code> fails to redirect the request, and the handler proceeds to join the decoded path with <code>AppDir</code> without performing a containment check. This allows unauthenticated attackers to read files located outside the intended application directory, restricted only by the filesystem permissions of the server process.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker crafts an HTTP GET request containing URL-encoded traversal segments (e.g., <code>/%2e%2e/%2e%2e/secret.txt</code>).</li>
<li>The network-facing <code>http.ServeMux</code> decodes the request path.</li>
<li>Because the segments are URL-encoded, <code>ServeMux</code> does not block or redirect the request.</li>
<li>The request is passed to <code>web.NewHandler</code>.</li>
<li><code>web.NewHandler</code> joins the <code>Config.AppDir</code> path with the decoded <code>r.URL.Path</code>.</li>
<li>The application performs <code>os.Lstat</code> and <code>os.Open</code> on the resulting path, which resolves to a location outside the application directory.</li>
<li>The server reads the file content and copies it into the HTTP response body, disclosing sensitive data to the attacker.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation allows unauthenticated remote attackers to read arbitrary files on the filesystem accessible to the application process. This may include configuration files, environment variables, source code, or private keys, depending on the server configuration and file permissions.</p>
<h2 id="recommendation">Recommendation</h2>
<ol>
<li>Upgrade <code>esm.sh/web</code> to version 0.2.0 or later immediately.</li>
<li>For environments where upgrading is delayed, apply input validation at the web server or proxy level to block request paths containing <code>%2e</code> or <code>..</code> segments.</li>
<li>Ensure the web application runs with the principle of least privilege, restricting the filesystem access of the process to the absolute minimum required by <code>AppDir</code>.</li>
</ol>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>path-traversal</category><category>cve-2026-102657</category><category>arbitrary-file-read</category></item></channel></rss>