CVE-2023-34102
Possible unsafe reflection / partial denial of service in avo
Avo is an open source ruby on rails admin panel creation framework. The polymorphic field type stores the classes to operate on when updating a record with user input, and does not validate them in the back end. This can lead to unexpected behavior, remote code execution, or application crashes when viewing a manipulated record. This issue has been addressed in commit ec117882d which is expected to be included in subsequent releases. Users are advised to limit access to untrusted users until a new release is made.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- Low
- User interaction
- None
What an attacker can affect
- Confidentiality
- Low
- Integrity
- High
- Availability
- High
Exploit likelihood
What each source reports
CVE List Score used
8.3
Possible unsafe reflection / partial denial of service in avo
Avo is an open source ruby on rails admin panel creation framework. The polymorphic field type stores the classes to operate on when updating a record with user input, and does not validate them in the back end. This can lead to unexpected behavior, remote code execution, or application crashes when viewing a manipulated record. This issue has been addressed in commit ec117882d which is expected to be included in subsequent releases. Users are advised to limit access to untrusted users until a new release is made.
- Record
CVE-2023-34102- CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H - Weakness
- CWE-20
- Updated
- 2026-11-02
EUVDEUVD-2023-1744
8.3
Avo is an open source ruby on rails admin panel creation framework. The polymorphic field type stores the classes to operate on when updating a record with user input, and does not validate them in the back end. This can lead to unexpected behavior, remote code execution, or application crashes when viewing a manipulated record. This issue has been addressed in commit ec117882d which is expected to be included in subsequent releases. Users are advised to limit access to untrusted users until a new release is made.
- Record
EUVD-2023-1744- CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H - Updated
- 2026-11-03
GitHub AdvisoriesGHSA-86h2-2g4g-29qx
8.3
avo possible unsafe reflection / partial DoS vulnerability
Summary
The polymorphic field type stores the classes to operate on when updating a record with user input, and does not validate them in the back end. This can lead to unexpected behavior, remote code execution, or application crashes when viewing a manipulated record.
Details
After reviewing the polymorphic field implementation and performing some black box approaches, we identified a potential security issue related to the use of safe_constantize / constantize. This Rails functionality is capable of searching for classes within the Rails context and returning the class for further use. Because Avo does not validate user input when updating or creating a new polymorphic resource, it is possible to create database entries with completely different or invalid class names than the preselected ones. Avo assumes that the class specified by the user request is a valid one and attempts to work with it, which may result in dangerous behavior and code execution.
PoC
In the test scenario we choose the demo app and the review resource which has a polymorphic reviewable field.
Intercepting the request and switching the review[reviewable_type] from “Fish” to “File” which is a real class inside Rails
Corrupting the database with unusable classes will cause a crash at the application while viewing the new record or the index view (partial DoS)
Manual delete the corrupted resource in order to recover the applications functionality
Of course it is possible to use other class names or namespaces. The local development environment displays the backend error message when visiting a corrupted record. Avo is trying to apply a scope to this class that does not exist.
Specifying an invalid class name in the parameter will cause the application to crash again while trying constanize the provided string
Impact
The final exploitation of this vulnerability requires more time than is provided in this assessment, but initial testing of the post request shows the potential critical risk. The classes could be instantiated at any point in the code and this could also lead to code execution.
Recommendation
Avo should be configured to never trust user-supplied input, especially when defining classes for records. In this particular case, Avo can evaluate the options list given for the polymorphic field and only allow strings from that list. With this white-list approach, an attacker cannot supply unintended classes.
- Record
GHSA-86h2-2g4g-29qx- CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H - Weakness
- CWE-20, CWE-470
- Updated
- 2026-11-02
NVD
8.3
Avo is an open source ruby on rails admin panel creation framework. The polymorphic field type stores the classes to operate on when updating a record with user input, and does not validate them in the back end. This can lead to unexpected behavior, remote code execution, or application crashes when viewing a manipulated record. This issue has been addressed in commit ec117882d which is expected to be included in subsequent releases. Users are advised to limit access to untrusted users until a new release is made.
- Record
CVE-2023-34102- CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H - CVSS 3.1
- 8.8 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H - Weakness
- CWE-20, CWE-470
- Updated
- 2026-11-02
OSV
8.3
Possible unsafe reflection / partial denial of service in avo
Avo is an open source ruby on rails admin panel creation framework. The polymorphic field type stores the classes to operate on when updating a record with user input, and does not validate them in the back end. This can lead to unexpected behavior, remote code execution, or application crashes when viewing a manipulated record. This issue has been addressed in commit ec117882d which is expected to be included in subsequent releases. Users are advised to limit access to untrusted users until a new release is made.
- Record
CVE-2023-34102- CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H - Weakness
- CWE-20
- Updated
- 2026-11-02
OSVGHSA-86h2-2g4g-29qx
8.3
avo possible unsafe reflection / partial DoS vulnerability
Summary
The polymorphic field type stores the classes to operate on when updating a record with user input, and does not validate them in the back end. This can lead to unexpected behavior, remote code execution, or application crashes when viewing a manipulated record.
Details
After reviewing the polymorphic field implementation and performing some black box approaches, we identified a potential security issue related to the use of safe_constantize / constantize. This Rails functionality is capable of searching for classes within the Rails context and returning the class for further use. Because Avo does not validate user input when updating or creating a new polymorphic resource, it is possible to create database entries with completely different or invalid class names than the preselected ones. Avo assumes that the class specified by the user request is a valid one and attempts to work with it, which may result in dangerous behavior and code execution.
PoC
In the test scenario we choose the demo app and the review resource which has a polymorphic reviewable field.
Intercepting the request and switching the review[reviewable_type] from “Fish” to “File” which is a real class inside Rails
Corrupting the database with unusable classes will cause a crash at the application while viewing the new record or the index view (partial DoS)
Manual delete the corrupted resource in order to recover the applications functionality
Of course it is possible to use other class names or namespaces. The local development environment displays the backend error message when visiting a corrupted record. Avo is trying to apply a scope to this class that does not exist.
Specifying an invalid class name in the parameter will cause the application to crash again while trying constanize the provided string
Impact
The final exploitation of this vulnerability requires more time than is provided in this assessment, but initial testing of the post request shows the potential critical risk. The classes could be instantiated at any point in the code and this could also lead to code execution.
Recommendation
Avo should be configured to never trust user-supplied input, especially when defining classes for records. In this particular case, Avo can evaluate the options list given for the polymorphic field and only allow strings from that list. With this white-list approach, an attacker cannot supply unintended classes.
- Record
GHSA-86h2-2g4g-29qx- CVSS 3.1
- 8.3 High
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:H - Weakness
- CWE-20, CWE-470
- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
avoRubyGems |
through 2.33.2 | 2.33.3 |
avoRubyGems |
3.0.0.pre1 to 3.0.0.pre12 | None known |
avoRubyGems |
before 2.33.3, plus listed versions 0.2.00.2.10.2.20.2.30.2.4 Show 45 moreShow less0.2.50.3.10.3.20.4.10.4.100.4.20.4.30.4.40.4.50.4.60.4.70.4.80.4.90.5.0.beta10.5.0.beta100.5.0.beta110.5.0.beta120.5.0.beta130.5.0.beta140.5.0.beta150.5.0.beta20.5.0.beta30.5.0.beta40.5.0.beta50.5.0.beta60.5.0.beta70.5.0.beta80.5.0.beta91.0.01.0.11.0.21.0.41.0.51.1.01.1.0.pre.11.10.01.10.11.10.21.10.31.11.01.11.11.11.21.11.31.11.41.11.5 |
2.33.3 |
avoRubyGems |
3.0.0.pre1 to 3.0.0.pre12, plus listed versions 3.0.0.pre103.0.0.pre113.0.0.pre23.0.0.pre33.0.0.pre4 Show 5 moreShow less3.0.0.pre53.0.0.pre63.0.0.pre73.0.0.pre83.0.0.pre9 |
None known |
History
| Recorded | Changed | Sources |
|---|---|---|
| aliases, published | EUVD | |
| first indexed | CVE List, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2023-34102 is a high vulnerability (CVSS 8.3) in Avo-hq Avo, published June 5, 2023. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 1.61%, the 76th percentile. Fixed in avo 2.33.3.
References
github.com/avo-hq/avo/security/advisories/GHSA-86h2-2g4g-29qx
github.com/avo-hq/avo/commit/ec117882ddb1b519481bdd046dc3cfa4474e6e17
nvd.nist.gov/vuln/detail/CVE-2023-34102
github.com/avo-hq/avo/releases/tag/v2.33.3
github.com/rubysec/ruby-advisory-db/blob/master/gems/avo/CVE-2023-34102.yml
github.com/advisories/GHSA-86h2-2g4g-29qx
github.com/CVEProject/cvelistV5/tree/main/cves/2023/34xxx/CVE-2023-34102.json
github.com/avo-hq/avo
Left out here: 266 versions. The JSON record has them.