Skip to main content

Koillection EUVDEUVD-2026-98934

| CVE-2026-110101 MEDIUM
Cross-site Scripting (XSS) (CWE-79)
2026-10-13 disclosure@vulncheck.com GHSA-2rcm-w8cq-6hv5
5.1
CVSS 4.0 · Vendor: vulncheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Authenticate as low-privileged Koillection user
  2. Delivery
    Upload crafted HTML via Datum file API
  3. Exploit
    Victim opens attachment served as text/html
  4. Execution
    JavaScript executes in victim session
  5. Impact
    Perform actions on victim's behalf

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Output encoding, context-aware escaping
MITRE ATT&CK

2 techniques across 2 tactics: Initial Access, Execution

The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up.

Exploitation Conditions

Exploitation requires (1) an authenticated Koillection account with permission to create or edit a Datum and upload file attachments through POST /api/data/{id}/file, and (2) the absence of MIME-type restrictions on that upload, which lets an HTML file be stored and later served as text/html from the public/uploads path. The payload is stored, not reflected, so (3) a separate victim must subsequently open/view the uploaded attachment in an authenticated session for the JavaScript to execute. Limiting factors: this is not remote-unauthenticated - it needs a valid low-privilege login (PR:L) and victim interaction (UI:P); impact is limited to the victim's browser/session (no server-side code execution or data impact), reducing realistic severity below the raw network-vector reading.

Impact

This is a medium-severity stored XSS (vendor CVSS 4.0 base 5.1) that aligns well with its own data: the attack vector is network (AV:N) with low complexity (AC:L), but exploitation is gated by two real factors - PR:L means the attacker needs an authenticated account on the Koillection instance, and UI:P means a victim must actively view the malicious attachment. The impact is confined to the subsequent-system scope (SC:L/SI:L) reflecting JavaScript execution in a victim's browser/session rather than compromise of the server itself (VC/VI/VA all N). No EPSS score, CISA KEV listing, or POC reference was provided in the input, so there is no evidence of active exploitation or published exploit code; this is a disclosure-stage finding from VulnCheck, not a widely-weaponized bug. The combination of required authentication, required victim interaction, a niche self-hosted product, and no exploitation signals places this as a genuine but low-urgency issue rather than an emergency - it is a real flaw worth patching but not a high-priority mass-exploitation risk. Note one data gap: the 1.8.4 release notes provided do not mention a fix for this XSS (they cite a CSRF fix and generic dependency CVE upgrades), and the CVE states the product is vulnerable 'through 1.8.4', so a confirmed fixed version is not evident from the supplied data - verify remediation status with the vendor.

Exploit ScenarioDerived

An attacker who holds any authenticated (low-privilege) account on a shared Koillection instance creates or edits a Datum and uploads a crafted HTML file as a file attachment via POST /api/data/{id}/file, bypassing MIME-type restrictions. Because the file is later served as text/html directly from public/uploads, when another user (e.g. an administrator or other member) opens that attachment link the embedded JavaScript executes in their session, letting the attacker perform actions on their behalf. No public exploit code was identified at time of analysis, and successful exploitation depends on a victim opening the attacker-supplied file.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – Oct 13, 2026

