Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as low-privileged Koillection user
-
DeliveryUpload crafted HTML via Datum file API
-
ExploitVictim opens attachment served as text/html
-
ExecutionJavaScript executes in victim session
-
ImpactPerform 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. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – 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
Affected Packages
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
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
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.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
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
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.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Cross-Site Scripting occurs when an application accepts untrusted data and sends it to a web browser without proper validation or encoding.
EUVD-2026-98934
GHSA-2rcm-w8cq-6hv5
NVD
CVE.org
EPSS
Exploit-DB