---
id: GHSA-pmwx-rm49-xv39
title: >-
  ActiveRecord::Tenanted::Storage::DiskService#path_for has a possible path
  traversal
summary: >-
  ActiveRecord::Tenanted::Storage::DiskService#path_for has a possible path
  traversal
severity: low
cwe:
  - CWE-22
vendor: activerecord-tenanted
product: activerecord-tenanted
ecosystem: rubygems
affected:
  - activerecord-tenanted < 0.7.0
patched:
  - activerecord-tenanted 0.7.0
published: '2026-07-29'
updated: '2026-07-29'
source: GHSA
sourceUrl: 'https://github.com/advisories/GHSA-pmwx-rm49-xv39'
references:
  - url: >-
      https://github.com/basecamp/activerecord-tenanted/security/advisories/GHSA-pmwx-rm49-xv39
  - url: 'https://github.com/rails/rails/security/advisories/GHSA-9xrj-h377-fr87'
  - url: 'https://github.com/basecamp/activerecord-tenanted/pull/307'
  - url: >-
      https://github.com/basecamp/activerecord-tenanted/commit/b242c8ad9bf58bbd7f5a032d153b0f29db54b9ba
  - url: 'https://github.com/basecamp/activerecord-tenanted/releases/tag/v0.7.0'
  - url: 'https://github.com/advisories/GHSA-pmwx-rm49-xv39'
tags:
  - ghsa
  - rubygems
ingestedAt: '2026-07-29T17:48:50.066Z'
---

## Overview

### Summary

Active Record Tenanted's override of Active Storage's `DiskService#path_for` does not validate that the resolved filesystem path remains within the storage root directory. If a blob key containing path traversal sequences (e.g. `../`) is used, it could allow reading, writing, or deleting arbitrary files on the server. Blob keys are expected to be trusted strings, but some applications could be passing user input as keys and would be affected.

### Mitigation

Upgrade to Active Record Tenanted v0.7.0 or later.

As a workaround, do not use untrusted user input as blob keys. Blob keys are expected to be trusted strings.

### Credit

This issue was responsibly reported by @tonghuaroot.

## Affected packages

- `activerecord-tenanted < 0.7.0`

## Remediation

Upgrade to a patched release:

- `activerecord-tenanted 0.7.0`