Stored cross-site scripting in Koillection through 1.8.4 lets any authenticated user upload an HTML file as a Datum attachment through POST /api/data/{id}/file, because the upload path applies no MIME-type or extension restriction; the file is then served as text/html from the public/uploads directory and its JavaScript runs in the session of any other user who opens the attachment. Exploitation is gated by two real prerequisites: the attacker must hold a valid low-privilege account with permission to create or edit a Datum (PR:L in the vendor's CVSS 4.0 vector and in the independent CVSS 3.1 assessment), and a separate victim must actively view the stored payload (UI:P/UI:R), so the realistic severity sits below a naive network-vector reading. Impact is confined to the victim's browser session, with no server-side code execution or data confidentiality/integrity effect on the server; there is no public exploit identified at time of analysis and no CISA KEV listing.

RemediationAI

No vendor-released patch version is confirmed in the available data - the disclosed references point only to the affected 1.8.4 tag and to upstream issue https://github.com/benjaminjonard/koillection/issues/1609, which tracks the report, so administrators should monitor that issue and the repository releases page (https://github.com/benjaminjonard/koillection/releases) and upgrade to the first release published after 1.8.4 once it addresses attachment MIME handling. Until then, layer compensating controls: restrict Datum create/edit and attachment-upload permissions to a minimal set of trusted accounts, since exploitation depends on PR:L and removing upload rights from untrusted users breaks the attack chain entirely (trade-off: reduced collaborative functionality for regular users). Configure the web server to neutralize the public/uploads directory - add X-Content-Type-Options: nosniff, force Content-Disposition: attachment for stored uploads, and/or block the text/html content type for that path so uploaded files download instead of render (trade-off: legitimate images inline-previewed from that path may need a separate allowlisted route). Deploy a Content-Security-Policy with script-src restricted to trusted origins and object-src 'none' to blunt any payload that still reaches a browser (trade-off: CSP tuning can break the Symfony front-end and must be tested). As a structural fix, validate uploads server-side by extension and magic-byte content type, store attachments outside the web root or on a separate origin, and re-serve them through an authenticated controller that sets a safe content type. Review the referenced handler code at src/Service/ImageHandler.php before applying local patches, and consult the VulnCheck advisory for the specific request format used in the proof of concept.

Affected VersionsENISA

Koillection 0 ≤1.8.4

Affected Packages

euvd koillection no fix

Source: OSV (Open Source Vulnerabilities)

Affects your stack

Affects 1 package in euvd

Checking this CVE against your own stacks and servers is part of the Basic plan and up.

Technical ContextAI · show details

Koillection is a self-hosted PHP/Symfony collection-management application. The flaw is a classic CWE-79 (Improper Neutralization of Input During Web Page Generation) stored XSS whose delivery mechanism also overlaps CWE-434-style unrestricted file upload: the Datum entity and its image/file handler accept user-supplied attachments without validating the declared content type, so an attacker can submit an HTML document through the JSON API endpoint POST /api/data/{id}/file. The referenced source at src/Entity/Datum.php (lines 141-145) and src/Service/ImageHandler.php (lines 43-50) illustrates the attachment storage path, while the public/uploads directory is served by the web server as text/html, meaning the browser parses and executes the payload rather than treating it as a download. Because the payload is persisted server-side and re-served to every subsequent viewer, the JavaScript inherits the origin and cookie context of the Koillection instance and can perform actions on behalf of the victim. This is not a server-side code execution or database-compromise primitive - the security boundary crossed is the victim user's authenticated browser session, which is consistent with the scope-changed (S:C) but low confidentiality/integrity (C:L/I:L) rating in the independent assessment.

Know when the next one hits your stack

  • Watch products and get an email when something new is published
  • Check this CVE against your own stack and servers
  • Exploit and PoC references, threat intelligence from 22 sources

No credit card · 7-day full trial

Severity by source

Vendor (vulncheck) PRIMARY 5.1 MEDIUM
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N
vuln.today AI 5.4 MEDIUM

Requires an authenticated low-privilege account (PR:L) to upload the payload and a victim to view it (UI:R); stored XSS executes in the victim's browser context so S:C with limited C:L/I:L and no availability impact.

3.1 AV:N/AC:L/PR:L/UI:R/S:C/C:L/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:P/VC:N/VI:N/VA:N/SC:L/SI:L/SA:N

Primary rating from Vendor (vulncheck).

CVSS VectorVendor: vulncheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
Passive
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
None
Vulnerable system: Availability
None
Subsequent system: Confidentiality
Low
Subsequent system: Integrity
Low
Subsequent system: Availability
None

DescriptionCVE.org

Koillection through 1.8.4 contains a stored cross-site scripting vulnerability that allows authenticated users to upload HTML files as Datum file attachments lacking MIME restrictions. Attackers can upload HTML payloads via POST /api/data/{id}/file, served as text/html from public/uploads, executing JavaScript in victims' sessions to perform actions on their behalf.

Threat Intelligence Overview

EPSS Score
0.2%
Top 89% exploitable
Prevalence
Low
niche self-hosted open-source collection manager, small deployment footprint
Data Quality
5 sources
Confidence: Medium

How this decision was reached

The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation· derived
None
System Exposure· derived
Open
Automatable· derived
No
Human Impact· derived
Medium

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy