Skip to content

Security: Command injection vulnerability in package name handling #23

Description

@bluet

Problem

Package manager implementations use user-provided package names directly in exec.Command() calls without proper validation, creating potential command injection vulnerabilities.

Impact

  • Command Injection: Malicious package names could execute arbitrary commands
  • Security Risk: Especially dangerous when running with elevated privileges
  • Input Validation: No sanitization of package names or arguments

Vulnerability Examples

// VULNERABLE: Direct use of user input
cmd := exec.Command("apt", "install", packageName)

// ATTACK: packageName = "vim; rm -rf /"
// Results in: apt install vim; rm -rf /

Current Risk Assessment

High Risk Scenarios:

  1. Web applications using syspkg with user-provided package names
  2. CLI tools running with sudo/root privileges
  3. Automated systems processing untrusted input

Required Security Fixes

1. Input Validation

func validatePackageName(name string) error {
    // Check for shell metacharacters
    if strings.ContainsAny(name, ";& < /dev/null | `$(){}[]<>") {
        return fmt.Errorf("invalid package name: contains shell metacharacters")
    }
    
    // Check for valid package name format
    matched, _ := regexp.MatchString(`^[a-zA-Z0-9][a-zA-Z0-9._+-]*$`, name)
    if !matched {
        return fmt.Errorf("invalid package name format")
    }
    
    return nil
}

2. Secure Command Construction

// SECURE: Each argument is properly separated
cmd := exec.Command("apt", "install")
cmd.Args = append(cmd.Args, validatedPackageNames...)

Files Requiring Security Fixes

All package manager implementations:

  • manager/apt/apt.go
  • manager/yum/yum.go
  • manager/snap/snap.go
  • manager/flatpak/flatpak.go

Priority

HIGH SECURITY RISK - Command injection vulnerabilities pose significant security risks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingcriticalCritical bugs affecting reliability or securitysecuritySecurity vulnerabilities and fixes

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions