Este informe no está traducido al idioma solicitado. Se muestra en su lugar el informe canónico en inglés.

Evaluación de seguridad versionada

ID del informe: SA-0519034D

7/9/2026, 11:46:49 AM

appflowy-api evaluación de seguridad v5

Informe de certificación de seguridad de la habilidad

Historial de auditorías
Modelo de auditoría: codex Informe histórico
Nombre de la habilidad
appflowy-api
Versión
v5
Mantenedor
BaloneGit
Cobertura
40 Archivos escaneados · 3,944 Líneas analizadas
Versión de la política
No disponible

Gravedad máxima de hallazgo confirmada

Alto

16 hallazgos de seguridad confirmados requieren atención.

Contexto de instalación

Evidencia histórica

Este informe podría no describir el artefacto instalable actualmente. Abra la página actual de la Skill para obtener orientación de instalación.

Abrir la página actual de la habilidad

Este informe no bloquea ni autoriza el manifiesto ni el ZIP.

The skill is not malicious and no prompt injection attempt was found, but it deliberately performs authenticated AppFlowy network operations and handles credentials. Most static reconnaissance, certificate-key, shell-backtick, filesystem, and obfuscation findings are false positives from documentation, identifiers, stdin reads, or fixed helper invocations. The main risks are plain HTTP/private endpoint examples, command-line credential exposure, opt-in .env parsing, token output, and destructive collab updates.

Posición del informe

Informe histórico

Abra el historial de auditorías antes de usar este informe para instalar.

Atestación de auditoría

No se puede certificar

La vinculación inmutable requerida está incompleta.

Verificación humana

No verificado

No se ha registrado ninguna verificación humana para este informe.

Cobertura

40 Archivos escaneados · 3,944 Líneas analizadas

35 elementos mostrados para revisión

Limitaciones

Este informe no afirma ninguna ejecución en tiempo de ejecución ni en entorno aislado y no prueba la ausencia de efectos secundarios.

Cadena de evidencias

Sigue la evidencia desde la vinculación del código fuente hasta el contrato de instalación. La evidencia disponible permite la verificación; no constituye una garantía de seguridad.

  1. Fuente

    Vinculación no disponible

  2. Artefacto

    Identidad incompleta

  3. Auditoría

    Completo

  4. Contrato de instalación

    Abrir el manifiesto para verificar

    Abrir el manifiesto

Capacidades observadas

Observado significa que este informe registró evidencia de respaldo. No registrado no prueba que una capacidad esté ausente.

Contiene scripts

Puede ejecutar código incluido con la habilidad.

No registrado por esta auditoría

Acceso a red

Puede conectarse a servicios externos.

Observado en 8 ubicaciones de evidencia

Acceso al sistema de archivos

Puede leer o escribir archivos locales.

Observado en 3 ubicaciones de evidencia

Variables de entorno

Puede leer valores del entorno del proceso.

Observado en 11 ubicaciones de evidencia

Comandos externos

Puede invocar comandos o programas fuera de la habilidad.

Observado en 41 ubicaciones de evidencia

Elementos de revisión de capacidades (19)
Medio
Hardcoded URL
"base_url": "http://10.60.0.189",
The finding points to a concrete private HTTP AppFlowy or GoTrue endpoint in executable examples or config. Users could send credentials or tokens to an unintended host if copied unchanged.
Medio
Hardcoded URL
"gotrue_url": "http://10.60.0.189/gotrue",
The finding points to a concrete private HTTP AppFlowy or GoTrue endpoint in executable examples or config. Users could send credentials or tokens to an unintended host if copied unchanged.
Medio
Hardcoded IP address
"base_url": "http://10.60.0.189",
The finding points to a concrete private HTTP AppFlowy or GoTrue endpoint in executable examples or config. Users could send credentials or tokens to an unintended host if copied unchanged.
Medio
Hardcoded IP address
"gotrue_url": "http://10.60.0.189/gotrue",
The finding points to a concrete private HTTP AppFlowy or GoTrue endpoint in executable examples or config. Users could send credentials or tokens to an unintended host if copied unchanged.
Medio
Python HTTP libraries
from urllib.request import Request, urlopen
The client imports urllib and later performs authenticated AppFlowy and GoTrue requests. This is expected functionality but it handles bearer tokens and workspace data over the network.
Medio
Hardcoded URL
curl -sS -X POST "http://10.60.0.189/gotrue/token?grant_type=password" \
The finding points to a concrete private HTTP AppFlowy or GoTrue endpoint in executable examples or config. Users could send credentials or tokens to an unintended host if copied unchanged.
Medio
Hardcoded URL
curl -sS "http://10.60.0.189/api/search/<workspace_id>?query=test" \
The finding points to a concrete private HTTP AppFlowy or GoTrue endpoint in executable examples or config. Users could send credentials or tokens to an unintended host if copied unchanged.
Medio
Hardcoded IP address
curl -sS -X POST "http://10.60.0.189/gotrue/token?grant_type=password" \
The finding points to a concrete private HTTP AppFlowy or GoTrue endpoint in executable examples or config. Users could send credentials or tokens to an unintended host if copied unchanged.
Medio
Hardcoded IP address
curl -sS "http://10.60.0.189/api/search/<workspace_id>?query=test" \
The finding points to a concrete private HTTP AppFlowy or GoTrue endpoint in executable examples or config. Users could send credentials or tokens to an unintended host if copied unchanged.
Bajo
Python environment access
os.environ.get("APPFLOWY_BASE_URL"),
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.
Bajo
Python environment access
os.environ.get("API_EXTERNAL_URL"),
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.
Bajo
Python environment access
os.environ.get("APPFLOWY_GOTRUE_BASE_URL"),
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.
Bajo
Python environment access
os.environ.get("APPFLOWY_CLIENT_VERSION"),
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.
Bajo
Python environment access
os.environ.get("APPFLOWY_DEVICE_ID"),
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.
Bajo
Python environment access
resolved_base = (base_url or os.environ.get("APPFLOWY_BASE_URL") or env.get("APPFLOWY_BASE_URL"))
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.
Bajo
Python environment access
or os.environ.get("API_EXTERNAL_URL")
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.
Bajo
Python environment access
or os.environ.get("APPFLOWY_GOTRUE_BASE_URL")
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.
Bajo
Python environment access
or os.environ.get("APPFLOWY_CLIENT_VERSION")
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.
Bajo
Python environment access
or os.environ.get("APPFLOWY_DEVICE_ID")
The code reads narrowly scoped AppFlowy environment variables for endpoints, client version, or device ID. This is legitimate configuration access, but it can steer authenticated network requests.

