
Cloud Vulnerability DB
A community-led vulnerabilities database
CVE-2026-53769 is a missing server-side authorization vulnerability in the Avo Ruby on Rails admin framework's direct attachment upload endpoint, which bypasses documented field-level upload policy methods such as upload_{FIELD_ID}?. An authenticated Avo user can replace or add attachment content — including binary content, filename, and content-type metadata — on any resolved record even when both update? and upload_<field>? policies explicitly deny the operation. The vulnerability affects Avo versions >= 2.28.0 and < 3.32.0 (RubyGems package avo), with the patched version being 3.32.0 (and >= 4.0.0.beta.41 for the v4 beta line). It was first published on June 2, 2026, and added to the GitHub Advisory Database on July 9, 2026, with a CVSS v3.1 base score of 6.5 (Medium) (GitHub Advisory, Avo Advisory).
The root cause is classified as CWE-862 (Missing Authorization) and CWE-863 (Incorrect Authorization). The vulnerable code path is Avo::AttachmentsController#create (app/controllers/avo/attachments_controller.rb:9-24), which calls ActiveStorage::Blob.create_and_upload! and attaches the blob to the target record before performing any authorization check — it never invokes @resource.authorization.authorize_action("upload_?", ...) or authorize_action("update?", ...). This is asymmetric with the destroy action in the same controller, which correctly calls authorized_to :delete before proceeding. An attacker exploits this by directly POSTing to POST /<avo-root>/avo_api/resources/:resource_name/:id/attachments/ with a crafted file payload and attachment_key parameter, bypassing any Pundit or custom authorization client that would otherwise deny the upload (GitHub Advisory, Avo Advisory).
Successful exploitation allows an authenticated but restricted Avo user to replace or inject attacker-controlled attachment content (binary data, filename, content-type) on any record reachable through the Avo API, even when record-level and field-level policies deny the operation. For has_one_attached fields, this means complete replacement of a protected attachment; for has_many_attached fields, arbitrary additions to the attachment collection. Additionally, the key-based/Trix upload flow can persist orphaned blobs and return accessible URLs without any record association, creating an uncontrolled blob storage path. The impact is primarily an integrity violation; confidentiality and availability are not directly affected (GitHub Advisory).
A proof-of-concept request spec was developed and confirmed against Avo 3.31.2 (commit 46aa6b3bc9e3283110c39e58cfec8bb95adc1897), demonstrating that direct POST requests to the attachment endpoint succeed without invoking the authorization service at all. Exploitation requires only low-privilege authenticated access to the Avo interface — no administrator role is needed beyond whatever coarse route-level guard the host application applies. There is no evidence of in-the-wild exploitation, no known public exploit kit weaponization, and no CISA KEV catalog listing as of the advisory date. EPSS score data is not yet available for this CVE (GitHub Advisory, Avo Advisory).
cover_photo or attachments) that is protected by an upload policy.POST /<avo-root>/avo_api/resources/<resource_name>/<record_id>/attachments/ with parameters: file (the file to upload), filename (desired filename), and attachment_key (the target association name, e.g., cover_photo).Avo::AttachmentsController#create action will call ActiveStorage::Blob.create_and_upload! and attach the blob without invoking any upload_? or update? policy check.upload_cover_photo? or upload_attachments? return false (GitHub Advisory, Avo Advisory).POST requests to /<avo-root>/avo_api/resources/<resource_name>/<id>/attachments/ from users or sessions that are not expected to perform file uploads; requests originating from non-admin user sessions to this endpoint.Avo::AttachmentsController#create actions completed (HTTP 200) for users whose roles should be restricted from uploading; absence of any authorize_action log entries associated with these upload requests.active_storage_attachments and active_storage_blobs records linked to protected records, created at times or by users inconsistent with normal administrative activity (GitHub Advisory).Upgrade the avo gem to version 3.32.0 or later (stable), or >= 4.0.0.beta.41 for v4 beta users — the fix was introduced in PR #4520 by the remediation developer Paul-Bob (Avo v3.32.0 Release). As an immediate workaround prior to upgrading, restrict Avo route access so that only fully trusted administrators can reach the Avo interface. Applications requiring a code-level interim fix can monkey-patch Avo::AttachmentsController#create to call the appropriate authorize_action("upload_<field>?", ...) check before ActiveStorage::Blob.create_and_upload! is invoked; any such patch should be tested against the application's authorization client and upload UI flows (GitHub Advisory, Avo Advisory).
The vulnerability was reported by security researcher tarryGrain0 and remediated by Avo maintainer Paul-Bob, who published the advisory on June 2, 2026, and released the fix in v3.32.0 the same day. No significant broader media coverage or notable external researcher commentary has been identified beyond the GitHub advisory thread (GitHub Advisory, Avo v3.32.0 Release).
Source: This report was generated using AI
Free Vulnerability Assessment
Evaluate your cloud security practices across 9 security domains to benchmark your risk level and identify gaps in your defenses.
Get a personalized demo
"Best User Experience I have ever seen, provides full visibility to cloud workloads."
"Wiz provides a single pane of glass to see what is going on in our cloud environments."
"We know that if Wiz identifies something as critical, it actually is."