Skip to content

Escape data values in Arrival and Birth clinical-history HTML#708

Merged
labkey-martyp merged 1 commit into
release25.7-SNAPSHOTfrom
25.7_fb_history_html_escaping
Jun 22, 2026
Merged

Escape data values in Arrival and Birth clinical-history HTML#708
labkey-martyp merged 1 commit into
release25.7-SNAPSHOTfrom
25.7_fb_history_html_escaping

Conversation

@labkey-martyp

Copy link
Copy Markdown
Contributor

Rationale

BirthDataSource and ArrivalDataSource concatenated a data-controlled column value (the gender lookup display value and the sourceFacility value, respectively) directly into the clinical-history HTML without escaping. That HTML is serialized to the history row's html property and rendered unescaped in the EHR client, so a crafted value persisted and executed as stored XSS when a user viewed the animal's clinical history.

Related Pull Requests

None.

Changes

  • Route both values through the base-class safeAppend helper, which HTML-escapes via PageFlowUtil.filter, matching every other nirc_ehr data source.
  • Drop the now-redundant manual hasColumn/null guards and the now-unused FieldKey import.

BirthDataSource and ArrivalDataSource concatenated a data-controlled column value (the gender lookup display value and the sourceFacility value, respectively) directly into the clinical-history HTML string without escaping. That string is serialized to the history row's html property and rendered unescaped in the EHR client, so a crafted value persisted and executed as stored XSS when a user viewed the animal's clinical history.

Both now route the value through the base class safeAppend helper, which HTML-escapes via PageFlowUtil.filter, matching every other nirc_ehr data source. The redundant manual hasColumn/null guards and the now-unused FieldKey import were dropped.
@labkey-martyp labkey-martyp merged commit 50c1dd8 into release25.7-SNAPSHOT Jun 22, 2026
7 checks passed
@labkey-martyp labkey-martyp deleted the 25.7_fb_history_html_escaping branch June 22, 2026 19:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants