Repository navigation
v5.8.4 - Agent and Atlas Scoping, Regex Compilation, Transport Hardening - #73
Merged
Merged
Conversation
Apply class policy and per-agent filters to semantic_search and MCP subscriptions, and resolve per-agent filter fields through declared properties. Refuse Parse Server internal fields across Atlas Search, vector, hybrid, and additional pipeline stages, including globs and escaped queryString fields. Stop compiling caller regex text with Ruby's Regexp. Validate agent $relatedTo and refuse operators inside __type values. Deny $jsonSchema, and refuse Parse::MongoDB.find inside Parse.with_session. Resolve one CLP schema snapshot per scoped read through the requesting app's client, failing closed when the schema is unresolvable. Refuse absolute request paths and Marshal-serialized caches, redact URL credentials, and harden webhook secrets and body limits. Strip credentials from LiveQuery and GraphQL output, start LiveQuery threads without inherited identity, sign cursor state, and validate MFA input. Raise the faraday floor, exclude vulnerable rack releases per branch, move the test stack to Parse Server 9.10.7 and Atlas Local 8.0.34, pin CI actions to commit SHAs, add a dependency audit job, and make the release gate wait for Gem Tests on the release commit.
A wildcard path glob whose literal prefix starts with "_" can only reach Parse Server internal columns, since Parse fields never start with an underscore. Test such globs against the credential columns on every class, matching the exact-path refusal. Globs that start with a wildcard still count credential columns only on _User and _Session.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Security patch
A security patch from an October 2026 review across the agent, MCP, Atlas Search, mongo-direct, transport, cache, webhook, LiveQuery, GraphQL, MFA, and cursor surfaces, with raised dependency floors and a release-workflow fix. CHANGELOG.md 5.8.4 has the full entry and the Behavior Notes.
Changes
Agent and MCP
semantic_searchapplies the agent'sclasses:allowlist, the CLPfindcheck, and per-agentfilters:, with filter fields resolved through declared properties (a declared server name such asPublicStateaddresses that column; an undeclared field raises).Hostheader (allowed_hosts:).$relatedTorequires a plain objectId and field-name key; operators inside__typevalues are refused. A blank master key counts as no master key.Atlas Search, vector search, and mongo-direct
queryStringfields (including escaped names), sort keys, highlights, autocomplete, and facet paths, for every caller, and in$setWindowFields,$densify,$fill,$bucket,$sortByCount, and top-level$searchstages.$groupon a protected field returned its value.$jsonSchemais denied;Parse::MongoDB.findis refused insideParse.with_session; declared pointer server names map to their_p_column.Parse::RegexSecurityno longer compiles caller pattern text with Ruby'sRegexp(Onigmo memory-safety fixes in Ruby 3.3.13, 3.4.12, and 4.0.9; GitLab-assigned CVE-2026-89078 and related).Transport, caching, webhooks, LiveQuery
PARSE_REQUIRE_HTTPSis parsed case-insensitively; URL credentials are redacted.allow_marshal_cache: true._User/_Sessionevents drop credentials; LiveQuery threads start without inherited identity and never gain the master key.Parse.without_ambient_identitydocuments and implements the identity lifetime contract.GraphQL, MFA, cursors
exclude_fields:,protected_fields:), and the docs state that resolvers must enforce authorization.Parse::CursorHMAC signing with a 32-byte minimum secret andexpected_class:;trusted:for unsigned trusted persistence, which cannot bypass a configured secret.mfa_required?requires a String username;Parse::MFA.verifytakesafter:for reuse protection.Dependencies, CI, and release
faraday2.14.3 or later;rack2.2.23 or later with every released vulnerable 3.0, 3.1, and 3.2 version excluded, keeping Rack 2.2 supported.ruby/setup-ruby1.334.0 installs the patched Rubies for the 3.3, 3.4, and 4.0 legs (3.2 remains for legacy compatibility and is end of life); a dependency audit job runs on every push.Testing
bundle exec rake test:unitpasses on this commit.security_584_integration_test.rb,security_584_atlas_integration_test.rb) pass against Parse Server 9.10.7 and Atlas Local 8.0.34 with no skips, covering cross-tenant denial alongside successful reads.