CVE-2026-11990
Official description Straight from the sourceThe vendor's or NVD's own wording, published unedited. Authoritative, but often terse — it says what broke, rarely what to do.
NVD · uneditedThe KiviCare – Clinic & Patient Management System (EHR) plugin for WordPress is vulnerable to authorization bypass in all versions up to, and including, 4.4.0. This is due to the plugin not properly verifying that a user is authorized to perform an action. This makes it possible for unauthenticated attackers to mark arbitrary pending appointments as Confirmed and forge an associated completed payment record in wp_kc_payments_appointment_mappings using an attacker-supplied payment ID, bypassing payment entirely. This exploit is achievable on a default installation because the gateway resolution logic returns all registered gateways regardless of admin-enabled status, making the manual (KCPayLater) gateway always selectable.
Technical summary Written by usOur analysis, written from the advisory, the CVSS vector and the affected-version data. It adds context the advisory leaves out, and never invents facts that are not in the source.
dbcve analysis · high confidenceThe KiviCare WordPress plugin fails to properly verify user authorization before allowing appointment status changes and payment record creation. Unauthenticated attackers can manipulate pending appointments to Confirmed status and create forged payment records in the wp_kc_payments_appointment_mappings table using arbitrary payment IDs. The vulnerability stems from the gateway resolution logic returning all registered gateways regardless of admin configuration, allowing the manual KCPayLater gateway to always be selectable.
Verify against the referenced sources before acting — the references below are authoritative for this CVE, this summary is not.
CVSS breakdown How the score is builtThe industry scoring standard. It rates how the flaw is reached, what it takes to exploit, and what an attacker gains — the score is derived from those, not the other way round.
From the vector- Attack vector
- Network
- Complexity
- Low
- Privileges
- None
- User interaction
- None
- Scope
- Unchanged
- Confidentiality
- None
- Integrity
- Low
- Availability
- None
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Am I affected? How to checkSteps we derive from the advisory and the affected-version data, so you can decide whether this CVE reaches your setup. They are a guide, not a scan — your own configuration is the authority.
dbcve checksWork through these to decide whether this CVE applies to you.
-
Confirm KiviCare plugin installationIn WordPress admin, go to Plugins > Installed Plugins and locate KiviCare. Note the version number displayed. Alternatively, check the plugin header in wp-content/plugins/kivicare-server-version.php or the main plugin file.Affected if KiviCare plugin is installed and the version has not yet received the CVE-2026-11990 patch.
-
Verify public appointment booking is enabledCheck if any KiviCare appointment booking form or public-facing widget is active on the site. Inspect page content or widget settings for KiviCare booking forms.Affected if Public booking forms are exposed, allowing unauthenticated access to the vulnerable endpoint.
-
Inspect payment records for forged entriesQuery the wp_kc_payments_appointment_mappings table in the database: SELECT * FROM wp_kc_payments_appointment_mappings WHERE payment_id NOT IN (SELECT id FROM wp_kc_payments); Look for records with payment IDs that do not correspond to actual payment entries, or records created at unexpected times.Affected if Records exist with payment IDs that do not match valid payments, indicating forged payment data from exploitation.
-
Check for unauthorized appointment status changesQuery the appointments table (typically wp_kc_appointments) for records where status changed from 'Pending' to 'Confirmed' at unexpected times or in bulk, especially if correlated with suspicious payment mapping entries.Affected if Appointments show unauthorized status changes to Confirmed without corresponding legitimate payment processing.
-
Review access logs for vulnerable endpoint accessExamine web server access logs for POST requests to KiviCare AJAX endpoints (typically /wp-admin/admin-ajax.php?action=kc_...) that modify appointment status or create payment mappings without valid authentication cookies.Affected if Requests to status change or payment creation endpoints originate from unauthenticated IP addresses.
A user is affected if KiviCare is installed with an unpatched version and has public booking forms enabled, especially if suspicious payment mapping records or unauthorized appointment status changes are found in the database.
Generated from the published advisory. Verify against your own configuration.
Remediation Closing itWhat it takes to close this. Where a vendor fix exists we point at it; where none exists we say so plainly, and can build one. Effort estimates are scoped from the advisory, not from your codebase.
dbcve · scopedApply the latest plugin update which should include proper authorization checks before appointment status modifications and validation that gateways are admin-enabled before allowing selection. Until patched, restrict public appointment booking forms or disable the KCPayLater gateway if possible.
4.4.1
- Log in to the WordPress admin dashboard
- Navigate to Plugins > Installed Plugins
- Find KiviCare – Clinic & Patient Management System (EHR) in the plugin list
- If the plugin shows a new version available, click 'Update Now' to upgrade to version 4.4.1
- Alternatively, download version 4.4.1 from the WordPress plugin repository and upload/install it manually
- After upgrading, verify the plugin is running version 4.4.1 under Plugins > Installed Plugins
- Test that appointment and payment functionality works correctly with the update
Generated from the published advisory — verify against the referenced sources before acting.
- Consultation4.0 h
- Implementation8.0 h
- Testing4.0 h
- Review / QA3.0 h
An estimate, not a bill — we confirm scope with you before any work starts. Need it this week? Rush from $5,408.
Scan for this in your stack
Free · runs locallyCheck whether your project pulls in CVE-2026-11990 — or any other known-vulnerable package — straight from your lock files. Free and open source; it runs locally and uploads nothing.
References Go to the primary sourcePrimary sources — vendor advisories, patches and trackers. Where our summary and a reference disagree, the reference wins.
Primary sources- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- plugins.trac.wordpress.org
- www.wordfence.com
- nvd.nist.gov
Practitioner notes
ContributedPeer-ranked notes from engineers who’ve handled CVE-2026-11990 in production — separate from our analysis above.
The advisory tells you what broke. It rarely tells you what actually worked. If you’ve dealt with this one, that detail is what the next engineer is searching for.
- The version that genuinely resolved it — not the one the vendor claimed
- A config change or rule that shut the vector down
- A gotcha in the upgrade path that cost you an afternoon
No notes yet
Be the first to add a field note for this CVE — a mitigation you’ve verified, a version caveat, or a link to a working fix. Sign in above to contribute.
A place for practitioners to share what actually worked: a mitigation you’ve tested, a configuration change, a version- or environment-specific caveat, or a link to a verified patch. The most useful notes rise to the top as peers upvote them, so the signal stays high.
- Verified mitigations, workarounds, and config changes
- Version or environment caveats, and links to real fixes
- No weaponised exploit code, or anything meant to cause harm
- No spam, self-promotion, credentials, or personal data