Skip to content

Security: flytohub/flyto-core

SECURITY.md

Security Policy

Supported Versions

We release patches for security vulnerabilities in the following versions:

Version Supported
1.x.x
< 1.0

Reporting a Vulnerability

We take security seriously. If you discover a security vulnerability within Flyto2 Core, please report it responsibly.

How to Report

Please do NOT report security vulnerabilities through public GitHub issues.

Instead, please report them via email to:

security@flyto.dev

Or, if you prefer, you can use GitHub's private vulnerability reporting feature:

  1. Go to the Security tab of this repository
  2. Click "Report a vulnerability"
  3. Fill out the form with details about the vulnerability

What to Include

Please include the following information in your report:

  • Type of vulnerability (e.g., SQL injection, XSS, authentication bypass)
  • Location of the affected source code (file path and line numbers if possible)
  • Step-by-step instructions to reproduce the issue
  • Proof-of-concept or exploit code (if possible)
  • Impact assessment - what an attacker could achieve
  • Suggested fix (if you have one)

Response Timeline

  • Initial Response: Within 48 hours of your report
  • Status Update: Within 7 days with an assessment
  • Resolution Target: Within 90 days for most issues

What to Expect

  1. Acknowledgment: We will acknowledge receipt of your report within 48 hours
  2. Assessment: We will assess the vulnerability and determine its severity
  3. Updates: We will keep you informed of our progress
  4. Fix: We will develop and test a fix
  5. Disclosure: We will coordinate public disclosure with you
  6. Credit: We will credit you in our security advisories (unless you prefer anonymity)

Security Best Practices

When using Flyto2 Core, please follow these security best practices:

Environment Variables

Never hardcode sensitive credentials in workflow files.

# BAD - Don't do this
steps:
  - id: api_call
    module: api.http_post
    params:
      headers:
        Authorization: "Bearer sk-1234567890abcdef"  # Never hardcode!

# GOOD - Use environment variables
steps:
  - id: api_call
    module: api.http_post
    params:
      headers:
        Authorization: "Bearer ${env.API_KEY}"

Recommended Environment Variables

Store sensitive values in environment variables:

# API Keys
export OPENAI_API_KEY="your-key-here"
export ANTHROPIC_API_KEY="your-key-here"
export GITHUB_TOKEN="your-token-here"

# Database Credentials
export DATABASE_URL="postgresql://user:pass@host:5432/db"

# Third-party Services
export SLACK_WEBHOOK_URL="https://hooks.slack.com/..."
export STRIPE_API_KEY="sk_live_..."

File Permissions

Workflow files may contain sensitive logic. Protect them appropriately:

# Restrict workflow file permissions
chmod 600 sensitive-workflow.yaml

# Restrict .env files
chmod 600 .env

Input Validation

When creating custom modules, always validate and sanitize inputs:

All network modules use validate_url_with_env_config() from src/core/utils.py.

from core.utils import validate_url_with_env_config, SSRFError

try:
    validate_url_with_env_config(url)
except SSRFError as e:
    return {'ok': False, 'error': str(e), 'error_code': 'SSRF_BLOCKED'}

Blocked IP Ranges (Default)

Range Reason
10.0.0.0/8 RFC 1918 private
172.16.0.0/12 RFC 1918 private
192.168.0.0/16 RFC 1918 private
127.0.0.0/8, ::1/128 Loopback
169.254.0.0/16, fe80::/10 Link-local
0.0.0.0/8 Reserved
100.64.0.0/10 Shared address (CGN)
192.0.0.0/24, 192.0.2.0/24, 198.51.100.0/24, 203.0.113.0/24 Documentation/test
224.0.0.0/4, 240.0.0.0/4 Multicast/reserved

Blocked Hostnames

localhost, localhost.localdomain, 127.0.0.1, ::1, 0.0.0.0, metadata.google.internal, 169.254.169.254 (cloud metadata), metadata.internal

DNS Resolution Check

After hostname resolution, the resolved IP is checked against all blocked ranges. This prevents DNS rebinding attacks where a hostname resolves to a private IP.

Protected Modules (11 total)

Module Protection
http.request validate_url_with_env_config()
api.http_get validate_url_with_env_config()
browser.goto validate_url_with_env_config()
browser.tab validate_url_with_env_config()
image.download validate_url_with_env_config()
notification.send validate_url_with_env_config()
communication.webhook_trigger validate_url_with_env_config()
llm.chat validate_url_with_env_config() (custom base URL)
vector.connector validate_url_with_env_config()
port.check is_private_ip() direct check
ai.local_ollama localhost-only enforcement

Validator Enforcement

The module validator (validator.py) requires all network modules to declare SSRF protection via the ssrf_protected tag (rule SEC001 / CORE-SEC-003).

Configuration

# Allow private networks (development only)
FLYTO_ALLOW_PRIVATE_NETWORK=true

# Allowlist specific hosts (comma-separated, supports wildcards)
FLYTO_ALLOWED_HOSTS=localhost,127.0.0.1,*.internal.corp.com

# VS Code local mode (allow localhost only)
FLYTO_VSCODE_LOCAL_MODE=true

# Allow remote Ollama server (default: localhost only)
FLYTO_ALLOW_REMOTE_OLLAMA=true

Browser Automation Security

When using browser modules:

# Run in headless mode for server environments
- id: browser
  module: browser.launch
  params:
    headless: true

# Be cautious with file downloads
- id: download
  module: browser.download
  params:
    path: "/safe/download/directory/"  # Use restricted directory

Logging and Secrets

Flyto2 Core automatically redacts sensitive values in logs. However, be careful when:

  • Writing custom modules that log parameter values
  • Using the utility.log module with sensitive data
  • Enabling debug mode in production

Known Security Considerations

Code Execution

Flyto2 Core executes workflow definitions. Be aware that:

  • Workflow files should be treated as code
  • Only run workflows from trusted sources
  • Review third-party modules before using them

Network Access

Some modules make network requests. Consider:

  • Using firewall rules to restrict outbound connections
  • Monitoring network traffic from workflow executions
  • Using allowlists for permitted domains (see SSRF configuration above)

Browser Automation

The browser modules can:

  • Execute JavaScript on web pages
  • Access cookies and local storage
  • Download files

Always run browser automation in isolated environments when processing untrusted content.

Security Updates

Security updates are released as patch versions (e.g., 1.0.1, 1.0.2). We recommend:

  1. Subscribe to this repository's releases
  2. Update promptly when security patches are released
  3. Monitor the security advisories

Responsible Disclosure

We follow responsible disclosure practices:

  • We will not take legal action against security researchers acting in good faith
  • We will work with you to understand and resolve the issue
  • We will publicly acknowledge your contribution (with your permission)

Contact

For security concerns:

For general questions:

  • GitHub Issues: For non-security bugs and feature requests
  • GitHub Discussions: For questions and community support

Thank you for helping keep Flyto2 Core and its users safe.

There aren’t any published security advisories