Ctrl K
ComunidadGuías…

SECURITY.md

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
# Security Policy

## Reporting a vulnerability

If you find a security vulnerability in Morning Signal, please report it privately:

- **Preferred:** open a [GitHub Security Advisory](https://github.com/nousergon/morning-signal/security/advisories/new). This keeps the discussion private until a fix ships.
- **Alternative:** email `security@nousergon.ai` with a description and reproduction steps.

Please **do not** open a public issue for security reports. I aim to acknowledge within 72 hours and ship a fix or mitigation within 14 days for high-severity issues.

## Scope

Morning Signal is a self-hosted podcast-generation engine. The sensitive surface is **credential handling and the cloud resources it touches**. In scope:

- **Credential exposure:** any path that leaks the Anthropic API key, AWS credentials, or the Google Cloud TTS key — through logs, error messages, the generated script/audio, telemetry files, or the published feed.
- **Injection / escalation:** command injection (the pipeline shells out to `ffmpeg`), path traversal in episode/feed file handling, or unsafe handling of model output that reaches a shell or filesystem path.
- **S3 / publish flaws:** any path that writes outside the configured bucket/prefix, or that makes private artifacts world-readable unintentionally.
- **Supply-chain:** a dependency or install path that could execute untrusted code during `init` / `generate`.

Out of scope:

- DoS via traffic volume (single-user self-host infrastructure).
- Cost-runaway from your own configuration (set your own provider spend limits).
- Vulnerabilities in upstream dependencies not yet publicly disclosed — report those upstream first.
- Issues requiring local filesystem/process access (if your machine is compromised, the threat model has already failed — your `.env` and AWS creds live there).

## Threat model assumptions

- **Single-user self-host.** There is no multi-user model in the public engine.
- **Credentials live in `.env` (local) or AWS SSM Parameter Store (deployed)**, and AWS access is via your own IAM principal (or an AssumeRole in the deployed path). Protect them with filesystem/SSM permissions; rotate if exposed.
- **The model's output is treated as untrusted text** for TTS but is not executed; if you extend the pipeline to act on model output, re-evaluate this assumption.
- **HTTPS** is assumed for all provider and S3 traffic.

## Hardening recommendations for self-hosters

- Scope the IAM principal to least privilege (Polly synthesize + the one S3 bucket/prefix + the specific SSM parameters), as in the `.iam-staging/` example policies.
- Keep `.env` at `600` and never commit it; prefer SSM SecureStrings for any non-local deploy.
- Set provider-side spend limits (Anthropic, AWS, GCP) — the character-budget circuit-breaker bounds per-episode cost, but account-level limits are your backstop.