nyx-scanner 0.2.0-alpha

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

pub const PATTERNS: &[Pattern] = &[
    Pattern {
        id: "runtime_exec",
        description: "Runtime.getRuntime().exec(...) – arbitrary-command execution",
        query: "(method_invocation object: (method_invocation name: (identifier) @n (#eq? @n \"getRuntime\")) name: (identifier) @id (#eq? @id \"exec\")) @vuln",
        severity: Severity::High,
    },
    Pattern {
        id: "class_for_name",
        description: "Dynamic reflection via Class.forName(...)",
        query: "(method_invocation object: (identifier) @c (#eq? @c \"Class\") name: (identifier) @id (#eq? @id \"forName\")) @vuln",
        severity: Severity::Medium,
    },
    Pattern {
        id: "object_deserialization",
        description: "java.io.ObjectInputStream#readObject() deserialization",
        query: "(method_invocation object: (identifier) @o (#eq? @o \"ObjectInputStream\") name: (identifier) @id (#eq? @id \"readObject\")) @vuln",
        severity: Severity::High,
    },
    Pattern {
        id: "insecure_random",
        description: "java.util.Random used where SecureRandom is expected",
        query: "(object_creation_expression type: (identifier) @t (#eq? @t \"Random\")) @vuln",
        severity: Severity::Medium,
    },
    Pattern {
        id: "thread_stop",
        description: "Deprecated Thread.stop() invocation",
        query: "(method_invocation name: (identifier) @id (#eq? @id \"stop\") object: (identifier) @obj (#eq? @obj \"Thread\")) @vuln",
        severity: Severity::Low,
    },
    Pattern {
        id: "sql_concat",
        description: "SQL built with string concatenation",
        query: "(method_invocation name: (identifier) @id (#match? @id \"execute(Query|Update)?\") arguments: (argument_list (binary_expression) @concat)) @vuln",
        severity: Severity::Medium,
    },
];