Posting on behalf of @arjo129 , maintainer of the gz-sim repo.
Incident Summary
A security vulnerability was identified in the WebsocketServer plugin where the asset operation allowed for arbitrary file reads from the host filesystem. This issue has been fully patched, and backported releases are now available across all supported Gazebo distributions.
Vulnerability Details
The OnAsset handler in the WebsocketServer accepted filesystem paths without sufficient validation. Because the system fell back to common::exists(assetUri) without canonicalizing paths or confining them to a base directory, it permitted absolute paths to be accessed.
By default, when no <authorization_key> is configured, this issue could be exploited pre-authentication by any network client able to reach the WebSocket port (default 9002), resulting in the exposure of sensitive files on the host machine.
Due to the architectural history of the WebsocketServer, older versions of this plugin lived within the launch repository (previously Ignition, now Gazebo). Consequently, this vulnerability affects older ign-launch and gz-launch packages as well as modern gz-sim packages.
Resolution & Patched Versions
The fix restricts the reading of resources to paths that live exclusively within approved resource lists (e.g., Gazebo resource directories and the Fuel cache). Users and administrators are strongly advised to update to the following patched versions based on their Gazebo distribution:
| Distribution | Package | Patched Version |
|---|---|---|
| Fortress | ign-launch | 5.3.1 |
| Harmonic | gz-launch | 7.1.2 |
| Ionic | gz-launch | 8.0.3 |
| Jetty | gz-launch | 9.0.1 |
| Jetty | gz-sim | 10.4.0 |
Workaround: If you cannot immediately update, you can mitigate this issue by configuring an <authorization_key> in your WebsocketServer plugin configuration, or by ensuring port 9002 is strictly firewalled from untrusted network access.
Incident Timeline
-
May 21: Vulnerability reported on the public issue tracker by @jimmy-ly00 (discovered via an AI vulnerability scanning tool). A patch was proposed the same day by @arjo129.
-
Jun 2: The patch was successfully merged into the rotary branch after comprehensive white-box testing by @jrivero.
-
Jun 3: The fix was backported to the gz-sim10 (Jetty) branch.
-
Jun 4: gz-sim 10.4.0 was officially released. Patches for the affected gz-launch and ign-launch lines were proposed.
-
Jun 11: Patched versions released for ign-launch 5.3.1 (Fortress), gz-launch 8.0.3 (Ionic), and gz-launch 9.0.1 (Jetty).
-
Jun 12: Patched version released for gz-launch 7.1.2 (Harmonic), completing the rollout.
Acknowledgments
We would like to thank @jimmy-ly00 for responsibly reporting this vulnerability and assisting in keeping the Gazebo ecosystem secure, as well as the maintainers for a rapid patch and backport rollout. In addition, @azeey has put together a security policy .github/SECURITY.md at main · gazebosim/.github · GitHub so that going forward, we have a proper channel to report such issues privately (security@openrobotics.org). @jrivero will be the PMC member responsible for triaging and receiving these requests.
We also thank @arjo129 who took the leading role in producing the patch and following up on backports and releases as well as preparing this post.