Stored cross-site scripting in Part-DB activity log Extra column
Key facts
- Attack vector
- Network
- Privileges required
- Low
- User interaction
- None
- Attack complexity
- Low
- Attack requirements
- Present
- Impact type
- Cross-site scripting
- Confidentiality · integrity · availability
- None · High · None
- Fix status
- Fixed
Attack profile from CVSS 4.0 · CNA. Fix status from CNA. Impact type from CWE-79.
Summary
Part-DB-server before 2.12.1 inserts the name of a deleted collection sub-element into the activity-log Extra column without escaping it. A user with edit rights on an element can store HTML markup as such a name and delete the sub-element, and the markup renders in the browser of a higher-privileged user who views the log or element history. This is CWE-79. Content Security Policy normally blocks inline script execution.
Written with Claude Haiku 5.5 from the sources below · 2026-10-28
Description from the CNA
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.
Why it matters now
SSVC decision points
CISA ADP · SSVC 2.0.3
- Exploitation
- None
- Automatable
- No
- Technical impact
- Partial
The decision (Track, Attend, Act) also depends on your mission and well-being impact; see CISA's SSVC guide.
Affected products
Remediation
Upgrade Part-DB-server to version 2.12.1, which fixes the issue.
Written with Claude Haiku 5.5 from the sources below · 2026-10-28
- Fix · CNA Part-DB-server (Part-DB) Fixed in 2.12.1
Timeline
- 2026-10-23 Threatist record created from CVE-2026-54615
- 2026-10-23 Priority changed: MEDIUM → LOW
- 2026-10-23 CISA SSVC decision points changed
References
More Part-DB vulnerabilities
- TI-2026-79546 Password reset link poisoning in Part-DB allows account takeover CVSS 4.0HIGH 8.7
- TI-2019-15485 Part-DB 0.4 Authentication Bypass via login.php CVSS 4.0HIGH 8.8
- TI-2026-79538 Part-DB attachment upload allows PHP execution via .phar files CVSS 3.1CRITICAL 9.6
- TI-2022-00754 OS Command Injection in part-db/part-db CVSS 3.1CRITICAL 9.8
- TI-2026-79539 Hardcoded APP_SECRET in Part-DB enables forged login cookies CVSS 3.1MEDIUM 6.3
- TI-2026-79540 Stored HTML injection in Part-DB BOM validation results CVSS 4.0MEDIUM 5.7
Sources
This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences