---
id: "CVE-2026-111046"
kind: "vulnerability"
aliases: ["CVE-2026-111046"]
title: "FOSSBilling: staff account reads and overwrites deactivated module secrets"
severity: "low"
cvss: 2.3
epss: null
exploited: false
status: "open"
category: "package"
products: []
ecosystems: []
tags: ["fossbilling", "package", "php", "self-hosted"]
not_affected_if: ["fossbilling-0.8.6-or-later", "no-staff-with-extension-access"]
published_at: "2026-10-19T16:17:03+00:00"
first_seen_at: "2026-10-23T21:57:18+00:00"
updated_at: "2026-10-25T04:49:50+00:00"
sources: [{"source": "nvd", "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-111046", "first_seen_at": "2026-10-23T21:57:18+00:00"}]
---

# FOSSBilling: staff account reads and overwrites deactivated module secrets

FOSSBilling versions 0.8.4 through 0.8.5 skip permission checks for deactivated non-core extensions. A low-privileged staff account with module access can read decrypted stored extension secrets and overwrite extension configuration.

_Summary, check and fix written by a model from the sources; labelled as such._

## How to check

- Check the installed FOSSBilling version in the admin panel or its composer/package metadata; versions `0.8.4` and `0.8.5` are affected.
- Review staff accounts that have module-level extension access.

## Fix

- Upgrade FOSSBilling to `0.8.6`.
- Until upgraded, restrict staff accounts' extension access to trusted users only.

## Timeline

- 2026-10-23T21:57:18+00:00 nvd https://nvd.nist.gov/vuln/detail/CVE-2026-111046

## From the sources

FOSSBilling is an open source billing and client-management platform. From 0.8.4 until 0.8.6, hasManagePermission fails open for inactive non-core modules because its early return on !isExtensionActive skips the module-access and manage_settings checks. A low-privileged staff account with module-level extension access targets a deactivated non-core module through extension/config_get or extension/config_save. The account can call api/admin/extension/config_get or api/admin/extension/config_save for a deactivated non-core module to read decrypted retained extension secrets and overwrite stored extension configuration. The getConfig function returns the decrypted stored configuration despite the module's inactive state. This residual path remained after the earlier CVE-2026-62962 authorization fix. This issue is fixed in version 0.8.6.

---

_Free to read at a human pace. An API with keys and an MCP server are in preparation; early access: hello@infrastack.ai_
