Skip to content

Commit 90655f8

Browse files
jamgregoryRubySec CI
authored andcommitted
Updated advisory posts against rubysec/ruby-advisory-db@23d78a1
1 parent 9ec2831 commit 90655f8

File tree

2 files changed

+111
-0
lines changed

2 files changed

+111
-0
lines changed
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
---
2+
layout: advisory
3+
title: 'CVE-2026-22860 (rack): Rack has a Directory Traversal via Rack:Directory'
4+
comments: false
5+
categories:
6+
- rack
7+
advisory:
8+
gem: rack
9+
cve: 2026-22860
10+
ghsa: mxw3-3hh2-x2mh
11+
url: https://github.com/rack/rack/security/advisories/GHSA-mxw3-3hh2-x2mh
12+
title: Rack has a Directory Traversal via Rack:Directory
13+
date: 2026-02-17
14+
description: |-
15+
## Summary
16+
17+
`Rack::Directory`’s path check used a string prefix match
18+
on the expanded path. A request like `/../root_example/` can escape the configured
19+
root if the target path starts with the root string, allowing directory listing
20+
outside the intended root.
21+
22+
## Details
23+
24+
In `directory.rb`, `File.expand_path(File.join(root,
25+
path_info)).start_with?(root)` does not enforce a path boundary. If the server root
26+
is `/var/www/root`, a path like `/var/www/root_backup` passes the check because
27+
it shares the same prefix, so `Rack::Directory` will list that directory also.
28+
29+
## Impact
30+
31+
Information disclosure via directory listing outside the configured root
32+
when `Rack::Directory` is exposed to untrusted clients and a directory shares the
33+
root prefix (e.g., `public2`, `www_backup`).
34+
35+
## Mitigation
36+
37+
* Update to a patched
38+
version of Rack that correctly checks the root prefix.\n* Don't name directories
39+
with the same prefix as one which is exposed via `Rack::Directory`."
40+
cvss_v3: 7.5
41+
patched_versions:
42+
- "~> 2.2.22"
43+
- "~> 3.1.20"
44+
- ">= 3.2.5"
45+
related:
46+
url:
47+
- https://github.com/rack/rack/security/advisories/GHSA-mxw3-3hh2-x2mh
48+
- https://github.com/rack/rack/commit/75c5745c286637a8f049a33790c71237762069e7
49+
- https://github.com/advisories/GHSA-mxw3-3hh2-x2mh
50+
---
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
---
2+
layout: advisory
3+
title: 'CVE-2026-25500 (rack): Stored XSS in Rack::Directory via javascript: filenames
4+
rendered into anchor href'
5+
comments: false
6+
categories:
7+
- rack
8+
advisory:
9+
gem: rack
10+
cve: 2026-25500
11+
ghsa: whrj-4476-wvmp
12+
url: https://github.com/rack/rack/security/advisories/GHSA-whrj-4476-wvmp
13+
title: 'Stored XSS in Rack::Directory via javascript: filenames rendered into anchor
14+
href'
15+
date: 2026-02-17
16+
description: |-
17+
## Summary
18+
19+
`Rack::Directory` generates an HTML directory index where each file entry is rendered as a clickable link. If a file exists on disk whose basename begins with the `javascript:` scheme (e.g. `javascript:alert(1)`), the generated index includes an anchor whose `href` attribute is exactly `javascript:alert(1)`. Clicking this entry executes arbitrary JavaScript in the context of the hosting application.
20+
21+
This results in a client-side XSS condition in directory listings generated by `Rack::Directory`.
22+
23+
## Details
24+
25+
`Rack::Directory` renders directory entries using an HTML row template similar to:
26+
27+
```html
28+
<a href='%s'>%s</a>
29+
```
30+
31+
The `%s` placeholder is populated directly with the file’s basename. If the basename begins with `javascript:`, the resulting HTML contains an executable JavaScript URL:
32+
33+
```html
34+
<a href='javascript:alert(1)'>javascript:alert(1)</a>
35+
```
36+
37+
Because the value is inserted directly into the `href` attribute without scheme validation or normalization, browsers interpret it as a JavaScript URI. When a user clicks the link, the JavaScript executes in the origin of the Rack application.
38+
39+
## Impact
40+
41+
If `Rack::Directory` is used to expose filesystem contents over HTTP, an attacker who can create or upload files within that directory may introduce a malicious filename beginning with `javascript:`.
42+
43+
When a user visits the directory listing and clicks the entry, arbitrary JavaScript executes in the application's origin. Exploitation requires user interaction (clicking the malicious entry).
44+
45+
## Mitigation
46+
47+
* Update to a patched version of Rack in which `Rack::Directory` prefixes generated anchors with a relative path indicator (e.g. `./filename`).
48+
* Avoid exposing user-controlled directories via `Rack::Directory`.
49+
* Apply a strict Content Security Policy (CSP) to reduce impact of potential client-side execution issues.
50+
* Where feasible, restrict or sanitize uploaded filenames to disallow dangerous URI scheme prefixes.
51+
cvss_v3: 5.4
52+
patched_versions:
53+
- "~> 2.2.22"
54+
- "~> 3.1.20"
55+
- ">= 3.2.5"
56+
related:
57+
url:
58+
- https://github.com/rack/rack/security/advisories/GHSA-whrj-4476-wvmp
59+
- https://github.com/rack/rack/commit/f2f225f297b99fbee3d9f51255d41f601fc40aff
60+
- https://github.com/advisories/GHSA-whrj-4476-wvmp
61+
---

0 commit comments

Comments
 (0)