Socket.IO version 0.7.11 represents a minor update to the popular real-time communication library, building upon the foundation laid by version 0.7.10. Both versions aim to simplify the development of cross-browser real-time applications using a WebSocket-like API. Examining the package metadata reveals key similarities and subtle differences that may influence a developer's choice between them.
Notably, the core description remains consistent: "Real-time apps made cross-browser & easy with a WebSocket-like API," highlighting the library's central value proposition. The project maintains identical dependencies on redis (version 0.6.6) and policyfile (version 0.0.4), suggesting no fundamental changes to the underlying mechanisms for data persistence or security policies. However, a critical difference lies in the dependency on socket.io-client. Version 0.7.11 of the server-side package relies on version 0.7.11 of the client, while version 0.7.10 depends on the 0.7.10 client. This indicates a likely synchronization of features or bug fixes between the server and client components.
Furthermore, the development dependencies for testing purposes remain unchanged, with should, expresso, and assertvanish versions consistent across both releases. The repository information and author details, including the maintainer's name and email, are also identical. The most significant change is the releaseDate, with version 0.7.11 being released approximately 4 hours after version 0.7.10. This proximity suggests the newer release addresses immediate issues or contains small improvements identified shortly after the initial release. Developers should consider upgrading to 0.7.11 to ensure they are using the latest, potentially more stable, and synchronized client-server components for their real-time applications.
All the vulnerabilities related to the version 0.7.11 of the package
Insecure randomness in socket.io
Affected versions of socket.io
depend on Math.random()
to create socket IDs, and therefore the IDs are predictable. With enough information on prior IDs, an attacker may be able to guess the socket ID and gain access to socket.io servers without authorization.
Update to v0.9.7 or later.
CORS misconfiguration in socket.io
The package socket.io before 2.4.0 are vulnerable to Insecure Defaults due to CORS Misconfiguration. All domains are whitelisted by default.
socket.io has an unhandled 'error' event
A specially crafted Socket.IO packet can trigger an uncaught exception on the Socket.IO server, thus killing the Node.js process.
node:events:502
throw err; // Unhandled 'error' event
^
Error [ERR_UNHANDLED_ERROR]: Unhandled error. (undefined)
at new NodeError (node:internal/errors:405:5)
at Socket.emit (node:events:500:17)
at /myapp/node_modules/socket.io/lib/socket.js:531:14
at process.processTicksAndRejections (node:internal/process/task_queues:77:11) {
code: 'ERR_UNHANDLED_ERROR',
context: undefined
}
| Version range | Needs minor update? |
|------------------|------------------------------------------------|
| 4.6.2...latest
| Nothing to do |
| 3.0.0...4.6.1
| Please upgrade to socket.io@4.6.2
(at least) |
| 2.3.0...2.5.0
| Please upgrade to socket.io@2.5.1
|
This issue is fixed by https://github.com/socketio/socket.io/commit/15af22fc22bc6030fcead322c106f07640336115, included in socket.io@4.6.2
(released in May 2023).
The fix was backported in the 2.x branch today: https://github.com/socketio/socket.io/commit/d30630ba10562bf987f4d2b42440fc41a828119c
As a workaround for the affected versions of the socket.io
package, you can attach a listener for the "error" event:
io.on("connection", (socket) => {
socket.on("error", () => {
// ...
});
});
If you have any questions or comments about this advisory:
Thanks a lot to Paul Taylor for the responsible disclosure.
Incorrect Handling of Non-Boolean Comparisons During Minification in uglify-js
Versions of uglify-js
prior to 2.4.24 are affected by a vulnerability which may cause crafted JavaScript to have altered functionality after minification.
Upgrade UglifyJS to version >= 2.4.24.
Regular Expression Denial of Service in uglify-js
Versions of uglify-js
prior to 2.6.0 are affected by a regular expression denial of service vulnerability when malicious inputs are passed into the parse()
method.
var u = require('uglify-js');
var genstr = function (len, chr) {
var result = "";
for (i=0; i<=len; i++) {
result = result + chr;
}
return result;
}
u.parse("var a = " + genstr(process.argv[2], "1") + ".1ee7;");
$ time node test.js 10000
real 0m1.091s
user 0m1.047s
sys 0m0.039s
$ time node test.js 80000
real 0m6.486s
user 0m6.229s
sys 0m0.094s
Update to version 2.6.0 or later.
xmlhttprequest and xmlhttprequest-ssl vulnerable to Arbitrary Code Injection
This affects the package xmlhttprequest before 1.7.0; all versions of package xmlhttprequest-ssl. Provided requests are sent synchronously (async=False
on xhr.open
), malicious user input flowing into xhr.send
could result in arbitrary code being injected and run.