RubySec

Providing security resources for the Ruby community

GHSA-7m8w-vg9p-qjr6 (alchemy_cms): Stored XSS in SelectView via Missing Server-Side Option Validation

Stored XSS in SelectView via Missing Server-Side Option Validation

Published: July 22, 2026

SECURITY IDENTIFIERS

GEM

alchemy_cms

SEVERITY

CVSS v3.x: 5.4 (Medium)

PATCHED VERSIONS

~> 8.0.16 ~> 8.1.15 ~> 8.2.9 >= 8.3.5

DESCRIPTION

Summary

Alchemy::Ingredients::SelectView#call delegates to super (i.e., Alchemy::Ingredients::BaseView#call) for the single-value path, which returns value.html_safe. The allowed option list (select_values) defined in elements.yml is enforced only in the admin UI dropdown; no server-side validation checks that a submitted value belongs to the allowed set. An authenticated CMS author can bypass the dropdown by sending a direct API request with an arbitrary HTML string as the ingredient value. That string is stored verbatim and rendered unescaped into the published public page, executing in every visitor's browser.

RELATED