Description
Part-DB is an open source inventory management system for electronic components. Prior to version 2.12.1, LogEntryExtraFormatter builds the HTML shown in the "Extra" column of the activity-log table (/log) and in element history tables. Every branch of LogEntryExtraFormatter::getInternalFormat() runs user-controlled strings through htmlspecialchars() before placing them into the HTML it returns — except the CollectionElementDeleted branch, which interpolates getOldName() (and getCollectionName()) into a sprintf() template with no escaping. The returned string is emitted by LogEntryExtraColumn::render() and inserted as raw HTML into the DataTables cell (the bundle does not escape column output; sibling columns call htmlspecialchars() themselves). CollectionElementDeleted.getOldName() is the name of a deleted collection sub-element — a part Parameter, Attachment, PartLot, Orderdetail, etc. — all freely set by any user with edit rights on the owning element. A low-privileged content editor can therefore store an HTML/script payload as the name of such a sub-element, delete it (which writes the log entry), and have that markup parsed as live DOM in the browser of a higher-privileged victim (an administrator/auditor with system.show_logs, or any user viewing that element's history). This is a stored cross-site-scripting / HTML-injection defect caused by a single missed sanitizer in one sibling branch. CSP policies block inline javascript execution under normal conditions. This issue has been patched in version 2.12.1.
Published: 2026-10-23
Score: 6 Medium
EPSS: n/a
KEV: No
Impact: Stored XSS that allows attackers to inject arbitrary HTML or JavaScript into activity‑log entries that are rendered for higher‑privileged users
Action: Patch Now
AI Analysis

Impact

The flaw lies in the LogEntryExtraFormatter component, which builds HTML for the activity‑log "Extra" column. In the CollectionElementDeleted branch, the code string‑formats the old name of a deleted collection sub‑element without escaping it, creating a stored cross‑site‑scripting vulnerability. An attacker who can edit or delete a collection sub‑element can supply a malicious name, delete the element so the log entry is written, and then have the crafted markup rendered for any user who views the log or element history. This can lead to session hijacking, credential theft, or other malicious actions within the victim’s browser. The issue is mitigated by CSP policies that normally block inline JavaScript execution, but unless CSP is properly configured or the attacker uses other payloads, the stored payload still poses a risk.

Affected Systems

All installations of Part‑DB server running a version earlier than 2.12.1 are impacted. The vulnerability is present in the core Part‑DB server code used to generate activity log entries. Users who possess edit rights to any collection sub‑element (parameter, attachment, lot, etc.) are required to create the malicious payload, and the deletion of that sub‑element triggers the storage of the payload.

Risk and Exploitability

The CVSS score of 6 indicates a moderate impact; the EPSS metric is not available, and the vulnerability is not listed in the CISA KEV catalog. The attack requires a legitimate session with edit privileges on the owning element, but once the payload is stored it automatically propagates to any user who accesses the log or history of the deleted element. Although Content Security Policies may block inline scripts under normal circumstances, the risk remains if CSP is misconfigured or if the attacker uses payloads that bypass CSP measures. Given the moderate severity, the potential for widespread impact, and the need for privileged access, the vulnerability should be considered a high priority for remediation.

Generated by OpenCVE AI on October 23, 2026 at 05:38 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Apply the official Part‑DB update to version 2.12.1 or later, which adds escaping to all log entry branches.
  • Remove or relocate any existing activity‑log entries that contain unsanitized sub‑element names to eliminate stored malicious content.
  • Restrict edit and delete permissions for collection sub‑elements to trusted staff, and apply a strong CSP policy that disallows inline JavaScript execution.

Generated by OpenCVE AI on October 23, 2026 at 05:38 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 23 Oct 2026 04:00:00 +0000

Type Values Removed Values Added
Description Part-DB is an open source inventory management system for electronic components. Prior to version 2.12.1, LogEntryExtraFormatter builds the HTML shown in the "Extra" column of the activity-log table (/log) and in element history tables. Every branch of LogEntryExtraFormatter::getInternalFormat() runs user-controlled strings through htmlspecialchars() before placing them into the HTML it returns — except the CollectionElementDeleted branch, which interpolates getOldName() (and getCollectionName()) into a sprintf() template with no escaping. The returned string is emitted by LogEntryExtraColumn::render() and inserted as raw HTML into the DataTables cell (the bundle does not escape column output; sibling columns call htmlspecialchars() themselves). CollectionElementDeleted.getOldName() is the name of a deleted collection sub-element — a part Parameter, Attachment, PartLot, Orderdetail, etc. — all freely set by any user with edit rights on the owning element. A low-privileged content editor can therefore store an HTML/script payload as the name of such a sub-element, delete it (which writes the log entry), and have that markup parsed as live DOM in the browser of a higher-privileged victim (an administrator/auditor with system.show_logs, or any user viewing that element's history). This is a stored cross-site-scripting / HTML-injection defect caused by a single missed sanitizer in one sibling branch. CSP policies block inline javascript execution under normal conditions. This issue has been patched in version 2.12.1.
Title Part-DB: Stored XSS / HTML injection in activity-log Extra column via unsanitized CollectionElementDeleted element name (sibling-sanitizer gap)
Weaknesses CWE-79
References
Metrics cvssV4_0

{'score': 6, 'vector': 'CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-10-23T03:45:02.512Z

Reserved: 2026-06-15T20:07:02.184Z

Link: CVE-2026-54615

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-10-23T04:18:16.833

Modified: 2026-10-23T04:18:16.833

Link: CVE-2026-54615

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-23T05:45:12Z

Weaknesses
  • CWE-79

    Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')