ApostropheCMS's apos.util.set() lets an authenticated editor pollute Object.prototype, and a confirmed gadget turns that into an authorization bypass for every unauthenticated visitor
apos.util.set() traverses dot-notation paths without rejecting __proto__, so an authenticated editor can smuggle a poisoned key through the $pullAll patch operator and write directly onto Object.prototype; a confirmed gadget in publicApiCheck() then reads that polluted property and disables authorization on every piece-type REST endpoint, for every subsequent unauthenticated request, until the Node process restarts (GHSA-6h5j, CVSS 9.1). It shipped in the same five-minute disclosure window as two lower-severity Apostrophe siblings — @apostrophecms/seo injects unsanitized Google Analytics/GTM IDs straight into an inline <script> body for stored XSS on every page (GHSA-wf43, CVSS 8.7), and @apostrophecms/file's pretty-URL handler builds its upstream fetch from the raw Host header, letting an unauthenticated caller pivot the process into internal-network SSRF when uploads use local storage (GHSA-34pj). Patch apostrophe core and @apostrophecms/seo first — the prototype-pollution bug doesn't just compromise one editor's session, it turns off auth checks for everyone until you restart the process.