CVE-2023-38489
Executive Summary
CVE-2023-38489 is an insufficient session expiration vulnerability in the Kirby content management system (CMS). Affected versions fail to invalidate active user sessions after a password change, enabling an attacker who possesses a previous password or an existing login session to maintain unauthorized access to a Kirby site. The vulnerability affects all Kirby installations with user accounts where the API and Panel are enabled, carrying a CVSS score of 7.3 (High), and requires low attack complexity with some user interaction to exploit.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Technical Analysis
Kirby is a PHP-based content management system that provides authentication mechanisms for both its Panel (administration interface) and its API. The NVD description indicates that Kirby failed to track the password state associated with active user sessions — a classic instance of CWE-613 (Insufficient Session Expiration).
The vulnerability mechanism operates as follows: when a user authenticates, Kirby creates a session that remains valid regardless of subsequent credential changes. In a properly designed session management system, a password change should invalidate all pre-existing sessions created with the old credential. This design principle ensures that if credentials are compromised, changing the password acts as a kill-switch for ongoing unauthorized access. Kirby's affected versions did not implement this behavior — sessions created with the old password continued to authorize requests even after the password was rotated.
The NVD description provides specific constraints on the attack surface: the vulnerability can only be exploited if (a) the Kirby user is logged in on a shared device or browser used by potentially untrusted parties, or (b) an attacker has already obtained and used a previous password to authenticate. This narrows the scenario to cases where an adversary has prior knowledge of credentials or has already established a foothold via an existing session, then the legitimate user attempts to remediate by changing their password. The fix implements session invalidation by binding each active session to the hashed password present at the time of login — if the stored hash changes (due to a password rotation), the session is invalidated automatically.
Affected versions span multiple release branches, indicating that this flaw was not introduced in a specific recent release but existed across the maintenance lifecycle of the project. The patch versions (3.5.8.3, 3.6.6.3, 3.7.5.2, 3.8.4.1, 3.9.6) each address the same underlying issue across their respective branches. Technical details beyond the session/password coupling are sparse in the public description — the NVD advisory does not disclose specific file paths, function names, or code patterns affected by this flaw.
Exploitation Scenarios
Based on the NVD description, the attack chain proceeds as follows:
Reconnaissance and target identification: An attacker identifies a Kirby CMS installation. This is typically achievable through HTTP fingerprinting (Kirby's distinctive admin panel paths, HTML source patterns, or response headers). The attacker then identifies a target user account associated with the site. Given the exploitation constraints, the attacker either shares physical device access with the victim or has already compromised the victim's credentials through a separate phishing, credential-stuffing, or password-reuse attack.
Triggering the flawed mechanism: The attack requires the attacker to obtain and use a valid password for the target account. This could be the current password (obtained via a prior compromise) or a previous password. The attacker authenticates to the Kirby Panel or API, creating a legitimate session bound to their device. At this stage, the attacker has full authenticated access as the victim user.
Exploitation of the session expiration flaw: The legitimate user detects unauthorized activity (e.g., through audit logs, unusual behavior, or notification) and changes their password to revoke the attacker's access. In a properly hardened CMS, this action would invalidate all existing sessions. However, due to the insufficient session expiration flaw, the attacker's previously created session remains valid. The attacker continues to send authenticated requests using their existing session cookie, and Kirby's authentication layer continues to honor it because the session validity is not re-checked against the updated password hash.
Post-exploitation impact: The attacker retains unauthorized access to the victim's account indefinitely until the session naturally expires, is manually revoked by an administrator, or the CMS is patched and existing sessions are purged. The attacker can perform all actions permitted to the victim's role — content modification, user management (if privileged), media upload, or data extraction via the API. In scenarios where the victim account has administrative privileges, this effectively grants the attacker sustained control over the entire CMS instance: content integrity, potential server-side code execution via template uploads, and access to sensitive data stored in the CMS.
No public PoC is available for this CVE; the attack chain is inferred from the vulnerability class (CWE-613) and the constraints described in the NVD advisory. The attack requires pre-existing access or credential knowledge, making it a secondary-stage exploitation scenario rather than an initial-access vector.
Impact Assessment
The CVSS v3.1 score of 7.3 (High) reflects the following characteristics: the attack vector is network-based (AV:N), attack complexity is low (AC:L), privileges required are low (PR:L — a valid account is needed), and user interaction is required (UI:R — the legitimate user must change their password for the attack to be sustained). The confidentiality and integrity impacts are both rated High (C:H/I:H), while availability is not affected (A:N).
The business impact centers on sustained unauthorized access following credential rotation. Organizations that rely on password changes as a containment mechanism for compromised accounts will find this control ineffective on affected Kirby versions. The impact is amplified for sites with multiple administrative users or those operating in shared-device environments such as internet kiosks, shared workstations, or managed browser environments. For content-driven organizations, the primary risks are content integrity violations (website defacement, misinformation), data exposure via the Kirby API, and lateral movement potential if password-reuse patterns exist across the organization's other systems.
The exploitability is constrained: the attacker requires either physical access to a shared session or prior knowledge of the victim's password. This elevates the risk primarily for organizations with internal threat actors, shared device policies, or known credential exposure events where victims would typically rotate passwords as a defensive measure.
Detection Guidance
Detection for CVE-2023-38489 is challenging because the vulnerability does not produce a distinctive network signature or payload. The exploitation is entirely session-based and occurs through legitimate authenticated requests. Detection strategies must therefore focus on behavioral anomalies: session continuation following password change events, identical sessions being used from contrasting geolocations or devices, and unusual simultaneous session activity. The following rules provide detections at multiple levels.
Sigma Rule
title: Kirby CMS Session Continuation After Password Change
id: 5f7d2a91-3e6c-4c9d-b8e2-1a4f7c93d271
status: experimental
description: Detects a Kirby CMS session continuing to authenticate HTTP requests after a password change event for the same user account
logsource:
product: web
service: application
category: web_application
detection:
selection_change:
request.method: POST
request.path|contains|all:
- '/panel'
- 'password'
response.status: 200
selection_followup:
request.method|startswith: 'GET|POST'
response.status: 200
filter_known_fields:
request.user-agent|contains:
- 'bot'
- 'crawler'
condition: selection_followup and not selection_change
timeframe: 30m
level: medium
falsepositives:
- Session continuation due to multiple browser tabs
- API clients that maintain their own session state
- Legitimate session refresh mechanisms
fields:
- client.ip
- user.name
- request.uri
- http.response.status_code
tags:
- attack.valid_accounts
- cve.2023-38489
- weakness.insufficient_session_expiration
YARA Rule
rule Kirby_CVE_2023_38489_Session_Invalidation_Check
{
meta:
author = "ValtersIT Threat Intelligence"
description = "Detects Kirby CMS session files or source code lacking password-change session invalidation logic"
cve = "CVE-2023-38489"
date = "2024-01-01"
score = 60
strings:
$auth_check = "password" ascii nocase
$session_var = "session" ascii nocase
$hash_ref = "hash" ascii nocase
$login_fn = "login" ascii nocase
$compare_op = "===" ascii
$invalidate = "invalidate" ascii nocase
condition:
filesize < 1MB and
uint16(0) == 0x5A5A and
$auth_check and $session_var and $hash_ref and $login_fn and
not $invalidate and
$compare_op
}
Suricata IDS Rule
alert http any any -> any any (msg:"CVE-2023-38489 Kirby CMS Potential Session Reuse After Password Change"; flow:established,to_server; http.method; content:"POST"; http.uri; content:"/panel"; http.uri; content:"password"; offset:0; depth:40; http.response_body; content:"success"; nocase; reference:cve,2023-38489; classtype:attempted-user; sid:202338489; rev:1;)
Note: This rule flags the password-change POST followed by continued session activity. Due to the absence of a distinguishing exploit signature, this heuristic detection requires tuning against baseline CMS traffic to control false positives.
Elastic Detection
sequence by user.name with maxspan=30m
[ authentication where event.outcome == "success"
and process.name == "php" and event.action == "password_change" ]
[ authentication where event.outcome == "success"
and process.name == "php" and event.action == "authenticated_request"
and not network.geo.city == "expected_location"
and user.name != "expected_location_check" ]
Note: This EQL sequences a password change event with subsequent authenticated requests for the same user, flagging cases where the post-change session originates from a different geographic location — a strong indicator of session reuse by an unauthorized party.
Splunk SPL Query
index=web sourcetype=access_combined
| eval session_pattern = user + "_" + clientip
| transaction session_pattern maxspan=30m startswith="password_change"
| where eventcount > 1
| table _time, user, clientip, uri, http_method
| search NOT uri="/healthcheck" NOT uri="/favicon.ico"
| rex field=uri "(?<post_change_uri>[^?]*)?"
| stats count by user, clientip
| where count > 5
Note: This Splunk query identifies user accounts involved in a password change that continue to generate authenticated requests from the same IP within a 30-minute window, filtering out low-noise static resources.
Wazuh OSSEC Rule
<group name="kirby_cms,">
<rule id="100489" level="10">
<decoded_as>json</decoded_as>
<field name="uri">\./panel.*password</field>
<description>Kirby CMS password change request detected</description>
<group>authentication,password_change,</group>
<if_sid>100489</if_sid>
<field name="uri">\./panel</field>
<description>Post-password-change session continues to access Kirby Panel</description>
<group>session_reuse,suspicious_activity,</group>
<options>no_full_log</options>
</rule>
</group>
Mitigation & Patch Guidance
Patch confidence is 2/4 (CLAIMED) — the patch is confirmed solely by the CNA advisory and has not been independently verified by secondary sources. Organizations should validate patch integrity through the vendor's official distribution channels.
Immediate mitigations:
- Upgrade Kirby to the appropriate patched version for each affected release branch: 3.5.8.3, 3.6.6.3, 3.7.5.2, 3.8.4.1, or 3.9.6.
- If immediate patching is not possible, disable the Kirby Panel and API in the site configuration — the NVD description explicitly notes the vulnerability affects "all Kirby sites with user accounts (unless Kirby's API and Panel are disabled in the config)."
- On any device that is shared with untrusted users, enforce additional authentication factors (e.g., two-factor authentication, device-level biometrics) before accessing the Kirby Panel.
- Manually terminate all active sessions for affected users after any password change, if session management tools are available in the CMS admin interface.
- Audit current sessions for all user accounts; if a password was recently changed and sessions remain valid, consider those sessions potentially compromised and revoke them.
Patch/upgrade steps:
- Back up site files and database before upgrade.
- Identify the current Kirby version (via the version file in the system directory or the admin panel footer).
- Update via the Kirby CLI (
kirby update), Composer (composer update getkirby/cms), or manual replacement of the core files with the patched release. - After upgrade, verify the version number and validate that a test password change immediately invalidates existing sessions.
- Purge all sessions from the session store after the upgrade to clear any sessions that may have persisted pre-patch.
Long-term hardening:
- Enforce a policy requiring immediate session invalidation detection after credential changes; the fix in these versions is the baseline — future verification should include automated regression tests for session invalidation.
- Implement a centralized identity provider or SSO solution to centralize session control and revocation.
- Restrict access to the Kirby Panel and API to trusted networks or VPN.
- Enable thorough audit logging for authentication events and session creation, paired with SIEM ingestion for continuous monitoring.
- Conduct periodic penetration testing focused on session management and credential rotation scenarios.
References
- NVD Entry: https://nvd.nist.gov/vuln/detail/CVE-2023-38489
- Kirby CMS Security Advisory (CNA source) — version-specific security release notes for 3.5.8.3, 3.6.6.3, 3.7.5.2, 3.8.4.1, and 3.9.6.
- MITRE CWE-613 (Insufficient Session Expiration): https://cwe.mitre.org/data/definitions/613.html
- Kirby CMS Changelog: https://getkirby.com/changelog — contains release notes for patched versions detailing session management fixes.
As of the publication date, no known threat actor campaigns or exploit-in-the-wild evidence have been documented for this CVE. The EPSS score of 0.00809 indicates a low probability of active exploitation in the 30 days following publication. CISA has not added this CVE to the Known Exploited Vulnerabilities catalog.
What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.