UNPKG

bugnitor-security-scanner

Version:

AI-Era Security Scanner: Intelligent automated security review agent specializing in AI-generated vulnerability patterns

205 lines • 10.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.program = void 0; const commander_1 = require("commander"); const path = __importStar(require("path")); const chalk_1 = __importDefault(require("chalk")); const scanner_1 = require("./scanner"); const reporter_1 = require("./reporter"); const program = new commander_1.Command(); exports.program = program; program .name('bugnitor') .description('AI-era security scanner that detects vulnerabilities and exposed secrets in codebases') .version('1.0.0'); program .command('scan') .description('Comprehensive security analysis of entire repository including code, dependencies, and CI/CD') .argument('[path]', 'Path to scan (defaults to current directory)', '.') .option('-e, --exclude <patterns...>', 'Exclude patterns (glob format)') .option('-i, --include <patterns...>', 'Include patterns (glob format)') .option('--secrets-only', 'Only scan for exposed secrets and credentials') .option('--vulnerabilities-only', 'Only scan for code vulnerabilities') .option('--ai-vulnerabilities', 'Focus on AI-assistant generated vulnerability patterns') .option('--dependencies-only', 'Only scan dependencies for known vulnerabilities') .option('--cicd-only', 'Only scan CI/CD configurations for security issues') .option('--min-severity <level>', 'Minimum severity level (low, medium, high, critical)', 'low') .option('-f, --format <format>', 'Output format (text, json, sarif)', 'text') .option('-o, --output <file>', 'Output file path') .option('--detailed', 'Show detailed file-by-file and folder-by-folder analysis') .option('--show-grade', 'Display security grade and recommendations') .option('--no-color', 'Disable colored output') .action(async (targetPath, options) => { try { if (options.noColor) { chalk_1.default.level = 0; } console.log(chalk_1.default.blue('šŸ” Starting Bugnitor Intelligent Security Review...')); console.log(chalk_1.default.gray(`Target: ${path.resolve(targetPath)}`)); console.log(chalk_1.default.gray('Analyzing: Code, Dependencies, CI/CD, Configuration\n')); const scanner = new scanner_1.SecurityScanner(); const reporter = new reporter_1.Reporter(); const scanOptions = { path: path.resolve(targetPath), excludePatterns: options.exclude, includePatterns: options.include, secretsOnly: options.secretsOnly || options.dependenciesOnly || options.cicdOnly ? false : options.secretsOnly, vulnerabilitiesOnly: options.vulnerabilitiesOnly || options.dependenciesOnly || options.cicdOnly ? false : options.vulnerabilitiesOnly, minSeverity: options.minSeverity, outputFormat: options.format }; const result = await scanner.scan(scanOptions); if (options.output || options.format !== 'text') { await reporter.saveReport(result, options.format, options.output); } if (options.format === 'text' && !options.output) { console.log('\n' + reporter.generateTextReport(result)); } // Determine exit code based on severity and grade const exitCode = result.summary.critical > 0 ? 2 : result.summary.high > 0 ? 1 : result.securityGrade.overall === 'F' ? 1 : 0; console.log('\n' + chalk_1.default.gray('━'.repeat(80))); console.log(chalk_1.default.bold('šŸŽÆ Security Assessment Complete')); if (exitCode === 2) { console.log(chalk_1.default.red.bold('🚨 CRITICAL: Immediate action required! Critical vulnerabilities detected.')); } else if (exitCode === 1) { console.log(chalk_1.default.yellow.bold('āš ļø HIGH PRIORITY: Security improvements needed.')); } else if (result.summary.medium > 0 || result.summary.low > 0) { console.log(chalk_1.default.blue('šŸ”§ Some security issues found. Consider addressing them.')); } else { console.log(chalk_1.default.green.bold('āœ… Excellent! No critical security issues detected.')); } // Show grade summary const gradeColor = result.securityGrade.overall === 'A' ? chalk_1.default.green : result.securityGrade.overall === 'B' ? chalk_1.default.blue : result.securityGrade.overall === 'C' ? chalk_1.default.yellow : result.securityGrade.overall === 'D' ? chalk_1.default.red : chalk_1.default.red.bold; console.log(gradeColor(`šŸ† Security Grade: ${result.securityGrade.overall} (${result.securityGrade.score}/100)`)); if (result.nextSteps.length > 0) { console.log(chalk_1.default.gray(`šŸ“‹ Next: ${result.nextSteps[0]}`)); } process.exit(exitCode); } catch (error) { console.error(chalk_1.default.red('āŒ Scan failed:'), error); process.exit(1); } }); program .command('patterns') .description('List all available security analysis capabilities') .action(() => { console.log(chalk_1.default.blue('šŸ” Bugnitor Intelligent Security Analysis\n')); console.log(chalk_1.default.bold('šŸ¤– AI-Generated Vulnerability Patterns:')); console.log('• Missing Authorization Checks on DELETE/Admin Operations'); console.log('• Direct Database Queries with User Input'); console.log('• Unsanitized CSV/File Processing'); console.log('• Hardcoded Secrets from AI Examples'); console.log('• Detailed Error Information Exposure'); console.log('• Weak Cryptographic Algorithms from AI Suggestions'); console.log('• Unvalidated Redirects'); console.log('• Missing Input Validation on Endpoints'); console.log(chalk_1.default.bold('\nšŸ” Enhanced Secret Detection:')); console.log('• AWS Access Keys & Secret Keys (Context-Aware)'); console.log('• GitHub Personal Access Tokens'); console.log('• OpenAI API Keys'); console.log('• Stripe API Keys'); console.log('• Google API Keys'); console.log('• Firebase Tokens'); console.log('• JWT Signing Secrets'); console.log('• SSH Private Keys'); console.log('• Database Connection Strings with Credentials'); console.log('• Slack & Discord Tokens'); console.log('• Generic API Keys & Passwords with Context Analysis'); console.log(chalk_1.default.bold('\nšŸ’‰ Injection & Syntax Attacks:')); console.log('• SQL Injection (concatenation & interpolation)'); console.log('• NoSQL Injection'); console.log('• Cross-Site Scripting (XSS) - DOM & Stored'); console.log('• Command Injection / Shell Injection'); console.log('• Server-Side Template Injection'); console.log('• Code Injection via eval()'); console.log(chalk_1.default.bold('\nšŸ”“ Broken Access & Authorization:')); console.log('• Missing Authorization Checks'); console.log('• Insecure Direct Object References'); console.log('• Privilege Escalation Vulnerabilities'); console.log(chalk_1.default.bold('\nšŸ“¦ Deserialization & Remote Code Execution:')); console.log('• Unsafe Deserialization (pickle, yaml, JSON)'); console.log('• Log4Shell JNDI Lookup Attacks'); console.log('• Object Injection Vulnerabilities'); console.log(chalk_1.default.bold('\nšŸ“ File, Path & Resource Manipulation:')); console.log('• Directory Traversal / Path Traversal'); console.log('• Unrestricted File Upload'); console.log('• Zip-Slip / Archive Traversal'); console.log(chalk_1.default.bold('\n🧠 Memory & Language-Specific:')); console.log('• Buffer Overflow (C/C++)'); console.log('• Format String Vulnerabilities'); console.log('• Integer Overflow/Underflow'); console.log(chalk_1.default.bold('\nšŸ”‘ Cryptography & Configuration:')); console.log('• Weak Cryptographic Algorithms (MD5, SHA1, DES)'); console.log('• Insecure Random Number Generation'); console.log('• Improper SSL/TLS Configuration'); console.log('• Missing Encryption for Sensitive Data'); console.log(chalk_1.default.bold('\nšŸ“š Dependency & Supply-Chain:')); console.log('• Vulnerable Dependencies (Log4j, Lodash, etc.)'); console.log('• Outdated Package Versions'); console.log('• Suspicious Package Names'); console.log('• Insecure Package Sources (HTTP)'); console.log(chalk_1.default.bold('\nšŸ”„ CI/CD & Infrastructure:')); console.log('• GitHub Actions Security Issues'); console.log('• GitLab CI Configuration Problems'); console.log('• Jenkins Pipeline Vulnerabilities'); console.log('• Docker Security Misconfigurations'); console.log('• Secrets in CI/CD Files'); console.log('• Excessive Permissions'); console.log(chalk_1.default.bold('\nšŸ† Security Assessment:')); console.log('• Overall Security Grade (A-F)'); console.log('• Category-based Scoring'); console.log('• Confidence Scoring (0-100%)'); console.log('• CWE & OWASP Mapping'); console.log('• Impact Assessment'); console.log('• Effort Estimation'); console.log('• Intelligent Recommendations'); console.log('• Next Steps Planning'); }); //# sourceMappingURL=cli.js.map