CVE-2026-33533
Description
Glances is an open-source system cross-platform monitoring tool. Prior to version 4.5.3, the Glances XML-RPC server (activated with glances -s or glances --server) sends Access-Control-Allow-Origin: * on every HTTP response. Because the XML-RPC handler does not validate the Content-Type header, an attacker-controlled webpage can issue a CORS "simple request" (POST with Content-Type: text/plain) containing a valid XML-RPC payload. The browser sends the request without a preflight check, the server processes the XML body and returns the full system monitoring dataset, and the wildcard CORS header lets the attacker's JavaScript read the response. The result is complete exfiltration of hostname, OS version, IP addresses, CPU/memory/disk/network stats, and the full process list including command lines (which often contain tokens, passwords, or internal paths). This issue has been patched in version 4.5.3.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
GlancesPyPI | < 4.5.3 | 4.5.3 |
Affected products
1Patches
1dcb39c3f12b2Merge branch 'advisorie/GHSA-7p93-6934-f4q7' into develop
3 files changed · +32 −5
conf/glances.conf+3 −2 modified@@ -37,8 +37,8 @@ history_size=1200 # Disable background color #disable_bg=True # -# Specifics options for WebUI -#---------------------------- +# Specifics options for Glances server +#------------------------------------- # Set URL prefix for the WebUI and the API # Example: url_prefix=/glances/ => http://localhost/glances/ # Note: The final / is mandatory @@ -54,6 +54,7 @@ history_size=1200 # # CORS options # Comma separated list of origins that should be permitted to make cross-origin requests. +# This option is available for both Restful and XML-RPC server # Default is * #cors_origins=* # Indicate that cookies should be supported for cross-origin requests.
docker-compose/glances.conf+3 −2 modified@@ -37,8 +37,8 @@ max_processes_display=25 # Disable background color #disable_bg=True # -# Specifics options for WebUI -#---------------------------- +# Specifics options for Glances server +#------------------------------------- # Set URL prefix for the WebUI and the API # Example: url_prefix=/glances/ => http://localhost/glances/ # Note: The final / is mandatory @@ -54,6 +54,7 @@ max_processes_display=25 # # CORS options # Comma separated list of origins that should be permitted to make cross-origin requests. +# This option is available for both Restful and XML-RPC server # Default is * #cors_origins=* # Indicate that cookies should be supported for cross-origin requests.
glances/server.py+26 −1 modified@@ -39,7 +39,9 @@ def end_headers(self): def send_my_headers(self): # Specific header is here (solved the issue #227) - self.send_header("Access-Control-Allow-Origin", "*") + # Use configurable CORS origins (default: *) read from the server instance + cors_origin = getattr(self.server, 'cors_origin', '*') + self.send_header("Access-Control-Allow-Origin", cors_origin) def authenticate(self, headers): # auth = headers.get('Authorization') @@ -98,6 +100,18 @@ def __init__(self, bind_address, bind_port=61209, requestHandler=GlancesXMLRPCHa self.bind_address = bind_address self.bind_port = bind_port self.config = config + + # Read CORS origins from config — same key as the REST API + # Default: "*" for backward compatibility + if config is not None: + cors_origins = config.get_list_value('outputs', 'cors_origins', default=["*"]) + else: + cors_origins = ["*"] + # For the XML-RPC handler we emit a single Access-Control-Allow-Origin + # header. If the config lists a single explicit origin, use it; + # otherwise fall back to "*". + self.cors_origin = cors_origins[0] if len(cors_origins) == 1 else "*" + try: self.address_family = socket.getaddrinfo(bind_address, bind_port)[0][0] except OSError as e: @@ -195,6 +209,17 @@ def __init__(self, requestHandler=GlancesXMLRPCHandler, config=None, args=None): self.server.user_dict = {} self.server.isAuth = False + # Warn if running unauthenticated with wildcard CORS + if args.password == "" and self.server.cors_origin == "*": + print( + "WARNING: XML-RPC server is running without authentication and with CORS Allow-Origin: *.\n" + " Mitigations: set a password (-P/--password) and/or restrict\n" + " cors_origins in glances.conf [outputs] section." + ) + logger.warning( + "XML-RPC server is running without authentication and with CORS Access-Control-Allow-Origin: *. " + ) + # Register functions self.server.register_introspection_functions() self.server.register_instance(GlancesInstance(config, args))
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
5- github.com/nicolargo/glances/commit/dcb39c3f12b2a1eec708c58d22d7a1d62bdf5fa1nvdPatchWEB
- github.com/nicolargo/glances/security/advisories/GHSA-7p93-6934-f4q7nvdExploitVendor AdvisoryWEB
- github.com/advisories/GHSA-7p93-6934-f4q7ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2026-33533ghsaADVISORY
- github.com/nicolargo/glances/releases/tag/v4.5.3nvdProductRelease NotesWEB
News mentions
0No linked articles in our index yet.