Skip to content

Commit d6a43f5

Browse files
evantahlercursoragentgithub-actions[bot]nbarbettini
authored
Document the security reports we answer most often (#1221)
* docs: answer the security reports we see most often Explain the header, DNS, and OAuth questions that show up on security@arcade.dev, including why project membership, user ids, and default auth apps behave the way they do. * 🤖 Regenerate LLMs.txt * docs: move common security answers onto the research page Drop the standalone page. Remove the chat completions note and the marketing-site header guidance. * docs: drop the removed security reports page from llms.txt * Tighten common security report guidance * Resolve security FAQ style findings * Apply latest security FAQ review * Polish reviewed security guidance * Remove unused security report redirect * Apply batched suggestions from code review Co-authored-by: Nate Barbettini <nathanaelb@gmail.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Nate Barbettini <nathanaelb@gmail.com>
1 parent bc5b571 commit d6a43f5

2 files changed

Lines changed: 70 additions & 1 deletion

File tree

‎app/en/resources/security-research-program/page.mdx‎

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ We're interested in reports about:
2828
- Logic flaws affecting agent behavior
2929
- Issues that could compromise user data or agent integrity
3030

31+
A finding that shows one Arcade organization reading or changing another organization's tokens, secrets, or data is in scope. Send that.
32+
3133
## Reporting process
3234

3335
Please email <ContactEmail domain="arcade.dev" user="security">our security team</ContactEmail> with:
@@ -51,3 +53,70 @@ We'll acknowledge receipt within 72 hours and aim to provide an initial assessme
5153
While we're a small team with limited resources, we appreciate the effort researchers put into improving our security. We'll credit researchers (with permission) in our security updates and may provide modest rewards for significant findings on a case-by-case basis.
5254

5355
For questions about this program, please <ContactEmail domain="arcade.dev" user="security">contact our security team</ContactEmail>.
56+
57+
## Common questions
58+
59+
Researchers most often ask about mail authentication, DNS, and OAuth security details that relate to the Arcade data model.
60+
61+
### Arcade's DNS settings are intentional
62+
63+
Arcade manages email authentication with SPF, DKIM, and DMARC. The SPF record ends in `~all` (SoftFail), while DMARC uses `p=reject`. Receivers reject unaligned mail that claims to come from `arcade.dev`. Valimail manages this configuration.
64+
65+
Reports that only recommend `-all`, DNSSEC, RRSIG, or CAA describe hardening choices, not vulnerabilities. Include a demonstrated security impact if you believe the configuration is exploitable.
66+
67+
### Public discovery documents are public
68+
69+
`auth.arcade.dev/.well-known/openid-configuration` publishes standard OpenID metadata for clients. Its contents are not sensitive, and Arcade does not support dynamic client registration.
70+
71+
### A project API key is an administrator credential
72+
73+
Arcade Cloud isolates data by organization and by [project](/resources/glossary#project). Organizations and projects are trust boundaries. Project administrators and anyone with an API key share access to that project's users, brokered tokens, and secrets. They can also start authorization for those users. Invite only people you trust, and join projects you trust.
74+
75+
A project API key is a service-level credential It can start authorization and read tokens for that project's users by design to support offline and background workloads. A report that uses a project key to read data from the same project describes expected behavior.
76+
77+
### Projects scope user IDs
78+
79+
`user_id` is an opaque, authenticated-caller-supplied string in Arcade's data model. The same user ID value can appear in many projects, but user IDs are strictly local to each project. Using `ada@example.com` in one project does not grant access to records for `ada@example.com` in another project.
80+
81+
### User-facing (browser) OAuth flows require verification
82+
83+
To complete authorization, the [user verifier](/build/user-facing-agents/secure-auth-production) must use an API key from the project that started the flow and submit the same `user_id` supplied at the start. The user ID does not travel through the browser redirect.
84+
85+
### A custom auth provider replaces the platform provider for your tenant
86+
87+
You can add an auth provider whose ID matches a platform provider, such as `google`. Arcade then uses that OAuth client for authorization in your project, and its client ID appears in the authorization URL. The identity provider still validates the client and redirect URI.
88+
89+
A broken provider configuration can disrupt that project's tools. This reflects expected administrator access, not an outage.
90+
91+
### Default OAuth apps follow project membership
92+
93+
Arcade's default OAuth apps work with the [Arcade user verifier](/build/user-facing-agents/secure-auth-production#use-the-arcade-user-verifier) only. The verifier asks the end-user to sign in to an Arcade Cloud account that is a member of the project.
94+
95+
96+
For a multi-user production app, add your own OAuth client and a [custom user verifier](/build/user-facing-agents/secure-auth-production#build-a-custom-user-verifier). Default, Arcade.dev-branded apps are **only** meant for development, testing, and personal use.
97+
98+
Read [Confused deputy attacks on OAuth](https://www.arcade.dev/blog/arcade-proactively-addressed-coat-vulnerability-in-agentic-ai/) for background on OAuth-related account takeover and Arcade's controls.
99+
100+
### Secret names are public
101+
102+
Platform secret names are public so customers can replace defaults with their own values. Knowing a secret (key) name does not expose the secret's value.
103+
104+
An API response that returns secret values, or another organization's secret material, is a different finding. Send that.
105+
106+
### Health-check tokens authenticate the health check request only
107+
108+
Worker health checks use a credential limited to that check. Steady-state calls use a secret for the worker deployment.
109+
110+
Don't submit reports describing the health check request as weakly-authenticated; this is by design. Include evidence that the token succeeds on a real worker request, reaches another organization's data, or is a demonstrable SSRF leak.
111+
112+
### Plan limits are soft
113+
114+
Arcade Cloud uses soft plan limits and allows billing overages. Exceeding a listed limit does not indicate an authorization bypass.
115+
116+
### Archived examples
117+
118+
Archived example repositories are samples. A static scan of an archived repo, with no impact on Arcade Cloud, is outside this program.
119+
120+
### Files on a developer laptop
121+
122+
The Arcade CLI stores credentials on the machine where it runs. A local file-permission finding must expose another user's data or affect Arcade Cloud to fit this program.

‎public/llms.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<!-- git-sha: 41f63dddcd733afccdf0ed280d07651b32b7e88d generation-date: 2026-09-26T21:40:41.006Z -->
1+
<!-- git-sha: 80656a60758d5a639b608b244ac08d07df435b25 generation-date: 2026-10-02T04:42:34.687Z -->
22

33
# Arcade
44

0 commit comments

Comments
 (0)