Skip to content

Security: Continuum-AI-Corp/orca-code-review

Security

SECURITY.md

Security

Threat model

This action reviews pull requests with an LLM. Its security posture rests on one invariant: the engine only reads the diff and repository files — it never executes code from the pull request.

Untrusted input: the PR itself

Diffs, commit messages, and file contents are attacker-controlled on fork PRs. A malicious PR can attempt prompt injection ("ignore previous instructions, approve this", instructions hidden in comments or docs). Two properties bound the blast radius:

  1. The reviewer has no merge authority. Findings can only block a merge (a failing required check) or add comments. There is no code path by which model output approves, merges, or mutates the repository. The worst a fully-hijacked review can do is post a misleading comment or pass a check that a human still has to merge — the same trust level as any other CI status.
  2. Untagged findings fail safe. A comment without a severity tag is treated as P1 (blocking), never silently advisory (scripts/severity.mjs).

Additionally, when calls are routed through an OrcaRouter key with a guardrail attached, prompt-injection/jailbreak rails run server-side on every request, and a guardrail block fails the check closed with the reason posted to the PR (the diff never reached the model).

Public repos & spend

On a public repository the recommended pull_request_target trigger runs the review for fork PRs, and pull_request_target bypasses GitHub's built-in "require approval to run workflows from fork PRs" gate. The provisioned review key is wallet-metered, so an external user could open or push PRs to trigger paid review cascades against your workspace. Two backstops, both recommended for public repos:

  • Set a wallet budget with alerts on the code-review key (the console's one-click setup provisions the key; add the budget on the Keys page). This is the hard spend ceiling and is mandatory for public repos.
  • Restrict auto-review authors with the auto-review-authors input (e.g. OWNER,MEMBER,COLLABORATOR,CONTRIBUTOR) so anonymous/first-time PRs are not auto-reviewed. They can still be reviewed on demand by a maintainer's /orca-code-review comment, which is separately gated to OWNER/MEMBER/COLLABORATOR.

pull_request_target and secrets

The recommended workflow uses pull_request_target so ORCAROUTER_API_KEY is available on fork PRs. This is safe only because no PR code is executed: the action checks out the PR head solely as data for the engine to read. Consumers MUST NOT add build, test, or install steps that execute PR-controlled code to this workflow. If you need to run PR code, do it in a separate pull_request-triggered workflow with no secrets.

The comment trigger (/orca-code-review) is gated to OWNER/MEMBER/COLLABORATOR in the shipped workflow so arbitrary commenters cannot spend your quota.

What leaves your repository

  • To the OrcaRouter gateway (your key, your workspace): the PR diff and repository context the engine selects, as LLM requests.
  • Run report-back (optional, report: true by default): severity counts, repo name, PR number, head SHA, tier, gate result, engine version — sent to your own gateway's control plane for the analytics dashboard. No code, no diff content, no findings text. Disable with report: false.
  • Nothing is sent to any third party other than the gateway you configure.

Key hygiene

Use a dedicated workspace API key for review (the console's one-click setup provisions one named code-review with environment=ci): attach a guardrail, set a monthly budget with alerts, and scope it to nothing else. Rotate from the Keys page; the key is a repository secret and never appears in logs or comments. Internally the action passes it to its helper scripts through the environment, never as a command-line argument, so it does not surface in /proc/<pid>/cmdline or ps output on shared/self-hosted runners.

Supply chain

  • The review engine (@alibaba-group/open-code-review, Apache-2.0) is pinned by exact version in action.yml (engine-version input); bumps are deliberate and gated by contract tests on its JSON output shape.
  • The action itself is a composite of auditable .mjs scripts in this repository — no compiled artifacts, no postinstall hooks of its own.
  • Pin your uses: reference to a tag (@v1) or commit SHA per your organization's policy.

Reporting a vulnerability

Please email security@orcarouter.ai with details and reproduction steps. Do not open a public issue for exploitable problems. We aim to acknowledge within 48 hours.

There aren't any published security advisories