Skip to content

[CRITICAL] Implement TLS/mTLS configuration for secure communications #2

@claranceliberi

Description

@claranceliberi

Problem Statement

The metrics agent transmits potentially sensitive system data over unencrypted HTTP connections, creating a significant security vulnerability. No TLS configuration options exist, and all communications are plaintext.

Impact Assessment

  • Severity: Critical
  • Impact: Data interception, man-in-the-middle attacks, compliance violations
  • Affected Components: All metric transmissions, diagnostic data, agent communications
  • Security Risk: High - Sensitive system information exposed in transit
  • Compliance: Violates SOC 2, GDPR, HIPAA requirements

Technical Details

Current State

  • File: pkg/clients/tsclient/client.go
  • Lines: 82-84, 142-148
  • Issues:
    • No TLS configuration in HTTP transport
    • No certificate validation
    • Hardcoded insecure transport settings
    • Missing client certificate support

Code Analysis

// Line 82-84 - Insecure transport
transport := &http.Transport{
    MaxIdleConns:        10,
    IdleConnTimeout:     30 * time.Second,
    // Missing TLS configuration
}

// Lines 142-148 - Plaintext transmission
req, err := http.NewRequestWithContext(ctx, "POST", c.endpoint, bytes.NewBuffer(compressed))
// No certificate validation, no encryption

Acceptance Criteria

  • Implement TLS 1.3 minimum version requirement
  • Add certificate validation with configurable CA bundle
  • Implement mutual TLS (mTLS) support for client authentication
  • Add certificate pinning for enhanced security
  • Support custom cipher suites configuration
  • Add TLS connection logging and monitoring
  • Implement certificate rotation mechanism
  • Add configuration options for all TLS settings

Implementation Guidelines

  1. TLS Configuration Structure:
type TLSConfig struct {
    Enabled           bool     `yaml:"enabled"`
    MinVersion        string   `yaml:"min_version"`
    CipherSuites      []string `yaml:"cipher_suites"`
    InsecureSkipVerify bool    `yaml:"insecure_skip_verify"`
    CertFile          string   `yaml:"cert_file"`
    KeyFile           string   `yaml:"key_file"`
    CAFile            string   `yaml:"ca_file"`
    ServerName        string   `yaml:"server_name"`
}
  1. Security Requirements:

    • Default to TLS 1.3, fallback to TLS 1.2
    • Disable weak cipher suites
    • Enable certificate validation by default
    • Support both file-based and embedded certificates
  2. mTLS Implementation:

    • Client certificate authentication
    • Automatic certificate renewal
    • Certificate health monitoring

Testing Requirements

  • Unit tests for TLS configuration parsing
  • Integration tests with real TLS servers
  • Security tests for certificate validation
  • Performance tests for TLS overhead
  • Compatibility tests with different TLS versions

Security Considerations

  • Certificate Storage: Secure storage of private keys
  • Key Rotation: Automated certificate renewal
  • Monitoring: TLS connection health and certificate expiry
  • Fallback: Graceful degradation options

Configuration Example

tls:
  enabled: true
  min_version: "1.3"
  cert_file: "/etc/ssl/certs/agent.crt"
  key_file: "/etc/ssl/private/agent.key"
  ca_file: "/etc/ssl/ca-bundle.pem"
  server_name: "metrics.example.com"
  insecure_skip_verify: false

Related Issues

Definition of Done

  • TLS 1.3 implemented with secure defaults
  • mTLS support for client authentication
  • Certificate validation working correctly
  • Configuration options documented
  • Security tests passing
  • Performance impact < 5% overhead
  • Code review by security team

Metadata

Metadata

Assignees

No one assigned

    Labels

    criticalCritical security vulnerability or system failureenhancementNew feature or requestsecuritySecurity-related issues and vulnerabilities

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions