codeslick-cli 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +458 -0
- package/__tests__/cli-reporter.test.ts +86 -0
- package/__tests__/config-loader.test.ts +247 -0
- package/__tests__/local-scanner.test.ts +245 -0
- package/bin/codeslick.cjs +153 -0
- package/dist/packages/cli/src/commands/auth.d.ts +36 -0
- package/dist/packages/cli/src/commands/auth.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/auth.js +226 -0
- package/dist/packages/cli/src/commands/auth.js.map +1 -0
- package/dist/packages/cli/src/commands/config.d.ts +37 -0
- package/dist/packages/cli/src/commands/config.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/config.js +196 -0
- package/dist/packages/cli/src/commands/config.js.map +1 -0
- package/dist/packages/cli/src/commands/init.d.ts +32 -0
- package/dist/packages/cli/src/commands/init.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/init.js +171 -0
- package/dist/packages/cli/src/commands/init.js.map +1 -0
- package/dist/packages/cli/src/commands/scan.d.ts +40 -0
- package/dist/packages/cli/src/commands/scan.d.ts.map +1 -0
- package/dist/packages/cli/src/commands/scan.js +204 -0
- package/dist/packages/cli/src/commands/scan.js.map +1 -0
- package/dist/packages/cli/src/config/config-loader.d.ts +67 -0
- package/dist/packages/cli/src/config/config-loader.d.ts.map +1 -0
- package/dist/packages/cli/src/config/config-loader.js +146 -0
- package/dist/packages/cli/src/config/config-loader.js.map +1 -0
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts +69 -0
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -0
- package/dist/packages/cli/src/reporters/cli-reporter.js +244 -0
- package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -0
- package/dist/packages/cli/src/scanner/local-scanner.d.ts +92 -0
- package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -0
- package/dist/packages/cli/src/scanner/local-scanner.js +221 -0
- package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts +88 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.d.ts.map +1 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js +371 -0
- package/dist/src/lib/analyzers/helpers/ai-code-detection-utils.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts +63 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.js +95 -0
- package/dist/src/lib/analyzers/helpers/jsx-helpers.js.map +1 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts +59 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.js +231 -0
- package/dist/src/lib/analyzers/helpers/variable-tracker.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.js +129 -0
- package/dist/src/lib/analyzers/java/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js +221 -0
- package/dist/src/lib/analyzers/java/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts +18 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.js +84 -0
- package/dist/src/lib/analyzers/java/security-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts +18 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js +161 -0
- package/dist/src/lib/analyzers/java/security-checks/crypto-validation.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js +163 -0
- package/dist/src/lib/analyzers/java/security-checks/deserialization-xxe.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts +24 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js +178 -0
- package/dist/src/lib/analyzers/java/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts +25 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.js +179 -0
- package/dist/src/lib/analyzers/java/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts +17 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.js +67 -0
- package/dist/src/lib/analyzers/java/security-checks/file-operations.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts +25 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.js +396 -0
- package/dist/src/lib/analyzers/java/security-checks/framework-security.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js +123 -0
- package/dist/src/lib/analyzers/java/security-checks/hardcoded-credentials.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts +23 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js +201 -0
- package/dist/src/lib/analyzers/java/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.js +121 -0
- package/dist/src/lib/analyzers/java/security-checks/insecure-design.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts +20 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.js +89 -0
- package/dist/src/lib/analyzers/java/security-checks/logging-failures.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts +26 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js +309 -0
- package/dist/src/lib/analyzers/java/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts +18 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js +114 -0
- package/dist/src/lib/analyzers/java/security-checks/unsafe-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/java/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts +209 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/java-analyzer.js +1720 -0
- package/dist/src/lib/analyzers/java-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js +123 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts +44 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js +224 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/async-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts +50 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js +284 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/code-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js +86 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/comparison-issues.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts +32 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js +44 -0
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts +22 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.js +168 -0
- package/dist/src/lib/analyzers/javascript/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js +232 -0
- package/dist/src/lib/analyzers/javascript/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js +222 -0
- package/dist/src/lib/analyzers/javascript/security-checks/authentication-failures.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts +28 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js +176 -0
- package/dist/src/lib/analyzers/javascript/security-checks/credential-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts +23 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js +113 -0
- package/dist/src/lib/analyzers/javascript/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts +28 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js +227 -0
- package/dist/src/lib/analyzers/javascript/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts +32 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js +260 -0
- package/dist/src/lib/analyzers/javascript/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts +26 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js +164 -0
- package/dist/src/lib/analyzers/javascript/security-checks/insecure-design.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts +26 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js +775 -0
- package/dist/src/lib/analyzers/javascript/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts +25 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js +168 -0
- package/dist/src/lib/analyzers/javascript/security-checks/software-integrity.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts +27 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js +108 -0
- package/dist/src/lib/analyzers/javascript/security-checks/storage-security.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts +28 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js +143 -0
- package/dist/src/lib/analyzers/javascript/security-checks/xss-dom-security.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts +53 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js +144 -0
- package/dist/src/lib/analyzers/javascript/syntax/syntax-helpers.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts +72 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js +314 -0
- package/dist/src/lib/analyzers/javascript/syntax/typescript-syntax.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/javascript/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts +36 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js +70 -0
- package/dist/src/lib/analyzers/javascript/utils/metrics-calculator.js.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts +29 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js +55 -0
- package/dist/src/lib/analyzers/javascript/utils/performance-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/javascript-analyzer.d.ts +95 -0
- package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/javascript-analyzer.js +2141 -0
- package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts +21 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.js +305 -0
- package/dist/src/lib/analyzers/python/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js +242 -0
- package/dist/src/lib/analyzers/python/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts +24 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js +207 -0
- package/dist/src/lib/analyzers/python/security-checks/authentication-flaws.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts +27 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.js +206 -0
- package/dist/src/lib/analyzers/python/security-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts +24 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js +113 -0
- package/dist/src/lib/analyzers/python/security-checks/credentials-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js +129 -0
- package/dist/src/lib/analyzers/python/security-checks/crypto-failures.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts +19 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.js +90 -0
- package/dist/src/lib/analyzers/python/security-checks/data-integrity.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.js +68 -0
- package/dist/src/lib/analyzers/python/security-checks/deserialization.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts +25 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.js +180 -0
- package/dist/src/lib/analyzers/python/security-checks/django-security.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts +23 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js +127 -0
- package/dist/src/lib/analyzers/python/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts +23 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.js +120 -0
- package/dist/src/lib/analyzers/python/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts +24 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.js +143 -0
- package/dist/src/lib/analyzers/python/security-checks/flask-security.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts +28 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js +174 -0
- package/dist/src/lib/analyzers/python/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.js +160 -0
- package/dist/src/lib/analyzers/python/security-checks/insecure-design.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts +20 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.js +121 -0
- package/dist/src/lib/analyzers/python/security-checks/logging-failures.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts +26 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js +248 -0
- package/dist/src/lib/analyzers/python/security-checks/nosql-injection.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts +26 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js +375 -0
- package/dist/src/lib/analyzers/python/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts +26 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js +160 -0
- package/dist/src/lib/analyzers/python/security-checks/ssrf-detection.js.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts +23 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.js +117 -0
- package/dist/src/lib/analyzers/python/security-checks/web-security.js.map +1 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/python/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/python-analyzer.d.ts +111 -0
- package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/python-analyzer.js +1600 -0
- package/dist/src/lib/analyzers/python-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts +14 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js +47 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts +13 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js +36 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js +68 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js +68 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts +12 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js +45 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts +14 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js +47 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts +13 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js +36 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.js +32 -0
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.js +68 -0
- package/dist/src/lib/analyzers/secrets/patterns/credentials.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts +16 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.js +79 -0
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts +15 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.js +58 -0
- package/dist/src/lib/analyzers/secrets/patterns/tokens.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +88 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js +162 -0
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts +56 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.js +199 -0
- package/dist/src/lib/analyzers/secrets/validators/context-checker.js.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts +56 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js +102 -0
- package/dist/src/lib/analyzers/secrets/validators/entropy-checker.js.map +1 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.d.ts +38 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.js +125 -0
- package/dist/src/lib/analyzers/security-checks/es6-security.js.map +1 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts +46 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.js +92 -0
- package/dist/src/lib/analyzers/security-checks/python-async-security.js.map +1 -0
- package/dist/src/lib/analyzers/security-checks/react-security.d.ts +49 -0
- package/dist/src/lib/analyzers/security-checks/react-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/security-checks/react-security.js +125 -0
- package/dist/src/lib/analyzers/security-checks/react-security.js.map +1 -0
- package/dist/src/lib/analyzers/types.d.ts +92 -0
- package/dist/src/lib/analyzers/types.d.ts.map +1 -0
- package/dist/src/lib/analyzers/types.js +3 -0
- package/dist/src/lib/analyzers/types.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts +19 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.js +210 -0
- package/dist/src/lib/analyzers/typescript/security-checks/access-control.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts +25 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js +242 -0
- package/dist/src/lib/analyzers/typescript/security-checks/ai-generated-code.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts +28 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.js +357 -0
- package/dist/src/lib/analyzers/typescript/security-checks/authentication.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts +26 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js +380 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-injection.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts +23 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js +109 -0
- package/dist/src/lib/analyzers/typescript/security-checks/code-quality.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts +21 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js +153 -0
- package/dist/src/lib/analyzers/typescript/security-checks/credentials-crypto.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts +23 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js +146 -0
- package/dist/src/lib/analyzers/typescript/security-checks/enhanced-supply-chain.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts +23 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js +187 -0
- package/dist/src/lib/analyzers/typescript/security-checks/exception-handling.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts +19 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js +97 -0
- package/dist/src/lib/analyzers/typescript/security-checks/information-disclosure.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts +29 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js +319 -0
- package/dist/src/lib/analyzers/typescript/security-checks/injection-attacks.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts +21 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js +121 -0
- package/dist/src/lib/analyzers/typescript/security-checks/logging-failures.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts +27 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js +213 -0
- package/dist/src/lib/analyzers/typescript/security-checks/security-misconfiguration.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts +19 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.js +59 -0
- package/dist/src/lib/analyzers/typescript/security-checks/type-security.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/type-checker.d.ts +17 -0
- package/dist/src/lib/analyzers/typescript/type-checker.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/type-checker.js +515 -0
- package/dist/src/lib/analyzers/typescript/type-checker.js.map +1 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts +58 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js +71 -0
- package/dist/src/lib/analyzers/typescript/utils/createVulnerability.js.map +1 -0
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts +116 -0
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/typescript-analyzer.js +1660 -0
- package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -0
- package/dist/src/lib/security/compliance-mapping.d.ts +29 -0
- package/dist/src/lib/security/compliance-mapping.d.ts.map +1 -0
- package/dist/src/lib/security/compliance-mapping.js +1342 -0
- package/dist/src/lib/security/compliance-mapping.js.map +1 -0
- package/dist/src/lib/security/severity-scoring.d.ts +47 -0
- package/dist/src/lib/security/severity-scoring.d.ts.map +1 -0
- package/dist/src/lib/security/severity-scoring.js +965 -0
- package/dist/src/lib/security/severity-scoring.js.map +1 -0
- package/dist/src/lib/standards/references.d.ts +16 -0
- package/dist/src/lib/standards/references.d.ts.map +1 -0
- package/dist/src/lib/standards/references.js +1161 -0
- package/dist/src/lib/standards/references.js.map +1 -0
- package/dist/src/lib/types/index.d.ts +167 -0
- package/dist/src/lib/types/index.d.ts.map +1 -0
- package/dist/src/lib/types/index.js +3 -0
- package/dist/src/lib/types/index.js.map +1 -0
- package/dist/src/lib/utils/code-cleaner.d.ts +59 -0
- package/dist/src/lib/utils/code-cleaner.d.ts.map +1 -0
- package/dist/src/lib/utils/code-cleaner.js +283 -0
- package/dist/src/lib/utils/code-cleaner.js.map +1 -0
- package/package.json +51 -0
- package/src/commands/auth.ts +308 -0
- package/src/commands/config.ts +226 -0
- package/src/commands/init.ts +202 -0
- package/src/commands/scan.ts +238 -0
- package/src/config/config-loader.ts +175 -0
- package/src/reporters/cli-reporter.ts +282 -0
- package/src/scanner/local-scanner.ts +250 -0
- package/tsconfig.json +24 -0
- package/tsconfig.tsbuildinfo +1 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TypeScript Logging and Monitoring Security Checks
|
|
4
|
+
* OWASP A09:2025 - Security Logging and Monitoring Failures
|
|
5
|
+
*
|
|
6
|
+
* Detects critical logging vulnerabilities:
|
|
7
|
+
* - Check #92: Missing audit logging for critical operations
|
|
8
|
+
* - Check #93: Sensitive data in logs
|
|
9
|
+
*/
|
|
10
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
+
exports.checkLoggingFailures = checkLoggingFailures;
|
|
12
|
+
const createVulnerability_1 = require("../utils/createVulnerability");
|
|
13
|
+
/**
|
|
14
|
+
* Checks for logging and monitoring failures in TypeScript code
|
|
15
|
+
*
|
|
16
|
+
* Covers:
|
|
17
|
+
* - Check #92: Missing audit logging for critical operations (MEDIUM)
|
|
18
|
+
* - Check #93: Sensitive data logged (HIGH)
|
|
19
|
+
*
|
|
20
|
+
* @param lines - Array of code lines
|
|
21
|
+
* @returns Array of security vulnerabilities found
|
|
22
|
+
*/
|
|
23
|
+
function checkLoggingFailures(lines) {
|
|
24
|
+
const vulnerabilities = [];
|
|
25
|
+
let inMultiLineComment = false;
|
|
26
|
+
lines.forEach((line, index) => {
|
|
27
|
+
const lineNumber = index + 1;
|
|
28
|
+
const trimmed = line.trim();
|
|
29
|
+
// Track multi-line comment blocks (/* ... */)
|
|
30
|
+
if (trimmed.includes('/*')) {
|
|
31
|
+
inMultiLineComment = true;
|
|
32
|
+
}
|
|
33
|
+
if (trimmed.includes('*/')) {
|
|
34
|
+
inMultiLineComment = false;
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
// Skip comments and empty lines
|
|
38
|
+
if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*'))
|
|
39
|
+
return;
|
|
40
|
+
// OWASP A09:2025 - Security Logging and Monitoring Failures
|
|
41
|
+
// Check #92: Missing Audit Logging for Critical Operations - MEDIUM
|
|
42
|
+
// Pattern: DELETE FROM users / UPDATE users / DROP TABLE (without logging)
|
|
43
|
+
// Detects critical database operations without audit logging
|
|
44
|
+
// Look for critical database operations
|
|
45
|
+
const criticalDbPattern = /(db\.query|db\.execute|connection\.query|pool\.query|sequelize\.query|prisma\.\w+\.delete|prisma\.\w+\.update)\s*\(\s*['"`]?\s*(DELETE|UPDATE|DROP|TRUNCATE)/i;
|
|
46
|
+
if (trimmed.match(criticalDbPattern)) {
|
|
47
|
+
// Check surrounding lines for audit logging
|
|
48
|
+
const surroundingLines = lines.slice(Math.max(0, index - 3), Math.min(index + 5, lines.length));
|
|
49
|
+
// Check for logging statements (skip comments to avoid false positives)
|
|
50
|
+
const hasAuditLog = surroundingLines.some(l => {
|
|
51
|
+
const trimmedLine = l.trim();
|
|
52
|
+
// Skip full-line comments and empty lines
|
|
53
|
+
if (!trimmedLine || trimmedLine.startsWith('//') || trimmedLine.startsWith('*') || trimmedLine.startsWith('/*')) {
|
|
54
|
+
return false;
|
|
55
|
+
}
|
|
56
|
+
// Remove inline comments (everything after //) to avoid false positives from comments
|
|
57
|
+
const codeOnly = trimmedLine.split('//')[0].trim();
|
|
58
|
+
const lowerLine = codeOnly.toLowerCase();
|
|
59
|
+
return ((lowerLine.includes('logger.') || lowerLine.includes('log.') || lowerLine.includes('audit')) &&
|
|
60
|
+
(lowerLine.includes('info') || lowerLine.includes('warn') || lowerLine.includes('audit') || lowerLine.includes('security'))) ||
|
|
61
|
+
lowerLine.includes('auditlog') ||
|
|
62
|
+
lowerLine.includes('securitylog');
|
|
63
|
+
});
|
|
64
|
+
// Check if this is in an admin/management context (likely needs auditing)
|
|
65
|
+
const isAdminContext = surroundingLines.some(l => {
|
|
66
|
+
const lowerLine = l.toLowerCase();
|
|
67
|
+
return (lowerLine.includes('admin') ||
|
|
68
|
+
lowerLine.includes('delete') ||
|
|
69
|
+
lowerLine.includes('remove') ||
|
|
70
|
+
lowerLine.includes('modify') ||
|
|
71
|
+
lowerLine.includes('permission'));
|
|
72
|
+
});
|
|
73
|
+
if (!hasAuditLog && isAdminContext) {
|
|
74
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('missing-audit-logging', 'Critical database operation without audit logging - cannot track who performed this action', 'Add audit logging: logger.audit({ action: \'DELETE_USER\', adminId, targetUserId, timestamp })', lineNumber, 'Critical operations like DELETE, UPDATE on user data must be logged for security auditing and compliance. Without audit logs, you cannot detect insider threats, unauthorized access, or data manipulation. This violates GDPR, SOC 2, PCI-DSS, and HIPAA requirements for audit trails.', 'Admin deletes user account → No log entry → Insider threat goes undetected → Compliance audit fails → Regulatory fines', [
|
|
75
|
+
'Cannot detect unauthorized data deletion',
|
|
76
|
+
'Insider threats go undetected',
|
|
77
|
+
'Compliance violations (GDPR Art. 30, PCI-DSS 10.2, SOC 2)',
|
|
78
|
+
'No forensic evidence for security incidents',
|
|
79
|
+
'Cannot prove who performed critical actions',
|
|
80
|
+
'Failed security audits',
|
|
81
|
+
'Regulatory penalties and fines'
|
|
82
|
+
], 'app.delete(\'/api/users/:id\', async (req, res) => {\n await db.query(\'DELETE FROM users WHERE id = ?\', [userId]);\n res.json({ success: true });\n});', 'app.delete(\'/api/users/:id\', async (req, res) => {\n const adminId = req.user.id;\n await db.query(\'DELETE FROM users WHERE id = ?\', [userId]);\n \n // Audit logging\n logger.audit({\n action: \'DELETE_USER\',\n adminId,\n targetUserId: userId,\n timestamp: new Date(),\n ip: req.ip\n });\n \n res.json({ success: true });\n});', 'Always log critical security events: user deletion, permission changes, data modification, authentication failures, access to sensitive data. Include: who (userId/adminId), what (action), when (timestamp), where (IP address). Store logs securely with tamper-proof mechanisms.'));
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// OWASP A09:2025 - Security Logging and Monitoring Failures
|
|
86
|
+
// Check #93: Sensitive Data in Logs - HIGH
|
|
87
|
+
// Pattern: console.log / logger.info with password, token, ssn, credit card
|
|
88
|
+
// Detects logging of sensitive information that should never be logged
|
|
89
|
+
// Look for logging statements
|
|
90
|
+
const loggingPattern = /(console\.(log|info|debug|warn|error)|logger\.(info|debug|warn|error)|log\.(info|debug))\s*\(/i;
|
|
91
|
+
if (trimmed.match(loggingPattern)) {
|
|
92
|
+
// Check if the logged content contains sensitive data keywords
|
|
93
|
+
const sensitiveDataPattern = /(password|pwd|passwd|token|secret|apikey|api_key|ssn|social_security|credit_card|creditcard|cvv|pin\b)/i;
|
|
94
|
+
// Extract the logged content (between parentheses)
|
|
95
|
+
const logContentMatch = trimmed.match(/\((.*)\)/);
|
|
96
|
+
if (logContentMatch) {
|
|
97
|
+
const logContent = logContentMatch[1];
|
|
98
|
+
// Check if sensitive keywords are in the logged content
|
|
99
|
+
if (logContent.match(sensitiveDataPattern)) {
|
|
100
|
+
// Additional check: make sure it's not just a string label
|
|
101
|
+
// Allow: console.log('Password validation failed')
|
|
102
|
+
// Block: console.log('Password:', password)
|
|
103
|
+
const hasVariable = logContent.includes(',') || logContent.includes('+') || logContent.includes('$');
|
|
104
|
+
if (hasVariable) {
|
|
105
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('sensitive-data-in-logs', 'Sensitive data (password, token, PII) logged - exposes credentials and violates privacy regulations', 'Remove sensitive data from logs or use redaction: logger.info({ userId: user.id }) // Don\'t log password/token', lineNumber, 'Logging sensitive data like passwords, tokens, SSNs, or credit cards exposes this information to anyone with access to log files. Logs are often stored insecurely, backed up to multiple locations, and accessible to many team members. This violates GDPR, PCI-DSS, and HIPAA regulations.', 'logger.info({ password, ssn }) → Logs stored in CloudWatch → Junior developer has read access → Extracts credentials → Account takeover', [
|
|
106
|
+
'Credential exposure to all log viewers',
|
|
107
|
+
'Privacy violations (GDPR, CCPA)',
|
|
108
|
+
'PCI-DSS violation (never log credit cards)',
|
|
109
|
+
'Insider threat amplification',
|
|
110
|
+
'Logs backed up to insecure locations',
|
|
111
|
+
'Credentials in log aggregation systems',
|
|
112
|
+
'Cannot delete/redact logs after exposure'
|
|
113
|
+
], 'console.log(\'User login:\', { username, email, password, token });', '// ONLY log non-sensitive identifiers\nconsole.log(\'User login:\', { userId: user.id, timestamp: new Date() });\n// Password and token should NEVER be logged', 'NEVER log: passwords, tokens, API keys, SSNs, credit cards, CVVs, PINs, auth cookies, private keys. Only log: userIds, timestamps, IP addresses, action types. Use structured logging with automatic redaction for sensitive fields.'));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
return vulnerabilities;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=logging-failures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-failures.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/typescript/security-checks/logging-failures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Security Misconfiguration Checks
|
|
3
|
+
* OWASP A02:2025 - Security Misconfiguration
|
|
4
|
+
*
|
|
5
|
+
* Detects security misconfigurations that moved from #5 to #2 in OWASP 2025.
|
|
6
|
+
* Focus: TypeScript compiler configs, strict mode, type safety, etc.
|
|
7
|
+
*/
|
|
8
|
+
import { SecurityVulnerability } from '../../types';
|
|
9
|
+
/**
|
|
10
|
+
* Checks for security misconfiguration vulnerabilities in TypeScript code
|
|
11
|
+
*
|
|
12
|
+
* Covers:
|
|
13
|
+
* - Check #1: TypeScript strict mode disabled (MEDIUM)
|
|
14
|
+
* - Check #2: Any type usage bypassing type safety (MEDIUM)
|
|
15
|
+
* - Check #3: TSX without React imports (HIGH)
|
|
16
|
+
* - Check #4: Unsafe type assertions (MEDIUM)
|
|
17
|
+
* - Check #5: Missing null checks with strict nulls disabled (MEDIUM)
|
|
18
|
+
* - Check #6: Console.log in production builds (LOW)
|
|
19
|
+
* - Check #7: Development-only code in production (MEDIUM)
|
|
20
|
+
* - Check #8: Unsafe JSON parsing without validation (HIGH)
|
|
21
|
+
* - Check #10: Missing or misconfigured Helmet middleware (HIGH) - Phase B
|
|
22
|
+
*
|
|
23
|
+
* @param lines - Array of code lines
|
|
24
|
+
* @returns Array of security vulnerabilities found
|
|
25
|
+
*/
|
|
26
|
+
export declare function checkSecurityMisconfiguration(lines: string[]): SecurityVulnerability[];
|
|
27
|
+
//# sourceMappingURL=security-misconfiguration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-misconfiguration.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/typescript/security-checks/security-misconfiguration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,EAAE,GACd,qBAAqB,EAAE,CAsWzB"}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TypeScript Security Misconfiguration Checks
|
|
4
|
+
* OWASP A02:2025 - Security Misconfiguration
|
|
5
|
+
*
|
|
6
|
+
* Detects security misconfigurations that moved from #5 to #2 in OWASP 2025.
|
|
7
|
+
* Focus: TypeScript compiler configs, strict mode, type safety, etc.
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.checkSecurityMisconfiguration = checkSecurityMisconfiguration;
|
|
11
|
+
const createVulnerability_1 = require("../utils/createVulnerability");
|
|
12
|
+
/**
|
|
13
|
+
* Checks for security misconfiguration vulnerabilities in TypeScript code
|
|
14
|
+
*
|
|
15
|
+
* Covers:
|
|
16
|
+
* - Check #1: TypeScript strict mode disabled (MEDIUM)
|
|
17
|
+
* - Check #2: Any type usage bypassing type safety (MEDIUM)
|
|
18
|
+
* - Check #3: TSX without React imports (HIGH)
|
|
19
|
+
* - Check #4: Unsafe type assertions (MEDIUM)
|
|
20
|
+
* - Check #5: Missing null checks with strict nulls disabled (MEDIUM)
|
|
21
|
+
* - Check #6: Console.log in production builds (LOW)
|
|
22
|
+
* - Check #7: Development-only code in production (MEDIUM)
|
|
23
|
+
* - Check #8: Unsafe JSON parsing without validation (HIGH)
|
|
24
|
+
* - Check #10: Missing or misconfigured Helmet middleware (HIGH) - Phase B
|
|
25
|
+
*
|
|
26
|
+
* @param lines - Array of code lines
|
|
27
|
+
* @returns Array of security vulnerabilities found
|
|
28
|
+
*/
|
|
29
|
+
function checkSecurityMisconfiguration(lines) {
|
|
30
|
+
const vulnerabilities = [];
|
|
31
|
+
let inMultiLineComment = false;
|
|
32
|
+
let hasCsrfMiddleware = false; // Track if csurf middleware is used
|
|
33
|
+
lines.forEach((line, index) => {
|
|
34
|
+
const trimmedLine = line.trim();
|
|
35
|
+
// CRITICAL: Track multi-line comment blocks (/* ... */)
|
|
36
|
+
if (trimmedLine.includes('/*')) {
|
|
37
|
+
inMultiLineComment = true;
|
|
38
|
+
}
|
|
39
|
+
if (trimmedLine.includes('*/')) {
|
|
40
|
+
inMultiLineComment = false;
|
|
41
|
+
return; // Skip the line with */
|
|
42
|
+
}
|
|
43
|
+
// CRITICAL: Skip all lines inside multi-line comments and single-line comments
|
|
44
|
+
if (!trimmedLine ||
|
|
45
|
+
inMultiLineComment ||
|
|
46
|
+
trimmedLine.startsWith('//') ||
|
|
47
|
+
trimmedLine.startsWith('*')) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const lowerLine = trimmedLine.toLowerCase();
|
|
51
|
+
// Check #1: TypeScript strict mode disabled
|
|
52
|
+
if (lowerLine.includes('"strict"') && lowerLine.includes('false')) {
|
|
53
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('strict-mode-disabled', 'TypeScript strict mode disabled reduces type safety', 'Enable strict mode in tsconfig.json for better type safety', index + 1, 'Loose type checking can lead to runtime errors and unexpected behavior', 'tsconfig.json with "strict": false allows unsafe operations', [
|
|
54
|
+
'Runtime type errors and crashes',
|
|
55
|
+
'Null pointer exceptions',
|
|
56
|
+
'Implicit type coercion vulnerabilities',
|
|
57
|
+
'Reduced code reliability and security'
|
|
58
|
+
], '"strict": false', '"strict": true', 'Disabled strict mode allows unsafe operations and reduces type checking effectiveness'));
|
|
59
|
+
}
|
|
60
|
+
// Check #2: Excessive any type usage bypassing type safety
|
|
61
|
+
if (lowerLine.includes(': any') || lowerLine.includes(' any[]') ||
|
|
62
|
+
lowerLine.includes('as any') || lowerLine.includes('<any>')) {
|
|
63
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('any-type-usage', 'Using "any" type bypasses TypeScript type safety', 'Use specific types or unknown instead of any for better type safety', index + 1, 'Type safety bypass can lead to unexpected data structures and security vulnerabilities', 'const userData: any = untrustedInput; // bypasses all type checking', [
|
|
64
|
+
'Injection attacks through unexpected data types',
|
|
65
|
+
'Property access errors and crashes',
|
|
66
|
+
'Data validation bypass',
|
|
67
|
+
'Security control circumvention'
|
|
68
|
+
], 'const userData: any = response.data;', 'const userData: UserData = response.data; // or unknown if type is unclear', 'The any type disables type checking and can lead to runtime errors'));
|
|
69
|
+
}
|
|
70
|
+
// Check #3: TSX without proper React imports
|
|
71
|
+
// ENHANCED: Exclude template literals, string literals, and Express response methods
|
|
72
|
+
const isTemplateOrStringLiteral = trimmedLine.includes('`') ||
|
|
73
|
+
trimmedLine.match(/['"]\s*<[^>]+>\s*['"]/) ||
|
|
74
|
+
trimmedLine.match(/(res|response)\.(send|write)/);
|
|
75
|
+
if ((trimmedLine.includes('<') && trimmedLine.includes('>') &&
|
|
76
|
+
!lowerLine.includes('import') && !lowerLine.includes('require')) &&
|
|
77
|
+
!isTemplateOrStringLiteral &&
|
|
78
|
+
!lines.slice(0, index + 1).some(prevLine => prevLine.toLowerCase().includes('import') && prevLine.toLowerCase().includes('react'))) {
|
|
79
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('tsx-missing-import', 'TSX elements used without proper React imports', 'Import React properly when using TSX elements', index + 1, 'Misconfigured TSX can lead to XSS vulnerabilities and runtime errors', 'const element = <div dangerouslySetInnerHTML={{__html: userInput}} />;', [
|
|
80
|
+
'Cross-site scripting (XSS) vulnerabilities',
|
|
81
|
+
'Runtime errors and application crashes',
|
|
82
|
+
'Improper content rendering',
|
|
83
|
+
'Component state corruption'
|
|
84
|
+
], 'const element = <div>Hello</div>;', 'import React from "react";\nconst element = <div>Hello</div>;', 'TSX without React imports can cause runtime errors and unexpected behavior'));
|
|
85
|
+
}
|
|
86
|
+
// Check #4: Unsafe type assertions
|
|
87
|
+
if (lowerLine.includes(' as ') &&
|
|
88
|
+
(lowerLine.includes('as string') || lowerLine.includes('as number') ||
|
|
89
|
+
lowerLine.includes('as object'))) {
|
|
90
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('unsafe-type-assertion', 'Unsafe type assertion without runtime validation', 'Add runtime type validation before type assertions', index + 1, 'Unsafe type assertions can cause runtime errors with malicious or unexpected data', 'const value = (untrustedInput as string).toUpperCase(); // crashes if not string', [
|
|
91
|
+
'Runtime type errors and crashes',
|
|
92
|
+
'Injection attacks through type confusion',
|
|
93
|
+
'Unexpected method calls on wrong types',
|
|
94
|
+
'Data corruption and security bypass'
|
|
95
|
+
], 'const value = (userData.field as string).toUpperCase();', 'const field = userData.field;\nif (typeof field === "string") {\n const value = field.toUpperCase();\n}', 'Type assertions without validation can cause runtime errors with untrusted data'));
|
|
96
|
+
}
|
|
97
|
+
// Check #5: Missing null checks with potentially unsafe operations
|
|
98
|
+
if ((lowerLine.includes('.') &&
|
|
99
|
+
(lowerLine.includes('length') || lowerLine.includes('push') || lowerLine.includes('pop'))) &&
|
|
100
|
+
!lowerLine.includes('if') && !lowerLine.includes('&&') && !lowerLine.includes('?.')) {
|
|
101
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('missing-null-checks', 'Potentially unsafe operation without null checks', 'Use optional chaining (?.) or null checks before property access', index + 1, 'Null pointer access can cause application crashes and denial of service', 'const length = possiblyNullArray.length; // crashes if null', [
|
|
102
|
+
'Application crashes and downtime',
|
|
103
|
+
'Null pointer exceptions',
|
|
104
|
+
'Service unavailability',
|
|
105
|
+
'User experience degradation'
|
|
106
|
+
], 'const length = array.length;', 'const length = array?.length || 0;', 'Accessing properties without null checks can cause runtime errors'));
|
|
107
|
+
}
|
|
108
|
+
// Check #6: Console.log in production builds - REMOVED (Duplicate)
|
|
109
|
+
// This check is already handled by code-quality.ts Check #17
|
|
110
|
+
// Removing to fix duplicate detection issue (lines 27, 84 reported twice)
|
|
111
|
+
// Check #7: Development-only code in production
|
|
112
|
+
if (lowerLine.includes('process.env.node_env') && lowerLine.includes('development')) {
|
|
113
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('development-code', 'Development environment checks may indicate debugging code', 'Ensure development-only code is properly excluded from production builds', index + 1, 'Development code in production can expose debugging information and security flaws', 'if (process.env.NODE_ENV === "development") { console.log(secrets); }', [
|
|
114
|
+
'Debugging information exposure',
|
|
115
|
+
'Performance degradation',
|
|
116
|
+
'Security feature bypass',
|
|
117
|
+
'Sensitive data logging'
|
|
118
|
+
], 'if (process.env.NODE_ENV === "development") {\n console.log(sensitiveData);\n}', '// Development code should be removed or properly configured for production', 'Development code should be excluded from production to avoid security risks'));
|
|
119
|
+
}
|
|
120
|
+
// Check #8: Unsafe JSON parsing without validation
|
|
121
|
+
if (lowerLine.includes('json.parse') && !lowerLine.includes('try') &&
|
|
122
|
+
!lines.slice(Math.max(0, index - 2), index + 3).some(nearLine => nearLine.toLowerCase().includes('try') || nearLine.toLowerCase().includes('catch'))) {
|
|
123
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('unsafe-json-parse', 'Unsafe JSON parsing without error handling or validation', 'Wrap JSON.parse in try-catch and validate the parsed data structure', index + 1, 'Malformed JSON can cause crashes and enable prototype pollution attacks', 'const data = JSON.parse(untrustedInput); // can crash or pollute prototype', [
|
|
124
|
+
'Application crashes from malformed JSON',
|
|
125
|
+
'Prototype pollution attacks',
|
|
126
|
+
'Denial of service through parsing errors',
|
|
127
|
+
'Injection attacks through unvalidated data'
|
|
128
|
+
], 'const data = JSON.parse(userInput);', 'try {\n const data = JSON.parse(userInput);\n // Validate data structure here\n} catch (error) {\n // Handle parsing errors\n}', 'Unhandled JSON parsing can cause crashes and enable injection attacks'));
|
|
129
|
+
}
|
|
130
|
+
// =============================================================================
|
|
131
|
+
// PHASE B - Enhanced Helmet Configuration Detection (Dec 20, 2025)
|
|
132
|
+
// =============================================================================
|
|
133
|
+
// 10. Missing or misconfigured Helmet middleware - HIGH
|
|
134
|
+
// Pattern: helmet() with disabled security features or missing entirely
|
|
135
|
+
// Detect helmet() with disabled features
|
|
136
|
+
if (trimmedLine.includes('helmet(') && trimmedLine.includes('{')) {
|
|
137
|
+
// Check for disabled CSP
|
|
138
|
+
if (trimmedLine.includes('contentSecurityPolicy') && trimmedLine.includes('false')) {
|
|
139
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('helmet-misconfiguration', 'Helmet CSP (Content Security Policy) disabled - leaves app vulnerable to XSS', 'Enable CSP with strict directives', index + 1, 'Content Security Policy is one of the most important security headers. Disabling it removes a critical defense against XSS attacks, allowing attackers to inject malicious scripts.', 'app.use(helmet({ contentSecurityPolicy: false })); // Attack: XSS payloads execute freely', [
|
|
140
|
+
'Cross-Site Scripting (XSS) attacks',
|
|
141
|
+
'Data theft via malicious scripts',
|
|
142
|
+
'Session hijacking',
|
|
143
|
+
'Phishing attacks',
|
|
144
|
+
'Malware distribution'
|
|
145
|
+
], 'app.use(helmet({ contentSecurityPolicy: false }));', 'app.use(helmet({\n contentSecurityPolicy: {\n directives: {\n defaultSrc: ["\'self\'"],\n scriptSrc: ["\'self\'"],\n styleSrc: ["\'self\'"]\n }\n }\n}));', 'Always enable CSP with strict directives. Never set contentSecurityPolicy: false in production.'));
|
|
146
|
+
}
|
|
147
|
+
// Check for disabled HSTS
|
|
148
|
+
if (trimmedLine.includes('hsts') && trimmedLine.includes('false')) {
|
|
149
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('helmet-misconfiguration', 'Helmet HSTS (Strict-Transport-Security) disabled - allows downgrade attacks', 'Enable HSTS with maxAge >= 31536000', index + 1, 'HTTP Strict Transport Security forces browsers to use HTTPS. Disabling it allows man-in-the-middle attacks to downgrade connections to unencrypted HTTP.', 'app.use(helmet({ hsts: false })); // Attack: MITM downgrades HTTPS to HTTP', [
|
|
150
|
+
'Man-in-the-middle attacks',
|
|
151
|
+
'SSL stripping attacks',
|
|
152
|
+
'Session hijacking',
|
|
153
|
+
'Credential theft',
|
|
154
|
+
'Traffic eavesdropping'
|
|
155
|
+
], 'app.use(helmet({ hsts: false }));', 'app.use(helmet({\n hsts: {\n maxAge: 31536000,\n includeSubDomains: true,\n preload: true\n }\n}));', 'Always enable HSTS with maxAge of at least 1 year (31536000 seconds). Include subdomains and consider preload.'));
|
|
156
|
+
}
|
|
157
|
+
// Check for unsafe CSP directives
|
|
158
|
+
if ((trimmedLine.includes('unsafe-inline') || trimmedLine.includes('unsafe-eval') ||
|
|
159
|
+
(trimmedLine.includes('defaultSrc') && trimmedLine.includes('*'))) &&
|
|
160
|
+
trimmedLine.includes('contentSecurityPolicy')) {
|
|
161
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('helmet-misconfiguration', 'Helmet CSP with unsafe directives (unsafe-inline, unsafe-eval, or *)', 'Remove unsafe-inline, unsafe-eval, and * from CSP directives', index + 1, 'Using unsafe-inline, unsafe-eval, or wildcard (*) in Content Security Policy defeats its purpose by allowing execution of inline scripts and eval(), which are primary XSS attack vectors.', 'helmet({ contentSecurityPolicy: { directives: { scriptSrc: ["\'unsafe-inline\'"] } } })', [
|
|
162
|
+
'XSS attacks despite CSP being enabled',
|
|
163
|
+
'Inline script execution',
|
|
164
|
+
'eval() code execution',
|
|
165
|
+
'Loading scripts from any origin (*)'
|
|
166
|
+
], 'app.use(helmet({\n contentSecurityPolicy: {\n directives: { scriptSrc: ["\'unsafe-inline\'", "*"] }\n }\n}));', 'app.use(helmet({\n contentSecurityPolicy: {\n directives: {\n defaultSrc: ["\'self\'"],\n scriptSrc: ["\'self\'"],\n styleSrc: ["\'self\'"]\n }\n }\n}));', 'Never use unsafe-inline, unsafe-eval, or * in CSP directives. Use nonces or hashes for inline scripts if needed.'));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
// =============================================================================
|
|
170
|
+
// PHASE B - Missing CSRF Protection Detection (Dec 20, 2025)
|
|
171
|
+
// =============================================================================
|
|
172
|
+
// Track CSRF middleware usage
|
|
173
|
+
if (trimmedLine.includes('csurf') || trimmedLine.includes('csrf')) {
|
|
174
|
+
hasCsrfMiddleware = true;
|
|
175
|
+
}
|
|
176
|
+
// 11. Missing CSRF Protection on state-changing routes - HIGH
|
|
177
|
+
// Pattern: POST/PUT/DELETE/PATCH routes without CSRF middleware
|
|
178
|
+
const stateChangingRoute = trimmedLine.match(/\.(post|put|delete|patch)\s*\(/);
|
|
179
|
+
if (stateChangingRoute && !hasCsrfMiddleware) {
|
|
180
|
+
const method = stateChangingRoute[1].toUpperCase();
|
|
181
|
+
// Check if route handles sensitive operations
|
|
182
|
+
const isSensitiveRoute = trimmedLine.includes('/login') ||
|
|
183
|
+
trimmedLine.includes('/signup') ||
|
|
184
|
+
trimmedLine.includes('/register') ||
|
|
185
|
+
trimmedLine.includes('/transfer') ||
|
|
186
|
+
trimmedLine.includes('/payment') ||
|
|
187
|
+
trimmedLine.includes('/delete') ||
|
|
188
|
+
trimmedLine.includes('/update') ||
|
|
189
|
+
trimmedLine.includes('/create');
|
|
190
|
+
if (isSensitiveRoute) {
|
|
191
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('missing-csrf-protection', `Missing CSRF protection on ${method} route - vulnerable to cross-site request forgery`, 'Add CSRF middleware (csurf) to protect state-changing routes', index + 1, 'Cross-Site Request Forgery (CSRF) allows attackers to trick authenticated users into executing unwanted actions. Without CSRF tokens, an attacker can forge requests using the victim\'s session cookies.', 'app.post(\'/transfer\', (req, res) => { transferMoney(req.body.amount, req.body.to); }); // Attack: Victim clicks malicious link, money transferred', [
|
|
192
|
+
'Unauthorized state changes (money transfer, password change)',
|
|
193
|
+
'Account takeover via forced actions',
|
|
194
|
+
'Data manipulation and deletion',
|
|
195
|
+
'Privilege escalation attacks'
|
|
196
|
+
], `app.${stateChangingRoute[1]}(...)`, 'import csrf from \'csurf\';\nconst csrfProtection = csrf({ cookie: true });\napp.use(csrfProtection);\n' + `app.${stateChangingRoute[1]}(..., csrfProtection, handler);`, 'Always use CSRF protection for state-changing routes (POST, PUT, DELETE, PATCH) that use cookie-based authentication'));
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
// 12. Cookie session without SameSite attribute - HIGH
|
|
200
|
+
// Pattern: session cookies without SameSite protection
|
|
201
|
+
if ((trimmedLine.includes('session(') || trimmedLine.includes('cookie(')) &&
|
|
202
|
+
trimmedLine.includes('{') &&
|
|
203
|
+
!trimmedLine.includes('sameSite')) {
|
|
204
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('missing-samesite-cookie', 'Session cookie without SameSite attribute - vulnerable to CSRF', 'Set SameSite attribute to \'Strict\' or \'Lax\' for session cookies', index + 1, 'Without the SameSite cookie attribute, browsers send cookies with cross-origin requests, enabling CSRF attacks. The SameSite attribute prevents browsers from sending cookies with cross-site requests.', 'app.use(session({ secret: \'key\', cookie: { httpOnly: true } })); // Missing SameSite', [
|
|
205
|
+
'Cross-Site Request Forgery (CSRF) attacks',
|
|
206
|
+
'Session hijacking via cross-origin requests',
|
|
207
|
+
'Unauthorized actions on behalf of authenticated users'
|
|
208
|
+
], 'cookie: { httpOnly: true }', 'cookie: { httpOnly: true, sameSite: \'Strict\', secure: true }', 'Always set SameSite attribute for session cookies. Use \'Strict\' for maximum protection or \'Lax\' for better compatibility'));
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
return vulnerabilities;
|
|
212
|
+
}
|
|
213
|
+
//# sourceMappingURL=security-misconfiguration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-misconfiguration.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/typescript/security-checks/security-misconfiguration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* TypeScript Type Security Checks
|
|
3
|
+
* TypeScript-specific security issues related to type assertions and type safety
|
|
4
|
+
*
|
|
5
|
+
* Detects dangerous type assertions and type safety bypasses in security-sensitive contexts.
|
|
6
|
+
*/
|
|
7
|
+
import { SecurityVulnerability } from '../../types';
|
|
8
|
+
/**
|
|
9
|
+
* Checks for TypeScript-specific security vulnerabilities related to type safety
|
|
10
|
+
*
|
|
11
|
+
* Covers:
|
|
12
|
+
* - Check #19: Type assertion "as any" in sensitive contexts (HIGH)
|
|
13
|
+
* - Check #20: Non-null assertions (!) in security code (MEDIUM)
|
|
14
|
+
*
|
|
15
|
+
* @param lines - Array of code lines
|
|
16
|
+
* @returns Array of security vulnerabilities found
|
|
17
|
+
*/
|
|
18
|
+
export declare function checkTypeSecurity(lines: string[]): SecurityVulnerability[];
|
|
19
|
+
//# sourceMappingURL=type-security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-security.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/typescript/security-checks/type-security.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EAAE,GACd,qBAAqB,EAAE,CAgEzB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* TypeScript Type Security Checks
|
|
4
|
+
* TypeScript-specific security issues related to type assertions and type safety
|
|
5
|
+
*
|
|
6
|
+
* Detects dangerous type assertions and type safety bypasses in security-sensitive contexts.
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.checkTypeSecurity = checkTypeSecurity;
|
|
10
|
+
const createVulnerability_1 = require("../utils/createVulnerability");
|
|
11
|
+
/**
|
|
12
|
+
* Checks for TypeScript-specific security vulnerabilities related to type safety
|
|
13
|
+
*
|
|
14
|
+
* Covers:
|
|
15
|
+
* - Check #19: Type assertion "as any" in sensitive contexts (HIGH)
|
|
16
|
+
* - Check #20: Non-null assertions (!) in security code (MEDIUM)
|
|
17
|
+
*
|
|
18
|
+
* @param lines - Array of code lines
|
|
19
|
+
* @returns Array of security vulnerabilities found
|
|
20
|
+
*/
|
|
21
|
+
function checkTypeSecurity(lines) {
|
|
22
|
+
const vulnerabilities = [];
|
|
23
|
+
let inMultiLineComment = false;
|
|
24
|
+
lines.forEach((line, index) => {
|
|
25
|
+
const lineNumber = index + 1;
|
|
26
|
+
const trimmed = line.trim();
|
|
27
|
+
// Track multi-line comment blocks (/* ... */)
|
|
28
|
+
if (trimmed.includes('/*')) {
|
|
29
|
+
inMultiLineComment = true;
|
|
30
|
+
}
|
|
31
|
+
if (trimmed.includes('*/')) {
|
|
32
|
+
inMultiLineComment = false;
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
// Skip comments and empty lines
|
|
36
|
+
if (!trimmed || inMultiLineComment || trimmed.startsWith('//') || trimmed.startsWith('*'))
|
|
37
|
+
return;
|
|
38
|
+
// TypeScript-specific: 19. 'as any' in security-sensitive contexts - HIGH
|
|
39
|
+
if (trimmed.includes('as any') && (trimmed.includes('eval') || trimmed.includes('innerHTML'))) {
|
|
40
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('type-assertion-security', 'Type assertion "as any" in sensitive context', 'Use specific types to maintain security', lineNumber, 'Using "as any" bypasses TypeScript\'s type checking, potentially allowing unsafe values to reach security-critical operations like eval() or innerHTML.', '(userInput as any).eval(); // Bypasses type safety, allows arbitrary code execution', [
|
|
41
|
+
'Type safety bypass',
|
|
42
|
+
'Runtime security vulnerabilities',
|
|
43
|
+
'Code injection risks',
|
|
44
|
+
'XSS vulnerabilities'
|
|
45
|
+
], 'const unsafeCode = userInput as any;\neval(unsafeCode); // DANGEROUS: no type validation', 'const validatedCode: string = validateCode(userInput);\n// Don\'t use eval() at all, but if necessary, ensure proper validation', 'Avoid "as any" in security-sensitive contexts. Use proper type guards and validation instead of type assertions'));
|
|
46
|
+
}
|
|
47
|
+
// TypeScript-specific: 20. Non-null assertions in security contexts - MEDIUM
|
|
48
|
+
if (trimmed.includes('!') && trimmed.match(/password|token|secret|auth/i)) {
|
|
49
|
+
vulnerabilities.push((0, createVulnerability_1.createTypeScriptSecurityVulnerability)('non-null-assertion-security', 'Non-null assertion (!) in security code', 'Explicitly check for null/undefined', lineNumber, 'Non-null assertion operator (!) bypasses null checks in security-critical code, potentially causing authentication bypasses or crashes.', 'if (user.authToken!) { authenticate(); } // If authToken is null/undefined, it may still proceed incorrectly', [
|
|
50
|
+
'Authentication bypass',
|
|
51
|
+
'Authorization failures',
|
|
52
|
+
'Runtime crashes exposing sensitive errors',
|
|
53
|
+
'Security check bypass'
|
|
54
|
+
], 'const token = getAuthToken()!; // Assumes token exists, crashes if null', 'const token = getAuthToken();\nif (!token) throw new Error("Missing auth token");\n// Now safely use token', 'Always explicitly check for null/undefined in security-critical code. Never use ! operator on authentication/authorization values'));
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
return vulnerabilities;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=type-security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-security.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/typescript/security-checks/type-security.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAeH,8CAkEC;AA9ED,sEAAqF;AAErF;;;;;;;;;GASG;AACH,SAAgB,iBAAiB,CAC/B,KAAe;IAEf,MAAM,eAAe,GAA4B,EAAE,CAAC;IACpD,IAAI,kBAAkB,GAAG,KAAK,CAAC;IAE/B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,MAAM,UAAU,GAAG,KAAK,GAAG,CAAC,CAAC;QAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAE5B,8CAA8C;QAC9C,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,kBAAkB,GAAG,IAAI,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC3B,kBAAkB,GAAG,KAAK,CAAC;YAC3B,OAAO;QACT,CAAC;QAED,gCAAgC;QAChC,IAAI,CAAC,OAAO,IAAI,kBAAkB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO;QAElG,0EAA0E;QAC1E,IAAI,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC;YAC9F,eAAe,CAAC,IAAI,CAAC,IAAA,2DAAqC,EACxD,yBAAyB,EACzB,8CAA8C,EAC9C,yCAAyC,EACzC,UAAU,EACV,yJAAyJ,EACzJ,qFAAqF,EACrF;gBACE,oBAAoB;gBACpB,kCAAkC;gBAClC,sBAAsB;gBACtB,qBAAqB;aACtB,EACD,0FAA0F,EAC1F,iIAAiI,EACjI,iHAAiH,CAClH,CAAC,CAAC;QACL,CAAC;QAED,6EAA6E;QAC7E,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,EAAE,CAAC;YAC1E,eAAe,CAAC,IAAI,CAAC,IAAA,2DAAqC,EACxD,6BAA6B,EAC7B,yCAAyC,EACzC,qCAAqC,EACrC,UAAU,EACV,yIAAyI,EACzI,8GAA8G,EAC9G;gBACE,uBAAuB;gBACvB,wBAAwB;gBACxB,2CAA2C;gBAC3C,uBAAuB;aACxB,EACD,yEAAyE,EACzE,4GAA4G,EAC5G,mIAAmI,CACpI,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as ts from 'typescript';
|
|
2
|
+
import { SecurityIssue } from '../../types';
|
|
3
|
+
export interface TypeCheckOptions {
|
|
4
|
+
strict: boolean;
|
|
5
|
+
strictNullChecks: boolean;
|
|
6
|
+
noImplicitAny: boolean;
|
|
7
|
+
strictFunctionTypes: boolean;
|
|
8
|
+
strictPropertyInitialization: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* TypeScript Compiler API Integration
|
|
12
|
+
* Purpose: Detect actual TypeScript type errors (95%+ coverage)
|
|
13
|
+
* Created: 2025-12-02 to address critical detection gap (5% → 95%+)
|
|
14
|
+
*/
|
|
15
|
+
export declare function getTypeScriptDiagnostics(code: string, fileName?: string, options?: Partial<TypeCheckOptions>): ts.Diagnostic[];
|
|
16
|
+
export declare function convertDiagnosticsToIssues(diagnostics: ts.Diagnostic[]): SecurityIssue[];
|
|
17
|
+
//# sourceMappingURL=type-checker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"type-checker.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/typescript/type-checker.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,YAAY,CAAC;AACjC,OAAO,EAAE,aAAa,EAAoC,MAAM,aAAa,CAAC;AAE9E,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,aAAa,EAAE,OAAO,CAAC;IACvB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,4BAA4B,EAAE,OAAO,CAAC;CACvC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,IAAI,EAAE,MAAM,EACZ,QAAQ,SAAY,EACpB,OAAO,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,GAClC,EAAE,CAAC,UAAU,EAAE,CAgQjB;AA+CD,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,EAAE,CAAC,UAAU,EAAE,GAC3B,aAAa,EAAE,CAuBjB"}
|