Skip to main content

Grimmory BookLore CVE-2026-93954

| EUVDEUVD-2026-83610 LOW
Incorrect Authorization (CWE-863)
2026-09-19 VulDB GHSA-h26m-rx2w-qwhg
2.1
CVSS 4.0 · Vendor: VulDB
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privilege user
  2. Delivery
    Send GET /api/v1/settings
  3. Exploit
    Endpoint skips per-role filtering
  4. Execution
    Read admin-only settings config
  5. Impact
    Harvest integration/OIDC configuration metadata

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK

1 technique across 1 tactic: Privilege Escalation

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Requires a valid authenticated account on the grimmory/BookLore backend (PR:L) - any low-privilege user session is sufficient; no admin or elevated role needed. The affected path is the Settings API endpoint GET /api/v1/settings served by AppSettingController.getAppSettings, which prior to commit 2b66ca6 returned settings without filtering by the caller's PermissionType (ADMIN / MANAGE_METADATA_CONFIG). No user interaction, no non-default configuration, and no special protocol beyond normal HTTP API access are required. Limiting factor: exploitation is impossible for wholly unauthenticated attackers, and impact is confined to disclosure of admin-scoped settings configuration (integration flags, OIDC/metadata provider config) rather than write access or credential theft.

Impact

This is a low-severity, low-real-risk issue despite the 'Authentication Bypass' tag. The vendor CVSS 4.0 base score is 2.1 (LOW) with vector AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N and E:P (proof-of-concept). CWE-863 (incorrect authorization) plus the source diff confirm the true nature: GET /api/v1/settings did not filter settings by the caller's privilege, so an already-authenticated low-privilege user could read app settings intended for ADMIN / MANAGE_METADATA_CONFIG roles (OIDC session/group-sync config, Kobo/OPDS/Komga integration flags, metadata provider settings, file patterns). PR:L means this is NOT a pre-auth bypass - a valid account is required, which sharply limits impact. Confidentiality impact is genuinely low (configuration metadata, not necessarily the OIDC client secret, which PR #2558 had already moved to a dedicated setting). No EPSS or KEV signal is present; exploitation status is limited to a publicly disclosed PoC (VulDB / GitHub issue #2430) rather than observed active exploitation. Net: patch during normal maintenance, not an emergency. The main signals are internally consistent - the only conflict is the misleading 'Authentication Bypass' label versus the CWE-863 authorization classification.

Exploit ScenarioDerived