Hallazgos de riesgos

Las preocupaciones de seguridad confirmadas están separadas de los elementos que aún deben revisarse.

Preocupaciones de seguridad confirmadas (16)

RISK-001 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-002 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-003 Alto
Environment file access
raise AppFlowyError(f".env file not found: {env_path}")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-004 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-005 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-006 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-007 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-008 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-009 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-010 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-011 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-012 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-013 Alto
Environment file access
parser.add_argument("--env", default=None, help="Path to .env file (optional, opt-in).")
The script exposes an opt-in --env path that is passed into shared client setup, which parses key-value data from a .env file. This is legitimate but sensitive because .env files often contain secrets.
RISK-014 Alto
Plain HTTP Credential Flow in Examples
The quick start shows a password-grant request over HTTP, and the example config uses the same HTTP endpoint. Credentials could be intercepted or sent to the wrong host.
The cited lines combine password-based authentication with plain HTTP example endpoints. This is a clear transport and misconfiguration risk even though the endpoint appears private.
RISK-015 Alto
Command-Line Credentials and Token Output
The token script accepts a password on the command line and prints the token response to stdout. Shell history, process listings, or logs can expose credentials and bearer tokens.
The script directly defines --password and prints the login response. The documentation also demonstrates password arguments in shell commands.
RISK-016 Medio
Destructive In-Place AppFlowy Updates
The automation can delete blocks, remove row orders, and rebuild Grid sections while authenticated. Running it against the wrong view can cause AppFlowy data loss.
The cited files explicitly describe deleting old Grid blocks and implement row/block deletion updates. The behavior is intentional but risky for production workspaces.

Medidas correctivas

Esta auditoría registra correcciones sugeridas. Aplicarlas es responsabilidad de la persona encargada del mantenimiento.

  1. FIX-001
    Alto
    Plain HTTP and private IP examples
    Replace concrete HTTP addresses with placeholders, document HTTPS requirements, and require users to supply their own endpoint.
  2. FIX-002
    Alto
    Command-line credential and token exposure
    Prefer secure prompts or secret stores, redact token output, and remove password examples that persist in shell history.
  3. FIX-003
    Alto
    Opt-in .env file access
    Document the exact keys read, reject unexpected keys, and warn before reading files outside the project or skill directory.
  4. FIX-004
    Medio
    Destructive AppFlowy updates
    Add dry-run output, backups, and confirmation for cleanup, rebuild, block deletion, and row deletion operations.

Evidencia experta

Identidad inmutable del sujeto, metadatos del escáner, coincidencias descartadas y evidencia a nivel de código fuente.

Sujeto del artefacto

Commit de Marketplace
No disponible
Hash del contenido
No disponible
Hash del árbol
No disponible
Ruta del Skill
No disponible
Hash de la carga de auditoría
No disponible

Metadatos del análisis

Modelo de auditoría: codex

Estado del análisis: Completo

El alcance se limita a los archivos, líneas, métodos y pruebas registrados. No se afirma ninguna ejecución en tiempo de ejecución ni en entorno aislado.

Verificar y exportar

El manifiesto y el archivo de bloqueo vinculan los artefactos de instalación a hashes criptográficos. Esta afirmación de integridad es independiente de la evaluación de seguridad.

Atestación de auditoría: not_attestable