nyx-scanner 0.1.1

A CLI security scanner for automating vulnerability checks
use crate::patterns::{Pattern, Severity};

pub const PATTERNS: &[Pattern] = &[
    Pattern {
        id: "exec_command",
        description: "os/exec Command construction",
        query: "(call_expression function: (selector_expression field: (field_identifier) @f (#eq? @f \"Command\"))) @vuln",
        severity: Severity::Medium,
    },
    Pattern {
        id: "http_insecure_tls",
        description: "&http.Transport{TLSClientConfig: &tls.Config{InsecureSkipVerify: true}}",
        query: "(composite_literal type: (selector_expression field: (field_identifier) @t (#eq? @t \"Transport\")) body: (literal_value (keyed_element key: (identifier) @k (#eq? @k \"TLSClientConfig\") value: (composite_literal body: (literal_value (keyed_element key: (identifier) @ik (#eq? @ik \"InsecureSkipVerify\") value: (true)))))) @vuln",
        severity: Severity::High,
    },
    Pattern {
        id: "unsafe_pointer",
        description: "Use of unsafe.Pointer",
        query: "(qualified_type type: (selector_expression field: (field_identifier) @f (#eq? @f \"Pointer\"))) @vuln",
        severity: Severity::High,
    },
    Pattern {
        id: "md5_sha1",
        description: "crypto/md5 or crypto/sha1 usage",
        query: "(call_expression function: (selector_expression object: (identifier) @pkg (#match? @pkg \"md5|sha1\"))) @vuln",
        severity: Severity::Medium,
    },
    Pattern {
        id: "hardcoded_secret",
        description: "Hard-coded string that looks like an API key/token",
        query: "(interpreted_string_literal) @s (#match? @s \"(?i)(api|secret|token|password)[=:]?[ \\t]*[A-Za-z0-9_\\-]{8,}\")",
        severity: Severity::Low,
    },
];