{"id":"CVE-2026-54445","aliases":["GHSA-fgmc-2hqj-86v4"],"title":"Vantage6: Set admin user and password from environment or configuration","summary":"Vantage6: Set admin user and password from environment or configuration","severity":"medium","vendor":"vantage6","product":"vantage6","ecosystem":"pip","affected":["vantage6 < 5.0.0"],"patched":["vantage6 5.0.0"],"published":"2026-06-05","updated":"2026-07-09","source":"OSV","sourceUrl":"https://osv.dev/vulnerability/GHSA-fgmc-2hqj-86v4","references":[{"url":"https://github.com/vantage6/vantage6/security/advisories/GHSA-fgmc-2hqj-86v4"},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-54445"},{"url":"https://github.com/vantage6/vantage6/issues/1932"},{"url":"https://github.com/vantage6/vantage6"},{"url":"https://github.com/vantage6/vantage6/blob/main/docs/release_notes.rst#500"}],"tags":["osv","pip"],"epss":0.00292,"epssPercentile":0.22041,"ingestedAt":"2026-07-10T13:49:10.751Z","slug":"CVE-2026-54445","body":"## Overview\n\n### Impact\nVantage6 currently provides an initial user with username `root` and password `root`. This is not ideal for the following reasons:\n- Attackers know that almost all vantage6 servers have a user with username `root` that probably has admin rights\n- The initial password is very weak and it is possible that administrators forget to reset it.\n\n### Patches\nNo\n\n### Workarounds\nIt is possible to delete the `root` user after it has been used to create other users\n\n### References\nWe could consider doing this like [mongodb](https://hub.docker.com/_/mongo)\n\n### Additional info\n\nLuis uses the following patch to mitigate it:\n```diff\ndiff --git a/vantage6-server/vantage6/server/__init__.py b/vantage6-server/vantage6/server/__init__.py\nindex ea362c1e..c6dcbbd9 100644\n--- a/vantage6-server/vantage6/server/__init__.py\n+++ b/vantage6-server/vantage6/server/__init__.py\n@@ -618,18 +618,30 @@ class ServerApp:\n             # TODO use constant instead of 'Root' literal\n             root = db.Role.get_by_name(\"Root\")\n \n-            log.warn(\n-                f\"Creating root user: \"\n-                f\"username={SUPER_USER_INFO['username']}, \"\n-                f\"password={SUPER_USER_INFO['password']}\"\n-            )\n+            # Temporary patch\n+            # read initial root password from file (docker secret) if provided\n+            # TODO: This is a workaround so we don't have an insecure vserver\n+            #       at the start. Ideally, we would provide an already hashed\n+            #       password. But as hashing is implemented via @validates on\n+            #       the field 'password', there isn't a nice way around this.\n+            if os.environ.get(\"V6_INITIAL_ROOT_PASSWORD_FILE\"):\n+                with open(\n+                    os.environ.get(\"V6_INITIAL_ROOT_PASSWORD_FILE\")\n+                ) as password_file:\n+                    initial_root_password = password_file.read().strip()\n+                log.info(\n+                    f\"Creating root user with password provided via V6_INITIAL_ROOT_PASSWORD_FILE\"\n+                )\n+            else:\n+                initial_root_password = SUPER_USER_INFO[\"password\"]\n+                log.warn(f\"Creating root user with default credentials!\")\n \n             user = db.User(\n                 username=SUPER_USER_INFO[\"username\"],\n                 roles=[root],\n                 organization=org,\n                 email=\"root@domain.ext\",\n-                password=SUPER_USER_INFO[\"password\"],\n+                password=initial_root_password,\n                 failed_login_attempts=0,\n                 last_login_attempt=None,\n             )\n```\n\n## Affected packages\n\n- `vantage6 < 5.0.0`\n\n## Remediation\n\nUpgrade to a patched release:\n\n- `vantage6 5.0.0`","depth":"sunlit","depthScore":28,"depthScoreParts":{"impact":27.5,"likelihood":0.1,"exploitation":0,"ransomware":0},"changes":[]}