GHSA-pfcq-4gjr-6gjm · Severity: high · Ecosystem: rust — RustFS: Missing admin authorization on notification target endpoints allows unauthenticated configuration of event webhooks
RustFS is a distributed object storage system built in Rust. Prior to 1.0.0-alpha.94, all four notification target admin API endpoints in `rustfs/src/admin/handlers/event.rs` use a `check_permissions` helper that validates authentication only (access key + session token), without performing any admin-action authorization via `validate_admin_request`. Every other admin handler in the codebase correctly calls `validate_admin_request` with a specific `AdminAction`. This is the only admin handler file that skips authorization. A non-admin user can overwrite a shared admin-defined notification target by name, causing subsequent bucket events to be delivered to an attacker-controlled endpoint. This enables cross-user event interception and audit evasion. 1.0.0-alpha.94 contains a patch.
Conclusion & alert: CVE-2026-40937 is rated Low Risk (38.6/100): CVSS High severity, with low exploitation likelihood (EPSS 0.05%). Mandatory action: Monitor for updates and reassess as exploit intelligence or EPSS changes.
Risk is dynamic; we continuously reassess and refresh what is shown on this page as upstream context changes.
EPSS lead: Daily EPSS estimates relative likelihood of exploitation; percentile ranks this CVE among scored vulnerabilities (higher = more severe relative rank).
| # | Date | Old EPSS score | New EPSS score | Delta (New - Old) |
|---|---|---|---|---|
| 1 | 2026-04-23 | — | 0.05% | — |
Full EPSS history (1 record total)
CVSS metrics for this CVE.
| Base score | Version | Severity | Vector | Exploitability | Impact | Score source |
|---|---|---|---|---|---|---|
| 8.3 | 3.1 | HIGH |
|
2.8 | 5.5 | [email protected] |
GHSA-pfcq-4gjr-6gjm · Severity: high · Ecosystem: rust — RustFS: Missing admin authorization on notification target endpoints allows unauthenticated configuration of event webhooks
| Vendor | Product | Version | Raw CPE |
|---|---|---|---|
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha1:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha10:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha11:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha12:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha13:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha14:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha15:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha16:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha17:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha18:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha19:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha2:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha20:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha21:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha22:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha23:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha24:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha25:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha26:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha27:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha28:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha29:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha3:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha30:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha31:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha32:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha33:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha34:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha35:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha36:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha37:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha38:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha39:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha4:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha40:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha41:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha42:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha43:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha44:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha45:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha46:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha47:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha48:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha49:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha5:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha50:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha51:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha52:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha53:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha54:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha55:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha56:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha57:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha58:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha59:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha6:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha60:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha61:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha62:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha63:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha64:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha65:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha66:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha67:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha68:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha69:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha7:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha70:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha71:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha72:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha73:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha74:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha75:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha76:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha77:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha78:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha79:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha8:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha80:*:*:*:rust:*:* |
| rustfs | rustfs | 1.0.0 | cpe:2.3:a:rustfs:rustfs:1.0.0:alpha81:*:*:*:rust:*:* |
| URL | Tags |
|---|---|
| https://github.com/rustfs/rustfs/releases/tag/1.0.0-alpha.94 | Product Release Notes |
| https://github.com/rustfs/rustfs/security/advisories/GHSA-pfcq-4gjr-6gjm | Mitigation Vendor Advisory |