🚨 CVE-2026-74880
openssl_encrypt versions before 1.4.0 accept refresh tokens as URL query parameters in keyserver and telemetry server routes. Attackers can extract tokens from server logs, proxy logs, browser history, and HTTP Referer headers to gain unauthorized access.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 accept refresh tokens as URL query parameters in keyserver and telemetry server routes. Attackers can extract tokens from server logs, proxy logs, browser history, and HTTP Referer headers to gain unauthorized access.
🎖@cveNotify
GitHub
Refresh tokens accepted as URL query parameters causing token leakage
## Severity: HIGH
### Summary
Refresh tokens are accepted as URL query parameters in the keyserver and telemetry server routes.
### Affected Code
```python
# openssl_encrypt_server/mod...
### Summary
Refresh tokens are accepted as URL query parameters in the keyserver and telemetry server routes.
### Affected Code
```python
# openssl_encrypt_server/mod...
🚨 CVE-2026-74883
openssl_encrypt versions before 1.4.0 contain a sandbox bypass vulnerability where the plugin sandbox fails to restrict alternative file access methods like pathlib.Path and io.open. Attackers can import pathlib or io modules to read and write arbitrary files, completely bypassing the restricted_open file access controls.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 contain a sandbox bypass vulnerability where the plugin sandbox fails to restrict alternative file access methods like pathlib.Path and io.open. Attackers can import pathlib or io modules to read and write arbitrary files, completely bypassing the restricted_open file access controls.
🎖@cveNotify
GitHub
pathlib.Path and io.open bypass sandbox builtins.open restriction
## Severity: HIGH
### Summary
The sandbox in `openssl_encrypt/modules/plugin_system/plugin_sandbox.py` at **lines 412-440** restricts file access by overriding `builtins.open` with `restricted_op...
### Summary
The sandbox in `openssl_encrypt/modules/plugin_system/plugin_sandbox.py` at **lines 412-440** restricts file access by overriding `builtins.open` with `restricted_op...
🚨 CVE-2026-74884
openssl_encrypt versions before 1.4.0 contain a path traversal vulnerability in the _is_safe_path method where the plugin_id parameter is not sanitized before constructing the plugin config directory path. Attackers can declare a malicious plugin_id containing path traversal sequences like '../' to access arbitrary directories outside the intended plugin directory.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 contain a path traversal vulnerability in the _is_safe_path method where the plugin_id parameter is not sanitized before constructing the plugin config directory path. Attackers can declare a malicious plugin_id containing path traversal sequences like '../' to access arbitrary directories outside the intended plugin directory.
🎖@cveNotify
GitHub
Path traversal via unsanitized plugin_id in sandbox _is_safe_path
## Severity: HIGH
### Summary
The `_is_safe_path` method in `openssl_encrypt/modules/plugin_system/plugin_sandbox.py` at **lines 617-633** constructs a plugin config directory path using the unsa...
### Summary
The `_is_safe_path` method in `openssl_encrypt/modules/plugin_system/plugin_sandbox.py` at **lines 617-633** constructs a plugin config directory path using the unsa...
🚨 CVE-2026-74885
openssl_encrypt versions before 1.4.0 contain a logging bug in restore_hidden_modules() that logs module counts after clearing, always showing zero restored modules and corrupting audit trails. Additionally, a race condition exists between module hiding and import hook installation where another thread could re-import blocked modules in multi-threaded environments.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 contain a logging bug in restore_hidden_modules() that logs module counts after clearing, always showing zero restored modules and corrupting audit trails. Additionally, a race condition exists between module hiding and import hook installation where another thread could re-import blocked modules in multi-threaded environments.
🎖@cveNotify
GitHub
restore_hidden_modules() logging bug and race condition in import guard
## Severity: HIGH
### Summary
Two issues exist in the `PluginImportGuard` in `openssl_encrypt/modules/plugin_system/plugin_sandbox.py` at **lines 96-117**.
### Issue 1: Logging Bug (line 117)
`...
### Summary
Two issues exist in the `PluginImportGuard` in `openssl_encrypt/modules/plugin_system/plugin_sandbox.py` at **lines 96-117**.
### Issue 1: Logging Bug (line 117)
`...
🚨 CVE-2026-74886
openssl_encrypt versions before 1.4.0 contain a plugin sandbox bypass vulnerability where the PluginImportGuard blocks a different set of modules than the AST analyzer's DANGEROUS_MODULES set. Attackers can bypass AST analysis through string obfuscation or encoding to import unblocked dangerous modules like sys, shutil, multiprocessing, importlib, and pickle for arbitrary code execution.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 contain a plugin sandbox bypass vulnerability where the PluginImportGuard blocks a different set of modules than the AST analyzer's DANGEROUS_MODULES set. Attackers can bypass AST analysis through string obfuscation or encoding to import unblocked dangerous modules like sys, shutil, multiprocessing, importlib, and pickle for arbitrary code execution.
🎖@cveNotify
GitHub
Plugin import guard blocked modules not synchronized with AST analyzer
## Severity: HIGH
### Summary
The `PluginImportGuard` in `openssl_encrypt/modules/plugin_system/plugin_sandbox.py` at **lines 69-94** blocks a different set of modules than the AST analyzer's...
### Summary
The `PluginImportGuard` in `openssl_encrypt/modules/plugin_system/plugin_sandbox.py` at **lines 69-94** blocks a different set of modules than the AST analyzer's...
🚨 CVE-2026-74888
openssl_encrypt versions before 1.4.0 use a non-standard PBKDF2 key derivation construction with iterations=1 per call in an outer loop, creating a KDF whose security properties have not been formally analyzed. Attackers can exploit this weakened key derivation to more efficiently crack passwords protecting legacy encrypted files compared to standard PBKDF2 implementations.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 use a non-standard PBKDF2 key derivation construction with iterations=1 per call in an outer loop, creating a KDF whose security properties have not been formally analyzed. Attackers can exploit this weakened key derivation to more efficiently crack passwords protecting legacy encrypted files compared to standard PBKDF2 implementations.
🎖@cveNotify
GitHub
Custom PBKDF2 loop uses iterations=1 per call — non-standard construction
## Severity: HIGH
### Summary
The PBKDF2 key derivation loop in `openssl_encrypt/modules/crypt_core.py` at **lines 3852-3860** uses `iterations=1` per PBKDF2HMAC call inside an outer loop. This c...
### Summary
The PBKDF2 key derivation loop in `openssl_encrypt/modules/crypt_core.py` at **lines 3852-3860** uses `iterations=1` per PBKDF2HMAC call inside an outer loop. This c...
🚨 CVE-2026-74889
openssl_encrypt versions before 1.4.0 use HKDF with no salt and static info parameter in key normalization functions, reducing entropy extraction and determinism. Attackers can exploit predictable key derivation with identical inputs to weaken cryptographic security against multi-target attacks.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 use HKDF with no salt and static info parameter in key normalization functions, reducing entropy extraction and determinism. Attackers can exploit predictable key derivation with identical inputs to weaken cryptographic security against multi-target attacks.
🎖@cveNotify
GitHub
HKDF key normalization uses no salt with static info parameter
## Severity: HIGH
### Summary
The `normalize_to_key_length_secure` function in `openssl_encrypt/modules/crypt_core.py` at **lines 2082-2088** and the parallel KDF equivalent `_normalize_bytes` in...
### Summary
The `normalize_to_key_length_secure` function in `openssl_encrypt/modules/crypt_core.py` at **lines 2082-2088** and the parallel KDF equivalent `_normalize_bytes` in...
🚨 CVE-2026-74890
openssl_encrypt versions before 1.4.0 contain an authentication bypass vulnerability in CamelliaCipher that disables HMAC tag generation and verification when the PYTEST_CURRENT_TEST environment variable is set. Attackers with code execution can set this environment variable to produce unauthenticated ciphertext and bypass integrity protection on encrypted data.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 contain an authentication bypass vulnerability in CamelliaCipher that disables HMAC tag generation and verification when the PYTEST_CURRENT_TEST environment variable is set. Attackers with code execution can set this environment variable to produce unauthenticated ciphertext and bypass integrity protection on encrypted data.
🎖@cveNotify
GitHub
Camellia test mode disables HMAC authentication via environment variable
## Severity: HIGH
### Summary
The `CamelliaCipher` in `openssl_encrypt/modules/crypt_core.py` detects test mode via `os.environ.get("PYTEST_CURRENT_TEST")` at **line 845**. When in test...
### Summary
The `CamelliaCipher` in `openssl_encrypt/modules/crypt_core.py` detects test mode via `os.environ.get("PYTEST_CURRENT_TEST")` at **line 845**. When in test...
🚨 CVE-2026-74893
openssl_encrypt versions before 1.4.0 contain hardcoded default JWT signing secrets in config.py that pass validation checks. Attackers with access to source code can forge valid JWT tokens for any client_id to gain authenticated access to keyserver and telemetry APIs.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 contain hardcoded default JWT signing secrets in config.py that pass validation checks. Attackers with access to source code can forge valid JWT tokens for any client_id to gain authenticated access to keyserver and telemetry APIs.
🎖@cveNotify
GitHub
Hardcoded default JWT secrets pass validation and enable token forgery
## Severity: CRITICAL
### Summary
The unified server's `config.py` at **lines 178-186** contains hardcoded default JWT signing secrets that pass the startup validation check (>= 32 charact...
### Summary
The unified server's `config.py` at **lines 178-186** contains hardcoded default JWT signing secrets that pass the startup validation check (>= 32 charact...
🚨 CVE-2026-74894
openssl_encrypt before 1.4.0 contains an authentication bypass vulnerability in the verify_api_token function that accepts any non-empty Bearer token string without validation. Attackers can upload arbitrary public keys, enumerate all keys, and revoke keys belonging to any user by providing any Bearer token in the Authorization header.
🎖@cveNotify
openssl_encrypt before 1.4.0 contains an authentication bypass vulnerability in the verify_api_token function that accepts any non-empty Bearer token string without validation. Attackers can upload arbitrary public keys, enumerate all keys, and revoke keys belonging to any user by providing any Bearer token in the Authorization header.
🎖@cveNotify
GitHub
Standalone key server accepts ANY Bearer token as valid authentication
## Severity: CRITICAL
### Summary
The standalone key server's `verify_api_token()` function in `server/key-server/app/api/v1/keys.py` at **lines 48-87** only checks that a non-empty token str...
### Summary
The standalone key server's `verify_api_token()` function in `server/key-server/app/api/v1/keys.py` at **lines 48-87** only checks that a non-empty token str...
🚨 CVE-2026-74895
openssl_encrypt versions before 1.4.0 fail to apply sandbox restrictions in the default process isolation mode for plugin execution. Attackers can execute malicious plugins with unrestricted access to the filesystem, network, subprocess execution, and all Python modules.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 fail to apply sandbox restrictions in the default process isolation mode for plugin execution. Attackers can execute malicious plugins with unrestricted access to the filesystem, network, subprocess execution, and all Python modules.
🎖@cveNotify
GitHub
Process isolation (default mode) applies zero sandbox restrictions to plugins
## Severity: CRITICAL
### Summary
In `openssl_encrypt/modules/plugin_system/plugin_sandbox.py`, the default plugin execution mode (`use_process_isolation=True`) at **lines 702-801** spawns a chil...
### Summary
In `openssl_encrypt/modules/plugin_system/plugin_sandbox.py`, the default plugin execution mode (`use_process_isolation=True`) at **lines 702-801** spawns a chil...
🚨 CVE-2026-74896
openssl_encrypt versions before 1.4.0 contain a sandbox escape vulnerability in the DangerousPatternVisitor AST analyzer that fails to detect dunder attribute traversal techniques. Attackers can use __class__, __bases__, __subclasses__(), and __globals__ chains to access restricted functions and execute arbitrary system commands from plugin code.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 contain a sandbox escape vulnerability in the DangerousPatternVisitor AST analyzer that fails to detect dunder attribute traversal techniques. Attackers can use __class__, __bases__, __subclasses__(), and __globals__ chains to access restricted functions and execute arbitrary system commands from plugin code.
🎖@cveNotify
GitHub
AST analyzer misses dunder attribute traversal sandbox escapes
## Severity: CRITICAL
### Summary
The `DangerousPatternVisitor` in `openssl_encrypt/modules/plugin_system/plugin_ast_analyzer.py` at **lines 41-316** does not detect the primary Python sandbox es...
### Summary
The `DangerousPatternVisitor` in `openssl_encrypt/modules/plugin_system/plugin_ast_analyzer.py` at **lines 41-316** does not detect the primary Python sandbox es...
🚨 CVE-2026-74900
openssl_encrypt versions before 1.4.0 contain a critical vulnerability in pqc.py where KEM decapsulation failures silently fall back to simulation mode, generating a deterministic shared secret from only 16 bytes of the private key and publicly available encapsulated key data. Attackers who obtain 16 bytes of the private key can compute the shared secret and decrypt all ciphertext, as the fallback triggers on any KEM failure without raising an error.
🎖@cveNotify
openssl_encrypt versions before 1.4.0 contain a critical vulnerability in pqc.py where KEM decapsulation failures silently fall back to simulation mode, generating a deterministic shared secret from only 16 bytes of the private key and publicly available encapsulated key data. Attackers who obtain 16 bytes of the private key can compute the shared secret and decrypt all ciphertext, as the fallback triggers on any KEM failure without raising an error.
🎖@cveNotify
GitHub
PQC simulation mode fallback uses weak deterministic shared secret
## Severity: CRITICAL
### Summary
In `openssl_encrypt/modules/pqc.py` at **lines 1046-1138**, if KEM decapsulation fails for any reason, the code silently falls back to a "simulation mode&qu...
### Summary
In `openssl_encrypt/modules/pqc.py` at **lines 1046-1138**, if KEM decapsulation fails for any reason, the code silently falls back to a "simulation mode&qu...
🚨 CVE-2026-75918
phpMyFAQ before 4.1.7 stores password reset tokens in a publicly accessible tracking file when user tracking is enabled. Unauthenticated attackers can read the tracking file at content/core/data/trackingDDMMYYYY to extract reset tokens and replay them against the password reset API to take over user accounts.
🎖@cveNotify
phpMyFAQ before 4.1.7 stores password reset tokens in a publicly accessible tracking file when user tracking is enabled. Unauthenticated attackers can read the tracking file at content/core/data/trackingDDMMYYYY to extract reset tokens and replay them against the password reset API to take over user accounts.
🎖@cveNotify
GitHub
Public Tracking File Leaks Password Reset Tokens to Unauthenticated Users
Hi Thorsten,
I'm reporting an account-takeover issue in phpMyFAQ's user tracking feature. A public tracking file records the full query string for every visited frontend page. Password r...
I'm reporting an account-takeover issue in phpMyFAQ's user tracking feature. A public tracking file records the full query string for every visited frontend page. Password r...
🚨 CVE-2026-76205
phpMyFAQ before 4.1.7 contains a SQL injection vulnerability in the glossary create and update endpoints caused by truncating an escaped string before embedding it in a SQL literal. Authenticated users with glossary add or edit permissions can craft a payload with a dangling backslash to escape the closing quote and inject arbitrary SQL commands to read sensitive database information.
🎖@cveNotify
phpMyFAQ before 4.1.7 contains a SQL injection vulnerability in the glossary create and update endpoints caused by truncating an escaped string before embedding it in a SQL literal. Authenticated users with glossary add or edit permissions can craft a payload with a dangling backslash to escape the closing quote and inject arbitrary SQL commands to read sensitive database information.
🎖@cveNotify
GitHub
SQL Injection via Glossary Escape-Then-Truncate
Hi Thorsten,
I’m reporting a classic SQL injection in phpMyFAQ’s glossary create/update persistence path. The application escapes the glossary item, then truncates the *escaped* string with `sub...
I’m reporting a classic SQL injection in phpMyFAQ’s glossary create/update persistence path. The application escapes the glossary item, then truncates the *escaped* string with `sub...
🚨 CVE-2026-76206
phpMyFAQ versions before 4.1.7 fail to validate active status in the PDF export endpoint, allowing unauthenticated attackers to retrieve draft FAQ metadata. Attackers can access the public PDF export route with sequential FAQ identifiers to obtain titles, solution IDs, author names, and last-update timestamps of inactive or unpublished FAQs.
🎖@cveNotify
phpMyFAQ versions before 4.1.7 fail to validate active status in the PDF export endpoint, allowing unauthenticated attackers to retrieve draft FAQ metadata. Attackers can access the public PDF export route with sequential FAQ identifiers to obtain titles, solution IDs, author names, and last-update timestamps of inactive or unpublished FAQs.
🎖@cveNotify
GitHub
Public PDF export has no active-status gate, so an unauthenticated visitor can retrieve the title, solution id
### Summary
Public PDF export has no active-status gate, so an unauthenticated visitor can retrieve the title, solution id
The public PDF export never checks whether the FAQ is active, so an unau...
Public PDF export has no active-status gate, so an unauthenticated visitor can retrieve the title, solution id
The public PDF export never checks whether the FAQ is active, so an unau...
🚨 CVE-2026-76207
phpMyFAQ before 4.1.7 contains a two-factor authentication bypass vulnerability where remember-me tokens are issued before 2FA verification completes. Attackers with valid credentials can obtain a remember-me cookie, skip the 2FA challenge, and replay the cookie to gain full authenticated access without second-factor verification.
🎖@cveNotify
phpMyFAQ before 4.1.7 contains a two-factor authentication bypass vulnerability where remember-me tokens are issued before 2FA verification completes. Attackers with valid credentials can obtain a remember-me cookie, skip the 2FA challenge, and replay the cookie to gain full authenticated access without second-factor verification.
🎖@cveNotify
GitHub
006 2FA Bypass via Remember-Me Cookie Issued Before Second Factor Verification
### Summary
A logic flaw in the authentication flow allows an attacker with valid credentials to bypass two-factor authentication (2FA) entirely. When a user logs in with "Remember me"...
A logic flaw in the authentication flow allows an attacker with valid credentials to bypass two-factor authentication (2FA) entirely. When a user logs in with "Remember me"...
🚨 CVE-2026-76208
phpMyFAQ versions 3.1.0 through 4.1.6 contain an authentication bypass vulnerability in AuthLdap::create(). When LDAP authentication is enabled, after a successful LDAP bind the code calls User::setStatus('active') unconditionally, which overwrites the account_status column of a pre-existing local account from 'blocked' to 'active'. As a result, a user whose local phpMyFAQ account has been administratively blocked can restore their account and log in by authenticating via LDAP. The state transition is not logged, so administrators cannot detect that the block was overridden. Fixed in 4.1.7.
🎖@cveNotify
phpMyFAQ versions 3.1.0 through 4.1.6 contain an authentication bypass vulnerability in AuthLdap::create(). When LDAP authentication is enabled, after a successful LDAP bind the code calls User::setStatus('active') unconditionally, which overwrites the account_status column of a pre-existing local account from 'blocked' to 'active'. As a result, a user whose local phpMyFAQ account has been administratively blocked can restore their account and log in by authenticating via LDAP. The state transition is not logged, so administrators cannot detect that the block was overridden. Fixed in 4.1.7.
🎖@cveNotify
GitHub
029 LDAP login silently reactivates blocked local accounts without logging the state change
### Summary
When LDAP authentication is enabled, `AuthLdap::create()` calls `User::setStatus('active')` unconditionally after a successful LDAP bind — even when the local phpMyFAQ accoun...
When LDAP authentication is enabled, `AuthLdap::create()` calls `User::setStatus('active')` unconditionally after a successful LDAP bind — even when the local phpMyFAQ accoun...
🚨 CVE-2026-76209
phpMyFAQ versions before v4.1.6 fail to validate the security.enableRegistration setting in API endpoints, allowing attackers to create user accounts when registration is disabled. Attackers can bypass the registration restriction by submitting requests to POST /api/register or POST /api/v3.1/register endpoints, which do not check the configuration flag enforced by the HTML registration page.
🎖@cveNotify
phpMyFAQ versions before v4.1.6 fail to validate the security.enableRegistration setting in API endpoints, allowing attackers to create user accounts when registration is disabled. Attackers can bypass the registration restriction by submitting requests to POST /api/register or POST /api/v3.1/register endpoints, which do not check the configuration flag enforced by the HTML registration page.
🎖@cveNotify
GitHub
Registration Bypass When security.enableRegistration Is Disabled
# Registration Bypass When `security.enableRegistration` Is Disabled
Hi,
I’m reporting an authorization issue that allows new user accounts to be created even when public registration is disa...
Hi,
I’m reporting an authorization issue that allows new user accounts to be created even when public registration is disa...
🚨 CVE-2026-76210
phpMyFAQ before 4.1.6 does not adequately sanitize HTML in FAQ answers before generating PDFs via TCPDF. An attacker with permission to create or edit FAQ content can embed an <img> tag whose src references a local file under the web root's content/ directory (e.g., content/core/config/database.php). When the PDF is generated, phpMyFAQ attempts to read the referenced file; because it is not a valid image the resulting error is converted into an uncaught exception whose stack trace discloses part of the file's contents to any user who triggers the PDF export. By default the disclosed portion is truncated (zend.exception_string_param_max_len), but a larger configured value can result in disclosure of entire files, including database credentials.
🎖@cveNotify
phpMyFAQ before 4.1.6 does not adequately sanitize HTML in FAQ answers before generating PDFs via TCPDF. An attacker with permission to create or edit FAQ content can embed an <img> tag whose src references a local file under the web root's content/ directory (e.g., content/core/config/database.php). When the PDF is generated, phpMyFAQ attempts to read the referenced file; because it is not a valid image the resulting error is converted into an uncaught exception whose stack trace discloses part of the file's contents to any user who triggers the PDF export. By default the disclosed portion is truncated (zend.exception_string_param_max_len), but a larger configured value can result in disclosure of entire files, including database credentials.
🎖@cveNotify
GitHub
Arbitrary Local File Disclosure via PDF Export HTML Image Handling
Hi Thorsten,
It has been a long time :3 ... I’m reporting a high-impact issue in phpMyFAQ’s PDF export functionality that can disclose sensitive files from the server's `content/` directory,...
It has been a long time :3 ... I’m reporting a high-impact issue in phpMyFAQ’s PDF export functionality that can disclose sensitive files from the server's `content/` directory,...
🚨 CVE-2026-76211
phpMyFAQ before 4.1.7 fails to properly enforce CONFIGURATION_EDIT permission on admin API read endpoints for LDAP, Elasticsearch, OpenSearch, and dashboard configuration, allowing any authenticated user to access sensitive administrative data. Attackers can retrieve LDAP server topology, bind account names, search bases, index statistics, and site analytics by calling these endpoints with a valid session.
🎖@cveNotify
phpMyFAQ before 4.1.7 fails to properly enforce CONFIGURATION_EDIT permission on admin API read endpoints for LDAP, Elasticsearch, OpenSearch, and dashboard configuration, allowing any authenticated user to access sensitive administrative data. Attackers can retrieve LDAP server topology, bind account names, search bases, index statistics, and site analytics by calling these endpoints with a valid session.
🎖@cveNotify
GitHub
Admin config-read API endpoints (LDAP, Elasticsearch, OpenSearch, dashboard) are gated by login only, not CONFIGURATION_EDIT
### Summary
Admin config-read API endpoints (LDAP, Elasticsearch, OpenSearch, dashboard) are gated by login only, not CONFIGURATION_EDIT
## Affected versions and vulnerable location
- Conf...
Admin config-read API endpoints (LDAP, Elasticsearch, OpenSearch, dashboard) are gated by login only, not CONFIGURATION_EDIT
## Affected versions and vulnerable location
- Conf...