Read the docs
TI-2026-79537 Aliases CVE-2026-54615

Stored cross-site scripting in Part-DB activity log Extra column

Priority LOW 27CWE-79Published · Updated

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

Exploitation None reported CISA SSVC · not in CISA KEV
EPSS 0.00372 31st percentileScored 2026-11-07
Fix Fixed Part-DB-server (Part-DB): 2.12.1

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

VendorProductAffected versionsFixed inStatusSource
Part-DBPart-DB-serverbefore 2.12.12.12.1Patch availableCNA
  • Part-DB-server VendorPart-DB Affected before 2.12.1 Fixed in 2.12.1 Patch available CNA

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

  1. 2026-10-23 Threatist record created from CVE-2026-54615
  2. 2026-10-23 Priority changed: MEDIUM → LOW
  3. 2026-10-23 CISA SSVC decision points changed

References

  • 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
See all 12 →

Sources

This product uses the NVD API but is not endorsed or certified by the NVD. Sources and licences