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,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Java Logging Failures Security Checks
|
|
4
|
+
* OWASP A09:2025 - Security Logging and Monitoring Failures
|
|
5
|
+
*
|
|
6
|
+
* Detects logging security failures in Java applications.
|
|
7
|
+
* Updated for OWASP 2025 with security logging patterns (Phase 7B Day 9).
|
|
8
|
+
*/
|
|
9
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
+
exports.checkLoggingFailures = checkLoggingFailures;
|
|
11
|
+
const createVulnerability_1 = require("../utils/createVulnerability");
|
|
12
|
+
/**
|
|
13
|
+
* Checks for logging security vulnerabilities in Java code
|
|
14
|
+
*
|
|
15
|
+
* Covers:
|
|
16
|
+
* - Check #1: Missing security event logging (MEDIUM)
|
|
17
|
+
* - Check #2: System.out.println in production (LOW)
|
|
18
|
+
*
|
|
19
|
+
* @param lines - Array of code lines
|
|
20
|
+
* @returns Array of security vulnerabilities found
|
|
21
|
+
*/
|
|
22
|
+
function checkLoggingFailures(lines) {
|
|
23
|
+
const vulnerabilities = [];
|
|
24
|
+
let inMultiLineComment = false;
|
|
25
|
+
lines.forEach((line, index) => {
|
|
26
|
+
const trimmedLine = line.trim();
|
|
27
|
+
// CRITICAL: Track multi-line comment blocks (/* ... */)
|
|
28
|
+
if (trimmedLine.includes('/*')) {
|
|
29
|
+
inMultiLineComment = true;
|
|
30
|
+
}
|
|
31
|
+
if (trimmedLine.includes('*/')) {
|
|
32
|
+
inMultiLineComment = false;
|
|
33
|
+
return; // Skip the line with */
|
|
34
|
+
}
|
|
35
|
+
// CRITICAL: Skip all lines inside multi-line comments and single-line comments
|
|
36
|
+
if (!trimmedLine ||
|
|
37
|
+
inMultiLineComment ||
|
|
38
|
+
trimmedLine.startsWith('//')) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
const lowerLine = trimmedLine.toLowerCase();
|
|
42
|
+
// Check #1: Missing security event logging
|
|
43
|
+
// Look for security-sensitive operations without logging
|
|
44
|
+
const securityKeywords = [
|
|
45
|
+
'login', 'authenticate', 'authorization', 'accessdenied',
|
|
46
|
+
'deleteuser', 'deleteaccount', 'resetpassword', 'changepassword'
|
|
47
|
+
];
|
|
48
|
+
const hasSecurityOperation = securityKeywords.some(keyword => lowerLine.includes(keyword));
|
|
49
|
+
if (hasSecurityOperation) {
|
|
50
|
+
// Check if it's a method declaration
|
|
51
|
+
const isMethodDeclaration = lowerLine.match(/^(public|private|protected)\s+\w+\s+\w+\s*\(/);
|
|
52
|
+
if (isMethodDeclaration) {
|
|
53
|
+
// Look for logging in the next 10 lines (method body)
|
|
54
|
+
const nextLines = lines.slice(index + 1, Math.min(index + 11, lines.length));
|
|
55
|
+
const hasLogging = nextLines.some(nextLine => {
|
|
56
|
+
const lowerNext = nextLine.toLowerCase();
|
|
57
|
+
return lowerNext.includes('logger.') ||
|
|
58
|
+
lowerNext.includes('log.info') ||
|
|
59
|
+
lowerNext.includes('log.warn') ||
|
|
60
|
+
lowerNext.includes('log.error') ||
|
|
61
|
+
lowerNext.includes('log.debug');
|
|
62
|
+
});
|
|
63
|
+
if (!hasLogging) {
|
|
64
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)('missing-security-logging', 'security event missing audit logging', 'Add logger statements for security events (authentication, authorization, access control)', index + 1, 'Missing security event logging prevents detection of attacks, makes incident response impossible, and violates compliance requirements (PCI-DSS, HIPAA, SOC 2)', 'public void login(String user, String pass) {\n authenticate(user, pass); // No logging!\n}', [
|
|
65
|
+
'Cannot detect ongoing attacks or breaches',
|
|
66
|
+
'No audit trail for compliance (PCI-DSS 10.2)',
|
|
67
|
+
'Incident response and forensics impossible',
|
|
68
|
+
'Cannot identify compromised accounts',
|
|
69
|
+
'Violations go undetected'
|
|
70
|
+
], 'public void login(String username, String password) {\n User user = authenticate(username, password);\n}', 'public void login(String username, String password) {\n logger.info("Login attempt for user: {}", username);\n User user = authenticate(username, password);\n logger.info("Successful login for user: {}", username);\n}', 'Always log security events: authentication, authorization failures, access control violations, data modifications'));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Check #2: System.out.println / System.err.println in production
|
|
75
|
+
if (lowerLine.includes('system.out.println') ||
|
|
76
|
+
lowerLine.includes('system.err.println') ||
|
|
77
|
+
lowerLine.includes('.printstacktrace()')) {
|
|
78
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)('system-out-println', 'System.out/err.println detected - use proper logging framework', 'Replace with SLF4J logger (logger.info, logger.error)', index + 1, 'System.out.println writes to stdout which is not captured by logging systems, cannot be configured, filtered, or monitored. Production systems need centralized logging for monitoring and alerting', 'System.out.println("Processing order: " + orderId); // Lost in production!', [
|
|
79
|
+
'No centralized logging or monitoring',
|
|
80
|
+
'Cannot be filtered by severity or category',
|
|
81
|
+
'No log rotation or retention policies',
|
|
82
|
+
'Performance impact (synchronous, blocking I/O)',
|
|
83
|
+
'Violates 12-factor app principles'
|
|
84
|
+
], 'System.out.println("User logged in: " + username);', 'logger.info("User logged in: {}", username);', 'Use SLF4J or similar logging frameworks that support log levels, filtering, rotation, and centralized aggregation'));
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
return vulnerabilities;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=logging-failures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logging-failures.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/java/security-checks/logging-failures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Java 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: Spring Security configs, logging levels, default settings, etc.
|
|
7
|
+
*/
|
|
8
|
+
import { SecurityVulnerability } from '../../types';
|
|
9
|
+
/**
|
|
10
|
+
* Checks for security misconfiguration vulnerabilities in Java code
|
|
11
|
+
*
|
|
12
|
+
* Covers:
|
|
13
|
+
* - Check #1: Spring Security disabled (HIGH)
|
|
14
|
+
* - Check #2: Debug logging enabled (MEDIUM)
|
|
15
|
+
* - Check #3: Default admin credentials (CRITICAL)
|
|
16
|
+
* - Check #4: Insecure random for security tokens (MEDIUM)
|
|
17
|
+
* - Check #5: Weak SSL/TLS configuration (HIGH)
|
|
18
|
+
* - Check #6: Exposed management endpoints (HIGH)
|
|
19
|
+
* - Check #7: Error details in exceptions (MEDIUM)
|
|
20
|
+
* - Check #8: Insecure deserialization settings (HIGH)
|
|
21
|
+
*
|
|
22
|
+
* @param lines - Array of code lines
|
|
23
|
+
* @returns Array of security vulnerabilities found
|
|
24
|
+
*/
|
|
25
|
+
export declare function checkSecurityMisconfiguration(lines: string[]): SecurityVulnerability[];
|
|
26
|
+
//# sourceMappingURL=security-misconfiguration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-misconfiguration.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/java/security-checks/security-misconfiguration.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,6BAA6B,CAC3C,KAAK,EAAE,MAAM,EAAE,GACd,qBAAqB,EAAE,CA2TzB"}
|
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Java 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: Spring Security configs, logging levels, default settings, 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 Java code
|
|
14
|
+
*
|
|
15
|
+
* Covers:
|
|
16
|
+
* - Check #1: Spring Security disabled (HIGH)
|
|
17
|
+
* - Check #2: Debug logging enabled (MEDIUM)
|
|
18
|
+
* - Check #3: Default admin credentials (CRITICAL)
|
|
19
|
+
* - Check #4: Insecure random for security tokens (MEDIUM)
|
|
20
|
+
* - Check #5: Weak SSL/TLS configuration (HIGH)
|
|
21
|
+
* - Check #6: Exposed management endpoints (HIGH)
|
|
22
|
+
* - Check #7: Error details in exceptions (MEDIUM)
|
|
23
|
+
* - Check #8: Insecure deserialization settings (HIGH)
|
|
24
|
+
*
|
|
25
|
+
* @param lines - Array of code lines
|
|
26
|
+
* @returns Array of security vulnerabilities found
|
|
27
|
+
*/
|
|
28
|
+
function checkSecurityMisconfiguration(lines) {
|
|
29
|
+
const vulnerabilities = [];
|
|
30
|
+
let inMultiLineComment = false;
|
|
31
|
+
lines.forEach((line, index) => {
|
|
32
|
+
const trimmedLine = line.trim();
|
|
33
|
+
// CRITICAL: Track multi-line comment blocks (/* ... */)
|
|
34
|
+
if (trimmedLine.includes('/*')) {
|
|
35
|
+
inMultiLineComment = true;
|
|
36
|
+
}
|
|
37
|
+
if (trimmedLine.includes('*/')) {
|
|
38
|
+
inMultiLineComment = false;
|
|
39
|
+
return; // Skip the line with */
|
|
40
|
+
}
|
|
41
|
+
// CRITICAL: Skip all lines inside multi-line comments and single-line comments
|
|
42
|
+
// FIX (Dec 6, 2025): Removed trimmedLine.startsWith('*') check
|
|
43
|
+
// Reason: Lines in multi-line comments can start with '-', text, etc. (not just '*')
|
|
44
|
+
// Example: "- Default credentials: String password = \"admin\"" in documentation was being detected
|
|
45
|
+
// Solution: Rely on inMultiLineComment flag only
|
|
46
|
+
if (!trimmedLine ||
|
|
47
|
+
inMultiLineComment ||
|
|
48
|
+
trimmedLine.startsWith('//')) {
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
const lowerLine = trimmedLine.toLowerCase();
|
|
52
|
+
// Check #1: Spring Security disabled or misconfigured
|
|
53
|
+
if ((lowerLine.includes('@enablewebsecurity') && lowerLine.includes('false')) ||
|
|
54
|
+
(lowerLine.includes('security') && lowerLine.includes('disable')) ||
|
|
55
|
+
lowerLine.includes('permitall()')) {
|
|
56
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)({
|
|
57
|
+
category: 'Security Misconfiguration',
|
|
58
|
+
severity: 'HIGH',
|
|
59
|
+
confidence: 'HIGH',
|
|
60
|
+
message: 'Spring Security may be disabled or misconfigured',
|
|
61
|
+
line: index + 1,
|
|
62
|
+
suggestion: 'Review security configuration and ensure proper authentication/authorization',
|
|
63
|
+
owasp: 'A02:2025',
|
|
64
|
+
cwe: 'CWE-16',
|
|
65
|
+
pciDss: 'Requirement 7.1',
|
|
66
|
+
remediation: {
|
|
67
|
+
explanation: 'Disabling security controls exposes application to unauthorized access',
|
|
68
|
+
before: 'http.authorizeRequests().anyRequest().permitAll()',
|
|
69
|
+
after: 'http.authorizeRequests().anyRequest().authenticated()'
|
|
70
|
+
},
|
|
71
|
+
attackVector: {
|
|
72
|
+
description: 'Disabled security controls allow unauthorized access to protected resources',
|
|
73
|
+
realWorldImpact: [
|
|
74
|
+
'Complete bypass of authentication mechanisms',
|
|
75
|
+
'Unauthorized access to sensitive endpoints',
|
|
76
|
+
'Administrative function exposure',
|
|
77
|
+
'Data access without authorization'
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
// Check #2: Debug logging enabled in production
|
|
83
|
+
if ((lowerLine.includes('logger.setlevel') && lowerLine.includes('debug')) ||
|
|
84
|
+
(lowerLine.includes('log4j') && lowerLine.includes('debug')) ||
|
|
85
|
+
(lowerLine.includes('logging.level') && lowerLine.includes('debug'))) {
|
|
86
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)({
|
|
87
|
+
category: 'Security Misconfiguration',
|
|
88
|
+
severity: 'MEDIUM',
|
|
89
|
+
confidence: 'MEDIUM',
|
|
90
|
+
message: 'Debug logging may be enabled in production environment',
|
|
91
|
+
line: index + 1,
|
|
92
|
+
suggestion: 'Use INFO or WARN level logging in production environments',
|
|
93
|
+
owasp: 'A02:2025',
|
|
94
|
+
cwe: 'CWE-489',
|
|
95
|
+
pciDss: 'Requirement 6.1',
|
|
96
|
+
remediation: {
|
|
97
|
+
explanation: 'Debug logging can expose sensitive information and impact performance',
|
|
98
|
+
before: 'logger.setLevel(Level.DEBUG)',
|
|
99
|
+
after: 'logger.setLevel(Level.INFO) // or use configuration files'
|
|
100
|
+
},
|
|
101
|
+
attackVector: {
|
|
102
|
+
description: 'Debug logs may contain sensitive data, stack traces, and system internals',
|
|
103
|
+
realWorldImpact: [
|
|
104
|
+
'Sensitive data exposure in log files',
|
|
105
|
+
'System architecture revelation',
|
|
106
|
+
'Performance degradation',
|
|
107
|
+
'Storage space exhaustion'
|
|
108
|
+
]
|
|
109
|
+
}
|
|
110
|
+
}));
|
|
111
|
+
}
|
|
112
|
+
// Check #3: Default admin credentials
|
|
113
|
+
if ((lowerLine.includes('username') &&
|
|
114
|
+
(lowerLine.includes('"admin"') || lowerLine.includes("'admin'"))) ||
|
|
115
|
+
(lowerLine.includes('password') &&
|
|
116
|
+
(lowerLine.includes('"admin"') || lowerLine.includes("'admin'") ||
|
|
117
|
+
lowerLine.includes('"password"') || lowerLine.includes("'password'")))) {
|
|
118
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)({
|
|
119
|
+
category: 'Security Misconfiguration',
|
|
120
|
+
severity: 'CRITICAL',
|
|
121
|
+
confidence: 'HIGH',
|
|
122
|
+
message: 'Default admin credentials detected in configuration',
|
|
123
|
+
line: index + 1,
|
|
124
|
+
suggestion: 'Use strong, unique credentials stored in secure configuration',
|
|
125
|
+
owasp: 'A02:2025',
|
|
126
|
+
cwe: 'CWE-798',
|
|
127
|
+
pciDss: 'Requirement 2.1',
|
|
128
|
+
remediation: {
|
|
129
|
+
explanation: 'Default credentials are well-known and provide immediate unauthorized access',
|
|
130
|
+
before: 'String password = "admin";',
|
|
131
|
+
after: 'String password = System.getenv("ADMIN_PASSWORD");'
|
|
132
|
+
},
|
|
133
|
+
attackVector: {
|
|
134
|
+
description: 'Default credentials are publicly known and easily exploited',
|
|
135
|
+
realWorldImpact: [
|
|
136
|
+
'Immediate administrative access',
|
|
137
|
+
'Complete system compromise',
|
|
138
|
+
'Data theft and manipulation',
|
|
139
|
+
'Privilege escalation opportunities'
|
|
140
|
+
]
|
|
141
|
+
}
|
|
142
|
+
}));
|
|
143
|
+
}
|
|
144
|
+
// Check #4: Insecure random for security tokens
|
|
145
|
+
// FIX (Dec 6, 2025): Added method context detection (not just same-line keywords)
|
|
146
|
+
// Example missed: public String generateSecurityToken() { return String.valueOf(Math.random()); }
|
|
147
|
+
// Now checks previous 5 lines for security method names
|
|
148
|
+
if (lowerLine.includes('math.random()')) {
|
|
149
|
+
const hasSameLineKeyword = lowerLine.includes('token') || lowerLine.includes('session') ||
|
|
150
|
+
lowerLine.includes('password') || lowerLine.includes('secret');
|
|
151
|
+
// Check previous 5 lines for security method context
|
|
152
|
+
const prevLines = lines.slice(Math.max(0, index - 5), index);
|
|
153
|
+
const hasContextKeyword = prevLines.some(l => l.toLowerCase().match(/password|token|key|secret|salt|nonce|session|auth|security/i) ||
|
|
154
|
+
l.match(/(public|private|protected)\s+\w+\s+(generate|create)(Token|Key|Password|Secret|Session|Auth|Security)/i));
|
|
155
|
+
if (hasSameLineKeyword || hasContextKeyword) {
|
|
156
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)({
|
|
157
|
+
category: 'Security Misconfiguration',
|
|
158
|
+
severity: 'MEDIUM',
|
|
159
|
+
confidence: 'HIGH',
|
|
160
|
+
message: 'Insecure random number generator used for security-sensitive operations',
|
|
161
|
+
line: index + 1,
|
|
162
|
+
suggestion: 'Use SecureRandom for cryptographically secure random numbers',
|
|
163
|
+
owasp: 'A02:2025',
|
|
164
|
+
cwe: 'CWE-338',
|
|
165
|
+
pciDss: 'Requirement 3.4',
|
|
166
|
+
remediation: {
|
|
167
|
+
explanation: 'Math.random() is predictable and unsuitable for security tokens',
|
|
168
|
+
before: 'String token = String.valueOf(Math.random());',
|
|
169
|
+
after: 'SecureRandom sr = new SecureRandom();\nString token = new BigInteger(130, sr).toString(32);'
|
|
170
|
+
},
|
|
171
|
+
attackVector: {
|
|
172
|
+
description: 'Predictable tokens enable session hijacking and security bypass',
|
|
173
|
+
realWorldImpact: [
|
|
174
|
+
'Session token prediction',
|
|
175
|
+
'Authentication bypass',
|
|
176
|
+
'CSRF token guessing',
|
|
177
|
+
'Password reset token compromise'
|
|
178
|
+
]
|
|
179
|
+
}
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
// Check #5: Weak SSL/TLS configuration
|
|
184
|
+
// FIX (Dec 6, 2025): Added setDefaultHostnameVerifier detection with lambda pattern
|
|
185
|
+
// Example missed: HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
|
|
186
|
+
// Now detects: setDefaultHostnameVerifier + lambda returning true
|
|
187
|
+
if ((lowerLine.includes('sslcontext') && lowerLine.includes('ssl')) ||
|
|
188
|
+
(lowerLine.includes('trustallcerts') || lowerLine.includes('trust_all')) ||
|
|
189
|
+
(lowerLine.includes('hostname') && lowerLine.includes('verif') && lowerLine.includes('false')) ||
|
|
190
|
+
(lowerLine.includes('setdefaulthostnameverifier') && lowerLine.includes('-> true')) ||
|
|
191
|
+
(lowerLine.includes('setdefaulthostnameverifier') &&
|
|
192
|
+
lines.slice(index, Math.min(index + 3, lines.length)).some(nextLine => nextLine.toLowerCase().includes('-> true')))) {
|
|
193
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)({
|
|
194
|
+
category: 'Security Misconfiguration',
|
|
195
|
+
severity: 'HIGH',
|
|
196
|
+
confidence: 'MEDIUM',
|
|
197
|
+
message: 'Weak SSL/TLS configuration detected',
|
|
198
|
+
line: index + 1,
|
|
199
|
+
suggestion: 'Use secure SSL/TLS configurations with proper certificate validation',
|
|
200
|
+
owasp: 'A02:2025',
|
|
201
|
+
cwe: 'CWE-295',
|
|
202
|
+
pciDss: 'Requirement 4.1',
|
|
203
|
+
remediation: {
|
|
204
|
+
explanation: 'Weak SSL configurations enable man-in-the-middle attacks',
|
|
205
|
+
before: 'HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true)',
|
|
206
|
+
after: 'HttpsURLConnection.setDefaultHostnameVerifier(new DefaultHostnameVerifier())'
|
|
207
|
+
},
|
|
208
|
+
attackVector: {
|
|
209
|
+
description: 'Weak SSL/TLS enables interception and manipulation of encrypted communications',
|
|
210
|
+
realWorldImpact: [
|
|
211
|
+
'Man-in-the-middle attacks',
|
|
212
|
+
'Certificate validation bypass',
|
|
213
|
+
'Encrypted data interception',
|
|
214
|
+
'Communication integrity compromise'
|
|
215
|
+
]
|
|
216
|
+
}
|
|
217
|
+
}));
|
|
218
|
+
}
|
|
219
|
+
// Check #6: Exposed management endpoints
|
|
220
|
+
if (lowerLine.includes('management.endpoints') ||
|
|
221
|
+
(lowerLine.includes('actuator') && lowerLine.includes('expose'))) {
|
|
222
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)({
|
|
223
|
+
category: 'Security Misconfiguration',
|
|
224
|
+
severity: 'HIGH',
|
|
225
|
+
confidence: 'MEDIUM',
|
|
226
|
+
message: 'Spring Boot management endpoints may be exposed',
|
|
227
|
+
line: index + 1,
|
|
228
|
+
suggestion: 'Secure management endpoints with authentication and restrict access',
|
|
229
|
+
owasp: 'A02:2025',
|
|
230
|
+
cwe: 'CWE-200',
|
|
231
|
+
pciDss: 'Requirement 7.1',
|
|
232
|
+
remediation: {
|
|
233
|
+
explanation: 'Exposed management endpoints reveal sensitive application internals',
|
|
234
|
+
before: 'management.endpoints.web.exposure.include=*',
|
|
235
|
+
after: 'management.endpoints.web.exposure.include=health,info'
|
|
236
|
+
},
|
|
237
|
+
attackVector: {
|
|
238
|
+
description: 'Management endpoints expose application configuration and runtime information',
|
|
239
|
+
realWorldImpact: [
|
|
240
|
+
'Internal configuration exposure',
|
|
241
|
+
'Environment variable disclosure',
|
|
242
|
+
'Application metrics and health information',
|
|
243
|
+
'Potential administrative access'
|
|
244
|
+
]
|
|
245
|
+
}
|
|
246
|
+
}));
|
|
247
|
+
}
|
|
248
|
+
// Check #7: Error details in exceptions
|
|
249
|
+
if (lowerLine.includes('printstacktrace()') ||
|
|
250
|
+
(lowerLine.includes('exception') && lowerLine.includes('getmessage') &&
|
|
251
|
+
lowerLine.includes('response'))) {
|
|
252
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)({
|
|
253
|
+
category: 'Security Misconfiguration',
|
|
254
|
+
severity: 'MEDIUM',
|
|
255
|
+
confidence: 'MEDIUM',
|
|
256
|
+
message: 'Detailed error information may be exposed to users',
|
|
257
|
+
line: index + 1,
|
|
258
|
+
suggestion: 'Log detailed errors server-side, return generic error messages to users',
|
|
259
|
+
owasp: 'A02:2025',
|
|
260
|
+
cwe: 'CWE-209',
|
|
261
|
+
pciDss: 'Requirement 6.1',
|
|
262
|
+
remediation: {
|
|
263
|
+
explanation: 'Detailed exception information reveals internal application structure',
|
|
264
|
+
before: 'response.getWriter().println(e.getMessage());',
|
|
265
|
+
after: 'logger.error("Error occurred", e);\nresponse.getWriter().println("Internal server error");'
|
|
266
|
+
},
|
|
267
|
+
attackVector: {
|
|
268
|
+
description: 'Exception details can reveal file paths, database schemas, and application logic',
|
|
269
|
+
realWorldImpact: [
|
|
270
|
+
'Internal system information disclosure',
|
|
271
|
+
'File path and directory structure exposure',
|
|
272
|
+
'Database schema and query information',
|
|
273
|
+
'Third-party library version fingerprinting'
|
|
274
|
+
]
|
|
275
|
+
}
|
|
276
|
+
}));
|
|
277
|
+
}
|
|
278
|
+
// Check #8: Insecure deserialization settings
|
|
279
|
+
if (lowerLine.includes('objectinputstream') && !lowerLine.includes('filter')) {
|
|
280
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)({
|
|
281
|
+
category: 'Security Misconfiguration',
|
|
282
|
+
severity: 'HIGH',
|
|
283
|
+
confidence: 'MEDIUM',
|
|
284
|
+
message: 'Unfiltered object deserialization may allow arbitrary code execution',
|
|
285
|
+
line: index + 1,
|
|
286
|
+
suggestion: 'Implement deserialization filters to restrict allowed classes',
|
|
287
|
+
owasp: 'A02:2025',
|
|
288
|
+
cwe: 'CWE-502',
|
|
289
|
+
pciDss: 'Requirement 6.1',
|
|
290
|
+
remediation: {
|
|
291
|
+
explanation: 'Unfiltered deserialization can lead to remote code execution',
|
|
292
|
+
before: 'ObjectInputStream ois = new ObjectInputStream(inputStream);',
|
|
293
|
+
after: 'ObjectInputStream ois = new ObjectInputStream(inputStream);\nois.setObjectInputFilter(ObjectInputFilter.rejectUndecidedClass);'
|
|
294
|
+
},
|
|
295
|
+
attackVector: {
|
|
296
|
+
description: 'Malicious serialized objects can execute arbitrary code during deserialization',
|
|
297
|
+
realWorldImpact: [
|
|
298
|
+
'Remote code execution',
|
|
299
|
+
'Complete server compromise',
|
|
300
|
+
'Data theft and manipulation',
|
|
301
|
+
'Denial of service attacks'
|
|
302
|
+
]
|
|
303
|
+
}
|
|
304
|
+
}));
|
|
305
|
+
}
|
|
306
|
+
});
|
|
307
|
+
return vulnerabilities;
|
|
308
|
+
}
|
|
309
|
+
//# sourceMappingURL=security-misconfiguration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security-misconfiguration.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/java/security-checks/security-misconfiguration.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unsafe Code Patterns Module
|
|
3
|
+
*
|
|
4
|
+
* Detects unsafe coding patterns in Java source code including:
|
|
5
|
+
* - Reflection without validation
|
|
6
|
+
* - Unhandled NullPointerException
|
|
7
|
+
* - Generic Exception catch blocks
|
|
8
|
+
*
|
|
9
|
+
* OWASP A04:2021 - Insecure Design
|
|
10
|
+
*/
|
|
11
|
+
import { SecurityVulnerability } from '../../types';
|
|
12
|
+
/**
|
|
13
|
+
* Check for unsafe code patterns in Java code
|
|
14
|
+
* @param lines - Array of code lines to analyze
|
|
15
|
+
* @returns Array of security vulnerabilities found
|
|
16
|
+
*/
|
|
17
|
+
export declare function checkUnsafePatterns(lines: string[]): SecurityVulnerability[];
|
|
18
|
+
//# sourceMappingURL=unsafe-patterns.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsafe-patterns.d.ts","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/java/security-checks/unsafe-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAGpD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,qBAAqB,EAAE,CAqI5E"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unsafe Code Patterns Module
|
|
4
|
+
*
|
|
5
|
+
* Detects unsafe coding patterns in Java source code including:
|
|
6
|
+
* - Reflection without validation
|
|
7
|
+
* - Unhandled NullPointerException
|
|
8
|
+
* - Generic Exception catch blocks
|
|
9
|
+
*
|
|
10
|
+
* OWASP A04:2021 - Insecure Design
|
|
11
|
+
*/
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.checkUnsafePatterns = checkUnsafePatterns;
|
|
14
|
+
const createVulnerability_1 = require("../utils/createVulnerability");
|
|
15
|
+
/**
|
|
16
|
+
* Check for unsafe code patterns in Java code
|
|
17
|
+
* @param lines - Array of code lines to analyze
|
|
18
|
+
* @returns Array of security vulnerabilities found
|
|
19
|
+
*/
|
|
20
|
+
function checkUnsafePatterns(lines) {
|
|
21
|
+
const vulnerabilities = [];
|
|
22
|
+
let inMultiLineComment = false;
|
|
23
|
+
lines.forEach((line, index) => {
|
|
24
|
+
const trimmed = line.trim();
|
|
25
|
+
const lineNumber = index + 1;
|
|
26
|
+
// CRITICAL: Track multi-line comment blocks (/* ... */)
|
|
27
|
+
if (trimmed.includes('/*')) {
|
|
28
|
+
inMultiLineComment = true;
|
|
29
|
+
}
|
|
30
|
+
if (trimmed.includes('*/')) {
|
|
31
|
+
inMultiLineComment = false;
|
|
32
|
+
return; // Skip the line with */
|
|
33
|
+
}
|
|
34
|
+
// CRITICAL: Skip all lines inside multi-line comments and single-line comments
|
|
35
|
+
// FIX (Dec 6, 2025): Added proper multi-line comment tracking
|
|
36
|
+
if (!trimmed ||
|
|
37
|
+
inMultiLineComment ||
|
|
38
|
+
trimmed.startsWith('//')) {
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
// 13. Reflection without validation - HIGH
|
|
42
|
+
// FIX (Dec 6, 2025): Added whitelist context checking (same as enhanced-supply-chain.ts)
|
|
43
|
+
// FIX (Dec 9, 2025): Exclude safe API patterns (DocumentBuilderFactory, standard library)
|
|
44
|
+
if (trimmed.match(/Class\s*\.\s*forName\s*\(/) || trimmed.match(/\.newInstance\s*\(/)) {
|
|
45
|
+
// Skip safe patterns: Standard Java APIs using reflection internally
|
|
46
|
+
const safeApiPatterns = [
|
|
47
|
+
'DocumentBuilderFactory.class.getMethod',
|
|
48
|
+
'SAXParserFactory.class.getMethod',
|
|
49
|
+
'TransformerFactory.class.getMethod',
|
|
50
|
+
'XPathFactory.class.getMethod',
|
|
51
|
+
'Class.forName("java.', // Standard library classes
|
|
52
|
+
'Class.forName("javax.', // Java extension classes
|
|
53
|
+
'.getClass().getMethod("get', // Getter method reflection
|
|
54
|
+
'.getClass().getMethod("set', // Setter method reflection
|
|
55
|
+
];
|
|
56
|
+
const isSafeApiPattern = safeApiPatterns.some(pattern => trimmed.includes(pattern));
|
|
57
|
+
if (isSafeApiPattern) {
|
|
58
|
+
return; // Skip safe Java API patterns
|
|
59
|
+
}
|
|
60
|
+
const hasSameLineValidation = trimmed.toLowerCase().includes('validate') ||
|
|
61
|
+
trimmed.toLowerCase().includes('whitelist') ||
|
|
62
|
+
trimmed.toLowerCase().includes('allowlist');
|
|
63
|
+
// Check previous 10 lines for whitelist context
|
|
64
|
+
const prevLines = lines.slice(Math.max(0, index - 10), index);
|
|
65
|
+
const hasWhitelistContext = prevLines.some(l => {
|
|
66
|
+
const lowerPrev = l.toLowerCase();
|
|
67
|
+
return (lowerPrev.includes('whitelist') || lowerPrev.includes('allowlist') ||
|
|
68
|
+
lowerPrev.includes('allowed') || lowerPrev.includes('safe')) &&
|
|
69
|
+
(lowerPrev.includes('set.of') || lowerPrev.includes('arrays.aslist') ||
|
|
70
|
+
lowerPrev.includes('list.of'));
|
|
71
|
+
});
|
|
72
|
+
// Check if there's a .contains() validation before Class.forName
|
|
73
|
+
const hasContainsCheck = prevLines.some(l => l.toLowerCase().includes('.contains(') && l.includes('if'));
|
|
74
|
+
if (!hasSameLineValidation && !hasWhitelistContext && !hasContainsCheck) {
|
|
75
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)('unsafe-reflection', 'Unsafe reflection with potential user input detected', 'Validate class names against a strict whitelist before using reflection', lineNumber, 'Java reflection allows instantiating arbitrary classes and calling their methods at runtime. If an attacker can control the class name, they can instantiate dangerous classes (like ProcessBuilder, Runtime, ClassLoader) to execute arbitrary code, access sensitive data, or bypass security restrictions.', 'Class.forName(userInput).newInstance() where userInput = "java.lang.Runtime" can execute commands via Runtime.getRuntime().exec()', [
|
|
76
|
+
'Remote Code Execution',
|
|
77
|
+
'Arbitrary class instantiation',
|
|
78
|
+
'Security manager bypass',
|
|
79
|
+
'Access to private APIs',
|
|
80
|
+
'Privilege escalation'
|
|
81
|
+
], 'String className = request.getParameter("class");\nClass<?> clazz = Class.forName(className); // Dangerous\nObject instance = clazz.newInstance();', 'String className = request.getParameter("class");\n// Whitelist validation\nSet<String> allowedClasses = Set.of("com.app.SafeClass1", "com.app.SafeClass2");\nif (!allowedClasses.contains(className)) {\n throw new SecurityException("Class not allowed");\n}\nClass<?> clazz = Class.forName(className);\nObject instance = clazz.newInstance();', 'Always validate class names against a strict whitelist of allowed classes. Never use user input directly in Class.forName() or newInstance() calls'));
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
// 14. Unhandled NullPointerException - MEDIUM
|
|
85
|
+
// FIX (Dec 6, 2025): Removed old comment checks - now handled by inMultiLineComment tracking
|
|
86
|
+
// FIX (Dec 11, 2025): Skip method calls on 'new' expressions - constructors return non-null objects
|
|
87
|
+
// Example: new BigInteger(130, random).toString(32) is safe, toString() cannot be called on null
|
|
88
|
+
if (trimmed.match(/\.\w+\s*\(/) && !trimmed.includes('if') && !trimmed.includes('Optional') &&
|
|
89
|
+
!trimmed.includes('Objects.requireNonNull') && !trimmed.includes('new ')) {
|
|
90
|
+
const prevLines = lines.slice(Math.max(0, index - 2), index);
|
|
91
|
+
const hasNullCheck = prevLines.some(l => l.includes('!= null') || l.includes('== null'));
|
|
92
|
+
if (!hasNullCheck && Math.random() < 0.1) { // Sample 10% to avoid too many warnings
|
|
93
|
+
vulnerabilities.push({
|
|
94
|
+
severity: 'low',
|
|
95
|
+
message: 'Possible NullPointerException without null check',
|
|
96
|
+
suggestion: 'Use Optional<T>, Objects.requireNonNull(), or null check: if (obj != null)',
|
|
97
|
+
line: lineNumber
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
// 18. Generic Exception catch - LOW
|
|
102
|
+
if (trimmed.match(/catch\s*\(\s*Exception\s+\w+\s*\)/)) {
|
|
103
|
+
vulnerabilities.push((0, createVulnerability_1.createJavaSecurityVulnerability)('generic-exception-catch', 'Generic Exception catch detected - hides specific errors', 'Catch specific exceptions: catch (IOException | SQLException e)', lineNumber, 'Catching generic Exception masks different error conditions and makes it impossible to handle them appropriately. Security-critical exceptions (like authentication failures, access denials) may be handled the same way as benign errors, leading to bypasses. It also catches RuntimeExceptions that may indicate programming errors.', 'catch (Exception e) { return "success"; } // Catches SecurityException, swallowing access denial', [
|
|
104
|
+
'Security exception bypasses',
|
|
105
|
+
'Error condition masking',
|
|
106
|
+
'Difficult debugging',
|
|
107
|
+
'Improper error handling',
|
|
108
|
+
'Business logic violations'
|
|
109
|
+
], 'try {\n authenticateUser();\n accessResource();\n} catch (Exception e) { // Too broad\n logger.error("Error", e);\n return "success"; // Wrong!\n}', 'try {\n authenticateUser();\n accessResource();\n} catch (AuthenticationException e) {\n logger.warn("Auth failed", e);\n return "unauthorized";\n} catch (AccessDeniedException e) {\n logger.warn("Access denied", e);\n return "forbidden";\n} catch (IOException e) {\n logger.error("IO error", e);\n return "error";\n}', 'Catch specific exceptions to handle each error condition appropriately. Security exceptions should be logged and handled differently from operational errors. Use multi-catch for similar exceptions'));
|
|
110
|
+
}
|
|
111
|
+
});
|
|
112
|
+
return vulnerabilities;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=unsafe-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unsafe-patterns.js","sourceRoot":"","sources":["../../../../../../../../src/lib/analyzers/java/security-checks/unsafe-patterns.ts"],"names":[],"mappings":"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"}
|