A logged-in low-privilege BookLore/grimmory user (e.g. a standard library reader account) sends GET /api/v1/settings and receives admin-scoped configuration entries that the API failed to filter by role, disclosing integration and OIDC configuration metadata. A public proof-of-concept exists (VulDB entry and GitHub issue #2430), but exploitation requires a valid authenticated session and yields only information disclosure of settings.

Monitor Track and reassess. Why: LOW severity (CVSS 0.1-3.9).
Patch available 0.4% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Sep 19, 2026

An incorrect authorization check in Grimmory (grimmory-tools/grimmory, published as BookLore) up to versions 3.3.3 and 3.4.1 lets any authenticated low-privilege account read admin-scoped application settings through the Settings API endpoint GET /api/v1/settings, because AppSettingController.getAppSettings returned the full settings map without filtering entries by the caller's PermissionType (ADMIN / MANAGE_METADATA_CONFIG). The exposure is configuration data - integration flags, OIDC session/group-sync settings, Kobo/Komga/OPDS toggles and metadata-provider configuration - not credentials or write access; the case is assessed at low severity (CVSS 4.0 base 2.1; independent CVSS 3.1 assessment AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N) and no KEV exploitation is recorded. Publicly available exploit code exists (referenced GitHub issue 2430) and the issue is rated low real-world risk despite the 'Authentication Bypass' tag, since the attacker must already hold a valid account and only gains read access to settings.

RemediationAI

Primary fix: update to a build containing commit 2b66ca6df8110f6b512e030b54c16b9fbe318f17, delivered through PR #2647 (https://github.com/grimmory-tools/grimmory/pull/2647) - upstream fix available (PR/commit); a released patched version number is not independently confirmed, so verify the deployed artifact actually includes that commit rather than assuming a version bump alone resolves it. Vendor advisory data also indicates a patch is available from the vendor. Do not treat PR #2558 / commit 53abc8b as a fix: it only moved the OIDC secret into a dedicated setting and did not restrict GET /api/v1/settings. If immediate upgrade is not possible, place the Settings API behind an authenticating reverse proxy or API gateway rule that permits GET /api/v1/settings only for admin sessions (for example an nginx location that returns 403 unless an admin group claim is present); the trade-off is that any front-end flow or client relying on that endpoint for non-admin-visible settings will return empty or error, though this is the same behavior the patched code enforces. Also ensure any cached responses for the appSettings/publicSettings caches are invalidated by restarting the backend after applying the patch, since the vulnerable build cached unfiltered settings for up to 24 hours. Because exploitation requires only a valid low-privilege account, audit existing user accounts and rotate any integration secrets or OIDC configuration values that were exposed to non-admin users during the exposure window.

Affected VersionsENISA

grimmory 3.4.1
grimmory 3.3.2
grimmory 3.3.1
grimmory 3.3.0
grimmory 3.4.0
grimmory 3.3.3

Affected Packages

euvd grimmory no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Grimmory/BookLore is a Spring Boot (Java) media-library backend; the flaw is a missing-function-level authorization control, classified CWE-863 (Incorrect Authorization). AppSettingController.getAppSettings called appSettingService.getAppSettings() with no caller identity, so the response was built from the complete AppSettingKey enum regardless of the 'adminOnly' permission metadata (PermissionType.ADMIN, PermissionType.MANAGE_METADATA_CONFIG) attached to each key. The patch (PR #2647) injects AuthenticationService into the controller and derives the user before delegating to getAppSettings(user), and re-annotates the AppSettingKey enum so sensitive keys carry the sensitivity flag (the second boolean flipped to true for OIDC_SESSION_DURATION_HOURS, OIDC_GROUP_SYNC_MODE, KOBO_SETTINGS, OPDS_SERVER_ENABLED, KOMGA_API_ENABLED, KOMGA_GROUP_UNKNOWN and the metadata provider keys), which the service uses to strip non-permitted entries. The same patch deletes backend/src/main/java/org/booklore/config/CacheConfig.java, removing the Caffeine 'publicSettings'/'appSettings' caches (24-hour expireAfterWrite, max 100 entries) so that previously cached unfiltered settings maps can no longer be served to unprivileged callers. Note that PR #2558 (merged as 53abc8b) moved the OIDC client secret into a dedicated setting but did not by itself restrict GET /api/v1/settings, so deployments carrying only that change remain exposed. The CVSS 4.0 vector supplied with the record (AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/E:P) matches the assessed prerequisites: network reachable, low-privilege authenticated, no user interaction, confidentiality-only low impact.

Know when Grimmory gets its next vulnerability

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (VulDB) PRIMARY 2.1 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:P
vuln.today AI 4.3 MEDIUM

Remote API reachable over network (AV:N/AC:L), but a valid low-privilege account is required (PR:L); impact is read-only disclosure of admin-scoped settings, so C:L and I/A:N.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulDB).

CVSS VectorVendor: VulDB

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
Low
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

Lifecycle Timeline

3
Severity Changed
Sep 19, 2026 - 22:22 NVD
MEDIUM LOW
CVSS changed
Sep 19, 2026 - 22:22 NVD
5.3 (MEDIUM) 2.1 (LOW)
CVE Published
Sep 19, 2026 - 21:45 cve.org
LOW 2.1

DescriptionCVE.org

A security vulnerability has been detected in grimmory-tools grimmory up to 3.3.3/3.4.1. Affected is the function AppSettingController.getAppSettings of the file backend/src/main/java/org/booklore/controller/AppSettingController.java of the component Settings API Endpoint. Such manipulation leads to incorrect authorization. The attack can be launched remotely. The exploit has been disclosed publicly and may be used. The name of the patch is 2b66ca6df8110f6b512e030b54c16b9fbe318f17. Applying a patch is advised to resolve this issue. PR #2558, merged as 53abc8b, moved the OIDC secret into a dedicated setting, but did not by itself restrict GET /api/v1/settings.

Threat Intelligence Overview

EPSS Score
0.4%
Top 68% exploitable
Prevalence
Low
niche self-hosted OSS ebook library manager (BookLore/grimmory)
Exploit
POC
Public exploit code exists
Data Quality
7 sources
Confidence: High
EUVD NVD CVE.org EPSS Vulnrichment CIRCL GitHub VulDB

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity LOW
CISA KEV No
Public POC Yes
EPSS 0.4%
Patch available Yes
Active threat No
Deciding rule
LOW severity (CVSS 0.1-3.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Low
Technical Impact
Partial

Priority Score

30
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +10
PoC: +20
Weaponized: 0
Threat intel: 0
Gov advisory: 0

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy