/

CVE-2026-18360

Severity:

HIGH RISK

(7.6)

Stored XSS (CWE-79) in IRIS Custom Attributes

CVE-2026-18360

Deferred

Vulnerability type

Category:

Cross-Site Scripting (XSS)

CWE:

CWE-79

Impact:

Stored Cross-Site Scripting leading to session compromise and unauthorized actions

Severity:

HIGH RISK

(7.6)

CVSS version:

3.1

Catch this CVE while code is being written

Detect vulnerable code directly in pull requests, so CVEs are fixed before merge.

Summary

A stored cross-site scripting (XSS) vulnerability in the IRIS web application allows attacker-controlled script content to be saved via the custom attributes function and later executed in users' browsers.

When malicious data is rendered without proper sanitization or output encoding, any user viewing affected pages can unknowingly trigger attacker-supplied JavaScript within their authenticated session.

A stored cross-site scripting (XSS) vulnerability in the IRIS web application allows attacker-controlled script content to be saved via the custom attributes function and later executed in users' browsers.

When malicious data is rendered without proper sanitization or output encoding, any user viewing affected pages can unknowingly trigger attacker-supplied JavaScript within their authenticated session.

Affected context

This vulnerability appears in IRIS deployments that expose the custom attributes feature through a web interface and render those attributes back into HTML views.

It generally manifests when user-supplied attribute values are persisted to the application datastore and later injected into web pages without robust output encoding.

The issue is more pronounced in multi-user environments where one user's custom attributes are visible to other users, particularly administrative or highly privileged accounts.

This vulnerability appears in IRIS deployments that expose the custom attributes feature through a web interface and render those attributes back into HTML views.

It generally manifests when user-supplied attribute values are persisted to the application datastore and later injected into web pages without robust output encoding.

The issue is more pronounced in multi-user environments where one user's custom attributes are visible to other users, particularly administrative or highly privileged accounts.

Exploit preconditions

  • Attack surface: Web UI endpoints handling creation or modification of custom attributes.
  • Required access: Ability to create or edit custom attributes (e.g., a normal authenticated user or any role permitted to manage attributes).
  • Trigger point: Display of the stored custom attribute in a browser view that renders the raw value into HTML without escaping.
  • Why exploitation is possible: The application persists untrusted attribute values and later embeds them directly in the DOM, allowing attacker-controlled JavaScript or HTML markup to execute in the context of the victim's session.
  • Attack surface: Web UI endpoints handling creation or modification of custom attributes.
  • Required access: Ability to create or edit custom attributes (e.g., a normal authenticated user or any role permitted to manage attributes).
  • Trigger point: Display of the stored custom attribute in a browser view that renders the raw value into HTML without escaping.
  • Why exploitation is possible: The application persists untrusted attribute values and later embeds them directly in the DOM, allowing attacker-controlled JavaScript or HTML markup to execute in the context of the victim's session.

Why this happens

The underlying issue is improper neutralization of user input before including it in web pages, corresponding to CWE-79: Improper Neutralization of Input During Web Page Generation (Cross-Site Scripting).

In the custom attributes function, user-supplied values are treated as display-ready content and are stored and re-used without applying context-appropriate output encoding (such as HTML or JavaScript escaping).

As a result, when these attributes are rendered, the browser interprets them as executable markup or script, transforming otherwise passive data fields into an injection point.

The underlying issue is improper neutralization of user input before including it in web pages, corresponding to CWE-79: Improper Neutralization of Input During Web Page Generation (Cross-Site Scripting).

In the custom attributes function, user-supplied values are treated as display-ready content and are stored and re-used without applying context-appropriate output encoding (such as HTML or JavaScript escaping).

As a result, when these attributes are rendered, the browser interprets them as executable markup or script, transforming otherwise passive data fields into an injection point.

Potential impact

  • Attackers may execute arbitrary JavaScript in the victim's browser session.
  • Malicious scripts could read or modify session data, potentially leading to account takeover.
  • Victims' actions can be scripted, enabling unauthorized operations under their identity.
  • Sensitive information displayed in the application UI may be exfiltrated to attacker-controlled endpoints.
  • The application's integrity and user trust can be undermined through visual defacement or misleading content.
  • Attackers may execute arbitrary JavaScript in the victim's browser session.
  • Malicious scripts could read or modify session data, potentially leading to account takeover.
  • Victims' actions can be scripted, enabling unauthorized operations under their identity.
  • Sensitive information displayed in the application UI may be exfiltrated to attacker-controlled endpoints.
  • The application's integrity and user trust can be undermined through visual defacement or misleading content.

General mitigation guidance

Effective mitigation typically centers on treating all custom attribute values as untrusted and applying strict output encoding at every render point.

Common defensive patterns include:

  • Implementing context-aware escaping for data injected into HTML, attributes, JavaScript, or URLs so that text cannot be interpreted as code.
  • Validating and constraining attribute inputs to expected formats (e.g., plain text, limited character sets) and rejecting or stripping dangerous constructs.
  • Rendering untrusted content using safe templates or components that default to escaping rather than raw insertion.
  • Isolating any legitimately rich content in sandboxed frames or using markup sanitization libraries configured to remove scripting capabilities.
  • Applying least-privilege principles by limiting who can create attributes that are shown to high-privilege users, thereby reducing exposure.

Effective mitigation typically centers on treating all custom attribute values as untrusted and applying strict output encoding at every render point.

Common defensive patterns include:

  • Implementing context-aware escaping for data injected into HTML, attributes, JavaScript, or URLs so that text cannot be interpreted as code.
  • Validating and constraining attribute inputs to expected formats (e.g., plain text, limited character sets) and rejecting or stripping dangerous constructs.
  • Rendering untrusted content using safe templates or components that default to escaping rather than raw insertion.
  • Isolating any legitimately rich content in sandboxed frames or using markup sanitization libraries configured to remove scripting capabilities.
  • Applying least-privilege principles by limiting who can create attributes that are shown to high-privilege users, thereby reducing exposure.

How teams detect issues like this

Organizations can detect stored XSS issues in custom attribute flows by combining code-level and behavioral analysis:

  • Static analysis rules that flag direct insertion of untrusted data into HTML responses without a recognized escaping routine.
  • Template and view audits looking for variables derived from attribute values that are printed using raw or unsafe render methods.
  • Security-focused code review checklists that emphasize output encoding and the treatment of user-defined custom fields.
  • Automated scanning tools or dynamic application security tests that attempt to store XSS payloads and later confirm whether they execute when pages are viewed.
  • Policy enforcement in CI/CD to block deployments when newly introduced views or components violate encoding or sanitization guidelines.

Organizations can detect stored XSS issues in custom attribute flows by combining code-level and behavioral analysis:

  • Static analysis rules that flag direct insertion of untrusted data into HTML responses without a recognized escaping routine.
  • Template and view audits looking for variables derived from attribute values that are printed using raw or unsafe render methods.
  • Security-focused code review checklists that emphasize output encoding and the treatment of user-defined custom fields.
  • Automated scanning tools or dynamic application security tests that attempt to store XSS payloads and later confirm whether they execute when pages are viewed.
  • Policy enforcement in CI/CD to block deployments when newly introduced views or components violate encoding or sanitization guidelines.

Sources

SourceLink
github.comgithub.com/sbaresearch/advisories/tree/public/2026/SBA-ADV-20260126-01_DFIR-IRIS_Stored_XSS

Frequently asked

questions

Yes, stored XSS typically affects multiple users. Once a malicious custom attribute is saved, any user who views a page that renders that attribute can have the attacker's script executed in their browser.

The attacker generally needs the ability to create or modify custom attributes within IRIS, which often corresponds to a standard authenticated user or any role allowed to configure those fields.

The most robust fix is to enforce consistent, context-aware output encoding for all custom attribute values, combined with strict input validation and, where appropriate, sanitization to remove scripting capabilities before storage or display.

Adopt a secure templating system that escapes by default, apply centralized encoding utilities for all user-supplied data, include XSS checks in code review and automated testing, and design custom fields and rich content features under the assumption that all input is untrusted.

Yes, stored XSS typically affects multiple users. Once a malicious custom attribute is saved, any user who views a page that renders that attribute can have the attacker's script executed in their browser.

The attacker generally needs the ability to create or modify custom attributes within IRIS, which often corresponds to a standard authenticated user or any role allowed to configure those fields.

The most robust fix is to enforce consistent, context-aware output encoding for all custom attribute values, combined with strict input validation and, where appropriate, sanitization to remove scripting capabilities before storage or display.

Adopt a secure templating system that escapes by default, apply centralized encoding utilities for all user-supplied data, include XSS checks in code review and automated testing, and design custom fields and rich content features under the assumption that all input is untrusted.

Find out what's already
exploitable in your codebase.