Zafiyet.live Keşfet. Değerlendir. Düzelt. Doğrula.
  • Yama var
  • Son 7 gün
  • CWE-79

CVE-2026-54615

Part-DB'de etkinlik günlüğü Extra sütununda kalıcı XSS / HTML enjeksiyonu

Part-DB-server

Orta 6,0 CVSS 4.0
Yayımlandı
Güncellendi
23 Eki 2026
Açık yaşı
5 gün
Kaydı açan
GitHub_M

ÖzetTürkçe

Part-DB, elektronik bileşenler için açık kaynaklı bir envanter yönetim sistemidir. 2.12.1 sürümünden önce, LogEntryExtraFormatter, etkinlik günlüğü tablosunun (/log) Extra sütununda ve öğe geçmişi tablolarında gösterilen HTML'i oluşturmaktadır. LogEntryExtraFormatter::getInternalFormat içindeki her dal, döndürdüğü HTML'e yerleştirmeden önce kullanıcı kontrollü dizeleri htmlspecialchars ile işler; ancak CollectionElementDeleted dalı hariç. Bu dal, getOldName (ve getCollectionName) değerlerini kaçışlama yapılmadan bir sprintf şablonuna ekler. Döndürülen dize LogEntryExtraColumn::render tarafından üretilir ve DataTables hücresine ham HTML olarak eklenir; paket sütun çıktısını kaçışlamaz, yan sütunlar ise htmlspecialchars işlemini kendileri uygular. CollectionElementDeleted.getOldName, silinen bir koleksiyon alt öğesinin adıdır; bu bir parça Parameter, Attachment, PartLot, Orderdetail vb. olabilir ve bunların tümü, ait oldukları öğe üzerinde düzenleme yetkisi olan herhangi bir kullanıcı tarafından serbestçe ayarlanabilir. Bu nedenle, düşük yetkili bir içerik editörü, bu tür bir alt öğenin adı olarak bir HTML/betik yükü depolayabilir, öğeyi silebilir (bu da günlük kaydını yazar) ve bu işaretlemenin, daha yüksek yetkili bir kurbanın (system.show_logs yetkisine sahip bir yönetici/denetçi veya o öğenin geçmişini görüntüleyen herhangi bir kullanıcı) tarayıcısında canlı DOM olarak ayrıştırılmasını sağlayabilir. Bu, tek bir sibling dalda kaçırılmış bir temizleyici nedeniyle oluşan kalıcı siteler arası betik çalıştırma (XSS) / HTML enjeksiyonu kusurudur. Normal koşullarda CSP politikaları satır içi JavaScript çalıştırmayı engeller. Sorun 2.12.1 sürümünde giderilmiştir.

Kaynaktaki açıklama (İngilizce)

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.

Bu açığın açıklamasını Türkçeye çevirdik. Adım adım çözüm önerilerini kritik ve yeni açıklar için hazırlıyoruz; düzeltilmiş sürüm aşağıdaki tabloda, ayrıntılar üreticinin duyurusunda.

Etkilenen sürümler1 yazılım

YazılımEtkilenenDüzeltildiği sürüm
Part-DB-server < 2.12.1 2.12.1

Kaynaklar4 kaynak

Kayıt geçmişi

  1. Yayımlandı

İlgili açıklar

Türkçe metin, resmi kayıtlardaki bilgilerle yapay zekâ yardımıyla yazıldı ve yayından önce otomatik kontrollerden geçti. Bir değişikliği uygulamadan önce üreticinin duyurusuna mutlaka bakın.