diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..298e5f2f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,37 @@ +version: 2 +updates: + # Maintain GitHub Actions dependencies + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 10 + commit-message: + prefix: "ci(deps)" + + # Maintain Python dependencies for root package + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 10 + commit-message: + prefix: "fix(deps)" + + # Maintain npm dependencies for Mastra adapter + - package-ecosystem: "npm" + directory: "/adapters/mastra" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + commit-message: + prefix: "fix(deps)" + + # Maintain npm dependencies for Vercel AI adapter + - package-ecosystem: "npm" + directory: "/adapters/vercel-ai" + schedule: + interval: "weekly" + open-pull-requests-limit: 5 + commit-message: + prefix: "fix(deps)" diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml new file mode 100644 index 00000000..2a3c75be --- /dev/null +++ b/.github/workflows/codeql.yml @@ -0,0 +1,44 @@ +name: "CodeQL Analysis" + +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] + schedule: + - cron: "0 6 * * 1" + +permissions: + contents: read + actions: read + security-events: write + +jobs: + analyze: + name: Analyze (${{ matrix.language }}) + runs-on: ubuntu-latest + timeout-minutes: 360 + + strategy: + fail-fast: false + matrix: + include: + - language: python + build-mode: none + - language: javascript-typescript + build-mode: none + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: ${{ matrix.language }} + build-mode: ${{ matrix.build-mode }} + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:${{ matrix.language }}" diff --git a/.github/workflows/dependency-scan.yml b/.github/workflows/dependency-scan.yml new file mode 100644 index 00000000..07710030 --- /dev/null +++ b/.github/workflows/dependency-scan.yml @@ -0,0 +1,34 @@ +name: Dependency Security Audit + +on: + push: + branches: [ "**" ] + pull_request: + schedule: + - cron: "0 4 * * 1" + +permissions: + contents: read + +jobs: + audit: + name: Scan Python Dependencies + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up Python + uses: actions/setup-python@v5 + with: + python-version: "3.12" + + - name: Install pip-audit and dependencies + run: | + python -m pip install --upgrade pip + pip install pip-audit . + + - name: Run pip-audit vulnerability scan + run: | + pip-audit diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml new file mode 100644 index 00000000..1cc8db4d --- /dev/null +++ b/.github/workflows/scorecard.yml @@ -0,0 +1,46 @@ +name: OpenSSF Scorecard + +on: + branch_protection_rule: + schedule: + - cron: "30 1 * * 6" + push: + branches: [ "main" ] + workflow_dispatch: + +permissions: read-all + +jobs: + analysis: + name: Scorecard analysis + runs-on: ubuntu-latest + permissions: + security-events: write + id-token: write + contents: read + actions: read + + steps: + - name: "Checkout code" + uses: actions/checkout@v4 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@v2.4.0 + with: + results_file: results.sarif + results_format: sarif + publish_results: true + + - name: "Upload artifact" + uses: actions/upload-artifact@v4 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: results.sarif diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..0db29274 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,66 @@ +# Security Policy + +Prismor is a security utility for AI coding agents. We treat vulnerabilities in this repository and our runtime components with the highest priority. + +--- + +## Supported Versions + +Only the latest active minor release line receives security updates and vulnerability patches. + +| Version | Supported | Notes | +| ------- | --------- | ----------------------------------------- | +| 1.x | Yes | Actively supported with security updates. | +| < 1.0 | No | Legacy / pre-release — no longer patched. | + +We recommend users and downstream integrators always update to the latest release of `prismor` from PyPI or GitHub. + +--- + +## Reporting a Vulnerability + +If you discover a security vulnerability in Prismor, please **do not open a public GitHub issue or discuss it publicly**. Instead, report it through one of the private channels below: + +### 1. GitHub Private Vulnerability Reporting (Preferred) +Submit a report privately via GitHub: +**[Report a vulnerability](https://github.com/PrismorSec/prismor/security/advisories/new)** + +### 2. Email +Send an encrypted or private email to: +**security@prismor.dev** + +Please include: +- A clear description of the vulnerability and its potential impact. +- Step-by-step reproduction instructions or a minimal Proof of Concept (PoC). +- The affected version(s), platform/OS, and agent environment (e.g., Claude Code, Cursor, Gemini CLI). +- Any proposed remediation or patch, if available. + +--- + +## Our Response Process & SLA + +When you submit a vulnerability report: + +1. **Acknowledgment**: We will acknowledge receipt of your report within **48 hours**. +2. **Triage & Assessment**: We will assess the severity and impact within **5 business days** and keep you updated on progress. +3. **Fix & Verification**: A patch will be developed and verified in a private security advisory branch. +4. **Coordinated Disclosure**: We will coordinate with you on the release date and credit your contribution in the security advisory and release notes. + +We kindly ask that you maintain responsible disclosure and give us reasonable time to release a patch before making any information public. + +--- + +## Scope & Out-of-Scope + +### In Scope +- Vulnerabilities that allow bypassing runtime policy enforcement without authorization. +- Secret leaks or failures in the secret cloaking prevention layer (`@@SECRET:...@@`). +- Flaws in memory guard integrity or prompt-injection defense mechanisms. +- Remote Code Execution (RCE) or Privilege Escalation vulnerabilities in runtime hooks and adapters. + +### Out of Scope +- Attacks requiring physical access to an unlocked, root-compromised machine. +- Social engineering attacks against project maintainers. +- Denial of Service attacks against public demonstration endpoints without functional exploitability. + +Thank you for helping keep Prismor and the AI agent ecosystem safe!