Skip to content

Commit 55341a6

Browse files
jasnowRubySec CI
authored andcommitted
Updated advisory posts against rubysec/ruby-advisory-db@abb2367
1 parent 240ca27 commit 55341a6

3 files changed

Lines changed: 133 additions & 0 deletions

File tree

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
layout: advisory
3+
title: 'GHSA-7m8w-vg9p-qjr6 (alchemy_cms): Stored XSS in SelectView via Missing Server-Side
4+
Option Validation'
5+
comments: false
6+
categories:
7+
- alchemy_cms
8+
advisory:
9+
gem: alchemy_cms
10+
ghsa: 7m8w-vg9p-qjr6
11+
url: https://github.com/AlchemyCMS/alchemy_cms/security/advisories/GHSA-7m8w-vg9p-qjr6
12+
title: Stored XSS in SelectView via Missing Server-Side Option Validation
13+
date: 2026-07-22
14+
description: |-
15+
## Summary
16+
17+
Alchemy::Ingredients::SelectView#call delegates to super (i.e.,
18+
Alchemy::Ingredients::BaseView#call) for the single-value path, which
19+
returns value.html_safe. The allowed option list (select_values)
20+
defined in elements.yml is enforced only in the admin UI dropdown;
21+
no server-side validation checks that a submitted value belongs to
22+
the allowed set. An authenticated CMS author can bypass the dropdown
23+
by sending a direct API request with an arbitrary HTML string as the
24+
ingredient value. That string is stored verbatim and rendered unescaped
25+
into the published public page, executing in every visitor's browser.
26+
cvss_v3: 5.4
27+
patched_versions:
28+
- "~> 8.0.16"
29+
- "~> 8.1.15"
30+
- "~> 8.2.9"
31+
- ">= 8.3.5"
32+
related:
33+
url:
34+
- https://rubygems.org/gems/alchemy_cms/versions/8.3.5 - https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.3.5
35+
- https://github.com/AlchemyCMS/alchemy_cms/pull/4081
36+
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.2.9
37+
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.1.15
38+
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.0.16
39+
- https://github.com/AlchemyCMS/alchemy_cms/security/advisories/GHSA-7m8w-vg9p-qjr6
40+
notes: |
41+
- No CVE value in project GHSA
42+
- cvss_v3 from project GHSA
43+
- Changelog only goes to 8.3.0.
44+
- date from rubygems.or 8.3.5 release date
45+
---
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
layout: advisory
3+
title: 'GHSA-pm72-wq9v-wvfh (alchemy_cms): Stored XSS in PictureView figcaption via
4+
html_safe on User Caption'
5+
comments: false
6+
categories:
7+
- alchemy_cms
8+
advisory:
9+
gem: alchemy_cms
10+
ghsa: pm72-wq9v-wvfh
11+
url: https://github.com/AlchemyCMS/alchemy_cms/security/advisories/GHSA-pm72-wq9v-wvfh
12+
title: Stored XSS in PictureView figcaption via html_safe on User Caption
13+
date: 2026-07-22
14+
description: |-
15+
## Summary
16+
17+
Alchemy::Ingredients::PictureView#caption calls ingredient.caption.html_safe
18+
and passes the result to content_tag(:figcaption, ...). The caption
19+
value is user-supplied (set via the ingredients_attributes[caption]
20+
parameter in the element save API) and is stored in a JSON data column
21+
with no sanitization. Because .html_safe is called before content_tag,
22+
Rails' automatic HTML escaping is suppressed and the raw user string
23+
is emitted into the published page, executing in every visitor's browser.
24+
cvss_v3: 5.4
25+
patched_versions:
26+
- "~> 8.0.16"
27+
- "~> 8.1.15"
28+
- "~> 8.2.9"
29+
- ">= 8.3.5"
30+
related:
31+
url:
32+
- https://rubygems.org/gems/alchemy_cms/versions/8.3.5 - https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.3.5
33+
- https://github.com/AlchemyCMS/alchemy_cms/pull/4081
34+
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.2.9
35+
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.1.15
36+
- https://github.com/AlchemyCMS/alchemy_cms/releases/tag/v8.0.16
37+
- https://github.com/AlchemyCMS/alchemy_cms/security/advisories/GHSA-pm72-wq9v-wvfh
38+
notes: |
39+
- No CVE in project GHSA
40+
- cvss_v3 from project GHSA
41+
- Changelog only goes to 8.3.0.
42+
- date from rubygems.or 8.3.5 release date
43+
---
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
---
2+
layout: advisory
3+
title: 'GHSA-r827-6rm4-59pg (alchemy_cms): Stored XSS via unsanitized SVG attachment
4+
replacement'
5+
comments: false
6+
categories:
7+
- alchemy_cms
8+
advisory:
9+
gem: alchemy_cms
10+
ghsa: r827-6rm4-59pg
11+
url: https://github.com/AlchemyCMS/alchemy_cms/security/advisories/GHSA-r827-6rm4-59pg
12+
title: Stored XSS via unsanitized SVG attachment replacement
13+
date: 2026-07-28
14+
description: |-
15+
## Summary
16+
17+
AlchemyCMS registers its SVG sanitizer (SanitizeSvgJob, a Loofah-based
18+
scrubber) only as an after_create_commit callback on Alchemy::Attachment /
19+
Alchemy::Picture. This callback fires when a new attachment record is
20+
created, but not when an existing attachment's file is replaced through
21+
the admin "update" action. An authenticated user holding the editor
22+
role (i.e. manage Alchemy::Attachment permission, a low-privilege,
23+
non-admin role) can PATCH an existing attachment to replace its file
24+
with a malicious SVG containing <script> / onload= payloads. Because
25+
the sanitizer never runs on this path, and because AlchemyCMS explicitly
26+
configures SVG as an inline-servable content type on Active Storage,
27+
the public, unauthenticated /attachment/:id/show route streams the
28+
attacker's raw SVG payload with Content-Disposition: inline. Any
29+
visitor (including other admins) who opens the attachment URL executes
30+
attacker-controlled JavaScript in the AlchemyCMS application origin.
31+
32+
This is a stored, privilege-crossing Cross-Site Scripting vulnerability,
33+
confirmed both by static code review and by live dynamic reproduction
34+
against an unmodified AlchemyCMS instance.
35+
cvss_v3: 8.7
36+
patched_versions:
37+
- ">= 8.3.6"
38+
related:
39+
url:
40+
- https://rubygems.org/gems/alchemy_cms/versions/8.3.6
41+
- https://github.com/AlchemyCMS/alchemy_cms/security/advisories/GHSA-r827-6rm4-59pg
42+
notes: |
43+
- cvss_v3 from project GHSA
44+
- No CVE in project GHSA
45+
---

0 commit comments

Comments
 (0)