Esbuild version 0.8.53 represents a subtle update to the blazing-fast JavaScript bundler and minifier, following closely on the heels of version 0.8.52. Both versions retain the core promise of esbuild: offering developers an incredibly performant tool for bundling and minifying JavaScript code, licensed under the permissive MIT license and maintained in its GitHub repository.
While the description and fundamental characteristics remain consistent, a key difference lies in the *unpackedSize*, which has slightly increased from 71470 to 71788. This suggests minor adjustments or additions to the codebase, potentially encompassing bug fixes, performance tweaks, or small feature enhancements that collectively contribute to the slightly larger footprint.
The *releaseDate* also highlights the quick iteration cycle, with version 0.8.53 being released just two days after version 0.8.52, pointing to an active development process.
For developers considering esbuild, these versions showcase a tool dedicated to speed and efficiency in JavaScript bundling. While the change between 0.8.52 and 0.8.53 might not be revolutionary, the quick release cycle indicates ongoing improvements and a commitment to providing a robust and performant bundler. Developers should look to the Changlog to evaluate the specific changelog details to evaluate whether the changes between the two versions are relevant to their use cases. This makes esbuild an appealing choice for projects where build times are a critical factor. The evolution from 0.8.52 to 0.8.53 showcases a healthy development pace and a dedication towards continuous improvement.
All the vulnerabilities related to the version 0.8.53 of the package
esbuild enables any website to send any requests to the development server and read the response
esbuild allows any websites to send any request to the development server and read the response due to default CORS settings.
esbuild sets Access-Control-Allow-Origin: *
header to all requests, including the SSE connection, which allows any websites to send any request to the development server and read the response.
https://github.com/evanw/esbuild/blob/df815ac27b84f8b34374c9182a93c94718f8a630/pkg/api/serve_other.go#L121 https://github.com/evanw/esbuild/blob/df815ac27b84f8b34374c9182a93c94718f8a630/pkg/api/serve_other.go#L363
Attack scenario:
http://malicious.example.com
).fetch('http://127.0.0.1:8000/main.js')
request by JS in that malicious web page. This request is normally blocked by same-origin policy, but that's not the case for the reasons above.http://127.0.0.1:8000/main.js
.In this scenario, I assumed that the attacker knows the URL of the bundle output file name. But the attacker can also get that information by
/index.html
: normally you have a script tag here/assets
: it's common to have a assets
directory when you have JS files and CSS files in a different directory and the directory listing feature tells the attacker the list of files/esbuild
SSE endpoint: the SSE endpoint sends the URL path of the changed files when the file is changed (new EventSource('/esbuild').addEventListener('change', e => console.log(e.type, e.data))
)The scenario above fetches the compiled content, but if the victim has the source map option enabled, the attacker can also get the non-compiled content by fetching the source map file.
npm i
npm run watch
fetch('http://127.0.0.1:8000/app.js').then(r => r.text()).then(content => console.log(content))
in a different website's dev tools.Users using the serve feature may get the source code stolen by malicious websites.