@nahisaho/musubix-security 2.0.1 → 2.1.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/dist/analysis/enhanced-taint-analyzer.d.ts +120 -0
- package/dist/analysis/enhanced-taint-analyzer.d.ts.map +1 -0
- package/dist/analysis/enhanced-taint-analyzer.js +450 -0
- package/dist/analysis/enhanced-taint-analyzer.js.map +1 -0
- package/dist/analysis/index.d.ts +1 -0
- package/dist/analysis/index.d.ts.map +1 -1
- package/dist/analysis/index.js +1 -0
- package/dist/analysis/index.js.map +1 -1
- package/dist/analysis/interprocedural/call-graph-builder.d.ts +192 -0
- package/dist/analysis/interprocedural/call-graph-builder.d.ts.map +1 -0
- package/dist/analysis/interprocedural/call-graph-builder.js +510 -0
- package/dist/analysis/interprocedural/call-graph-builder.js.map +1 -0
- package/dist/analysis/interprocedural/dfg-adapter.d.ts +166 -0
- package/dist/analysis/interprocedural/dfg-adapter.d.ts.map +1 -0
- package/dist/analysis/interprocedural/dfg-adapter.js +455 -0
- package/dist/analysis/interprocedural/dfg-adapter.js.map +1 -0
- package/dist/analysis/interprocedural/index.d.ts +9 -0
- package/dist/analysis/interprocedural/index.d.ts.map +1 -0
- package/dist/analysis/interprocedural/index.js +9 -0
- package/dist/analysis/interprocedural/index.js.map +1 -0
- package/dist/analysis/interprocedural/taint-propagator.d.ts +250 -0
- package/dist/analysis/interprocedural/taint-propagator.d.ts.map +1 -0
- package/dist/analysis/interprocedural/taint-propagator.js +435 -0
- package/dist/analysis/interprocedural/taint-propagator.js.map +1 -0
- package/dist/analysis/sanitizers/command-sanitizers.d.ts +12 -0
- package/dist/analysis/sanitizers/command-sanitizers.d.ts.map +1 -0
- package/dist/analysis/sanitizers/command-sanitizers.js +123 -0
- package/dist/analysis/sanitizers/command-sanitizers.js.map +1 -0
- package/dist/analysis/sanitizers/html-sanitizers.d.ts +12 -0
- package/dist/analysis/sanitizers/html-sanitizers.d.ts.map +1 -0
- package/dist/analysis/sanitizers/html-sanitizers.js +213 -0
- package/dist/analysis/sanitizers/html-sanitizers.js.map +1 -0
- package/dist/analysis/sanitizers/index.d.ts +35 -0
- package/dist/analysis/sanitizers/index.d.ts.map +1 -0
- package/dist/analysis/sanitizers/index.js +59 -0
- package/dist/analysis/sanitizers/index.js.map +1 -0
- package/dist/analysis/sanitizers/path-sanitizers.d.ts +12 -0
- package/dist/analysis/sanitizers/path-sanitizers.d.ts.map +1 -0
- package/dist/analysis/sanitizers/path-sanitizers.js +163 -0
- package/dist/analysis/sanitizers/path-sanitizers.js.map +1 -0
- package/dist/analysis/sanitizers/sql-sanitizers.d.ts +12 -0
- package/dist/analysis/sanitizers/sql-sanitizers.d.ts.map +1 -0
- package/dist/analysis/sanitizers/sql-sanitizers.js +216 -0
- package/dist/analysis/sanitizers/sql-sanitizers.js.map +1 -0
- package/dist/analysis/sanitizers/types.d.ts +78 -0
- package/dist/analysis/sanitizers/types.d.ts.map +1 -0
- package/dist/analysis/sanitizers/types.js +7 -0
- package/dist/analysis/sanitizers/types.js.map +1 -0
- package/dist/analysis/sanitizers/validation-sanitizers.d.ts +12 -0
- package/dist/analysis/sanitizers/validation-sanitizers.d.ts.map +1 -0
- package/dist/analysis/sanitizers/validation-sanitizers.js +268 -0
- package/dist/analysis/sanitizers/validation-sanitizers.js.map +1 -0
- package/dist/analysis/sinks/code-eval.d.ts +12 -0
- package/dist/analysis/sinks/code-eval.d.ts.map +1 -0
- package/dist/analysis/sinks/code-eval.js +231 -0
- package/dist/analysis/sinks/code-eval.js.map +1 -0
- package/dist/analysis/sinks/command-exec.d.ts +12 -0
- package/dist/analysis/sinks/command-exec.d.ts.map +1 -0
- package/dist/analysis/sinks/command-exec.js +187 -0
- package/dist/analysis/sinks/command-exec.js.map +1 -0
- package/dist/analysis/sinks/file-operations.d.ts +12 -0
- package/dist/analysis/sinks/file-operations.d.ts.map +1 -0
- package/dist/analysis/sinks/file-operations.js +239 -0
- package/dist/analysis/sinks/file-operations.js.map +1 -0
- package/dist/analysis/sinks/html-output.d.ts +12 -0
- package/dist/analysis/sinks/html-output.d.ts.map +1 -0
- package/dist/analysis/sinks/html-output.js +256 -0
- package/dist/analysis/sinks/html-output.js.map +1 -0
- package/dist/analysis/sinks/index.d.ts +30 -0
- package/dist/analysis/sinks/index.d.ts.map +1 -0
- package/dist/analysis/sinks/index.js +46 -0
- package/dist/analysis/sinks/index.js.map +1 -0
- package/dist/analysis/sinks/sql-query.d.ts +12 -0
- package/dist/analysis/sinks/sql-query.d.ts.map +1 -0
- package/dist/analysis/sinks/sql-query.js +209 -0
- package/dist/analysis/sinks/sql-query.js.map +1 -0
- package/dist/analysis/sinks/types.d.ts +97 -0
- package/dist/analysis/sinks/types.d.ts.map +1 -0
- package/dist/analysis/sinks/types.js +7 -0
- package/dist/analysis/sinks/types.js.map +1 -0
- package/dist/analysis/sources/database.d.ts +12 -0
- package/dist/analysis/sources/database.d.ts.map +1 -0
- package/dist/analysis/sources/database.js +211 -0
- package/dist/analysis/sources/database.js.map +1 -0
- package/dist/analysis/sources/environment.d.ts +12 -0
- package/dist/analysis/sources/environment.d.ts.map +1 -0
- package/dist/analysis/sources/environment.js +158 -0
- package/dist/analysis/sources/environment.js.map +1 -0
- package/dist/analysis/sources/file-system.d.ts +12 -0
- package/dist/analysis/sources/file-system.d.ts.map +1 -0
- package/dist/analysis/sources/file-system.js +180 -0
- package/dist/analysis/sources/file-system.js.map +1 -0
- package/dist/analysis/sources/http-request.d.ts +12 -0
- package/dist/analysis/sources/http-request.d.ts.map +1 -0
- package/dist/analysis/sources/http-request.js +179 -0
- package/dist/analysis/sources/http-request.js.map +1 -0
- package/dist/analysis/sources/index.d.ts +26 -0
- package/dist/analysis/sources/index.d.ts.map +1 -0
- package/dist/analysis/sources/index.js +40 -0
- package/dist/analysis/sources/index.js.map +1 -0
- package/dist/analysis/sources/types.d.ts +93 -0
- package/dist/analysis/sources/types.d.ts.map +1 -0
- package/dist/analysis/sources/types.js +7 -0
- package/dist/analysis/sources/types.js.map +1 -0
- package/dist/analysis/sources/user-input.d.ts +12 -0
- package/dist/analysis/sources/user-input.d.ts.map +1 -0
- package/dist/analysis/sources/user-input.js +261 -0
- package/dist/analysis/sources/user-input.js.map +1 -0
- package/dist/cve/cpe-matcher.d.ts +183 -0
- package/dist/cve/cpe-matcher.d.ts.map +1 -0
- package/dist/cve/cpe-matcher.js +396 -0
- package/dist/cve/cpe-matcher.js.map +1 -0
- package/dist/cve/cve-cache.d.ts +225 -0
- package/dist/cve/cve-cache.d.ts.map +1 -0
- package/dist/cve/cve-cache.js +452 -0
- package/dist/cve/cve-cache.js.map +1 -0
- package/dist/cve/cve-cache.test.d.ts +6 -0
- package/dist/cve/cve-cache.test.d.ts.map +1 -0
- package/dist/cve/cve-cache.test.js +363 -0
- package/dist/cve/cve-cache.test.js.map +1 -0
- package/dist/cve/dependency-parser.d.ts +204 -0
- package/dist/cve/dependency-parser.d.ts.map +1 -0
- package/dist/cve/dependency-parser.js +338 -0
- package/dist/cve/dependency-parser.js.map +1 -0
- package/dist/cve/index.d.ts +20 -0
- package/dist/cve/index.d.ts.map +1 -0
- package/dist/cve/index.js +13 -0
- package/dist/cve/index.js.map +1 -0
- package/dist/cve/nvd-client.d.ts +137 -0
- package/dist/cve/nvd-client.d.ts.map +1 -0
- package/dist/cve/nvd-client.js +333 -0
- package/dist/cve/nvd-client.js.map +1 -0
- package/dist/cve/rate-limiter.d.ts +194 -0
- package/dist/cve/rate-limiter.d.ts.map +1 -0
- package/dist/cve/rate-limiter.js +276 -0
- package/dist/cve/rate-limiter.js.map +1 -0
- package/dist/cve/report-generator.d.ts +145 -0
- package/dist/cve/report-generator.d.ts.map +1 -0
- package/dist/cve/report-generator.js +377 -0
- package/dist/cve/report-generator.js.map +1 -0
- package/dist/cve/report-generator.test.d.ts +6 -0
- package/dist/cve/report-generator.test.d.ts.map +1 -0
- package/dist/cve/report-generator.test.js +275 -0
- package/dist/cve/report-generator.test.js.map +1 -0
- package/dist/cve/vulnerability-scanner.d.ts +198 -0
- package/dist/cve/vulnerability-scanner.d.ts.map +1 -0
- package/dist/cve/vulnerability-scanner.js +311 -0
- package/dist/cve/vulnerability-scanner.js.map +1 -0
- package/dist/cve/vulnerability-scanner.test.d.ts +6 -0
- package/dist/cve/vulnerability-scanner.test.d.ts.map +1 -0
- package/dist/cve/vulnerability-scanner.test.js +329 -0
- package/dist/cve/vulnerability-scanner.test.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/rules/config/config-parser.d.ts +119 -0
- package/dist/rules/config/config-parser.d.ts.map +1 -0
- package/dist/rules/config/config-parser.js +376 -0
- package/dist/rules/config/config-parser.js.map +1 -0
- package/dist/rules/config/index.d.ts +8 -0
- package/dist/rules/config/index.d.ts.map +1 -0
- package/dist/rules/config/index.js +8 -0
- package/dist/rules/config/index.js.map +1 -0
- package/dist/rules/config/profiles.d.ts +85 -0
- package/dist/rules/config/profiles.d.ts.map +1 -0
- package/dist/rules/config/profiles.js +226 -0
- package/dist/rules/config/profiles.js.map +1 -0
- package/dist/rules/cwe/cwe-119-buffer-overflow.d.ts +9 -0
- package/dist/rules/cwe/cwe-119-buffer-overflow.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-119-buffer-overflow.js +54 -0
- package/dist/rules/cwe/cwe-119-buffer-overflow.js.map +1 -0
- package/dist/rules/cwe/cwe-125-oob-read.d.ts +20 -0
- package/dist/rules/cwe/cwe-125-oob-read.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-125-oob-read.js +247 -0
- package/dist/rules/cwe/cwe-125-oob-read.js.map +1 -0
- package/dist/rules/cwe/cwe-190-integer-overflow.d.ts +9 -0
- package/dist/rules/cwe/cwe-190-integer-overflow.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-190-integer-overflow.js +55 -0
- package/dist/rules/cwe/cwe-190-integer-overflow.js.map +1 -0
- package/dist/rules/cwe/cwe-20-input-validation.d.ts +21 -0
- package/dist/rules/cwe/cwe-20-input-validation.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-20-input-validation.js +342 -0
- package/dist/rules/cwe/cwe-20-input-validation.js.map +1 -0
- package/dist/rules/cwe/cwe-22-path-traversal.d.ts +20 -0
- package/dist/rules/cwe/cwe-22-path-traversal.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-22-path-traversal.js +306 -0
- package/dist/rules/cwe/cwe-22-path-traversal.js.map +1 -0
- package/dist/rules/cwe/cwe-269-improper-privilege.d.ts +9 -0
- package/dist/rules/cwe/cwe-269-improper-privilege.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-269-improper-privilege.js +58 -0
- package/dist/rules/cwe/cwe-269-improper-privilege.js.map +1 -0
- package/dist/rules/cwe/cwe-276-default-permissions.d.ts +9 -0
- package/dist/rules/cwe/cwe-276-default-permissions.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-276-default-permissions.js +54 -0
- package/dist/rules/cwe/cwe-276-default-permissions.js.map +1 -0
- package/dist/rules/cwe/cwe-287-improper-auth.d.ts +9 -0
- package/dist/rules/cwe/cwe-287-improper-auth.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-287-improper-auth.js +57 -0
- package/dist/rules/cwe/cwe-287-improper-auth.js.map +1 -0
- package/dist/rules/cwe/cwe-306-missing-auth-critical.d.ts +9 -0
- package/dist/rules/cwe/cwe-306-missing-auth-critical.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-306-missing-auth-critical.js +53 -0
- package/dist/rules/cwe/cwe-306-missing-auth-critical.js.map +1 -0
- package/dist/rules/cwe/cwe-352-csrf.d.ts +9 -0
- package/dist/rules/cwe/cwe-352-csrf.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-352-csrf.js +51 -0
- package/dist/rules/cwe/cwe-352-csrf.js.map +1 -0
- package/dist/rules/cwe/cwe-362-race-condition.d.ts +9 -0
- package/dist/rules/cwe/cwe-362-race-condition.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-362-race-condition.js +55 -0
- package/dist/rules/cwe/cwe-362-race-condition.js.map +1 -0
- package/dist/rules/cwe/cwe-416-use-after-free.d.ts +23 -0
- package/dist/rules/cwe/cwe-416-use-after-free.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-416-use-after-free.js +402 -0
- package/dist/rules/cwe/cwe-416-use-after-free.js.map +1 -0
- package/dist/rules/cwe/cwe-434-file-upload.d.ts +9 -0
- package/dist/rules/cwe/cwe-434-file-upload.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-434-file-upload.js +55 -0
- package/dist/rules/cwe/cwe-434-file-upload.js.map +1 -0
- package/dist/rules/cwe/cwe-476-null-deref.d.ts +9 -0
- package/dist/rules/cwe/cwe-476-null-deref.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-476-null-deref.js +55 -0
- package/dist/rules/cwe/cwe-476-null-deref.js.map +1 -0
- package/dist/rules/cwe/cwe-502-deserialization.d.ts +9 -0
- package/dist/rules/cwe/cwe-502-deserialization.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-502-deserialization.js +57 -0
- package/dist/rules/cwe/cwe-502-deserialization.js.map +1 -0
- package/dist/rules/cwe/cwe-77-command-injection.d.ts +9 -0
- package/dist/rules/cwe/cwe-77-command-injection.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-77-command-injection.js +55 -0
- package/dist/rules/cwe/cwe-77-command-injection.js.map +1 -0
- package/dist/rules/cwe/cwe-78-command-injection.d.ts +20 -0
- package/dist/rules/cwe/cwe-78-command-injection.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-78-command-injection.js +259 -0
- package/dist/rules/cwe/cwe-78-command-injection.js.map +1 -0
- package/dist/rules/cwe/cwe-787-oob-write.d.ts +21 -0
- package/dist/rules/cwe/cwe-787-oob-write.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-787-oob-write.js +321 -0
- package/dist/rules/cwe/cwe-787-oob-write.js.map +1 -0
- package/dist/rules/cwe/cwe-79-xss.d.ts +22 -0
- package/dist/rules/cwe/cwe-79-xss.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-79-xss.js +386 -0
- package/dist/rules/cwe/cwe-79-xss.js.map +1 -0
- package/dist/rules/cwe/cwe-798-hardcoded-credentials.d.ts +9 -0
- package/dist/rules/cwe/cwe-798-hardcoded-credentials.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-798-hardcoded-credentials.js +58 -0
- package/dist/rules/cwe/cwe-798-hardcoded-credentials.js.map +1 -0
- package/dist/rules/cwe/cwe-862-missing-auth.d.ts +9 -0
- package/dist/rules/cwe/cwe-862-missing-auth.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-862-missing-auth.js +55 -0
- package/dist/rules/cwe/cwe-862-missing-auth.js.map +1 -0
- package/dist/rules/cwe/cwe-863-incorrect-auth.d.ts +9 -0
- package/dist/rules/cwe/cwe-863-incorrect-auth.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-863-incorrect-auth.js +58 -0
- package/dist/rules/cwe/cwe-863-incorrect-auth.js.map +1 -0
- package/dist/rules/cwe/cwe-89-sql-injection.d.ts +21 -0
- package/dist/rules/cwe/cwe-89-sql-injection.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-89-sql-injection.js +456 -0
- package/dist/rules/cwe/cwe-89-sql-injection.js.map +1 -0
- package/dist/rules/cwe/cwe-918-ssrf.d.ts +9 -0
- package/dist/rules/cwe/cwe-918-ssrf.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-918-ssrf.js +59 -0
- package/dist/rules/cwe/cwe-918-ssrf.js.map +1 -0
- package/dist/rules/cwe/cwe-94-code-injection.d.ts +9 -0
- package/dist/rules/cwe/cwe-94-code-injection.d.ts.map +1 -0
- package/dist/rules/cwe/cwe-94-code-injection.js +59 -0
- package/dist/rules/cwe/cwe-94-code-injection.js.map +1 -0
- package/dist/rules/cwe/index.d.ts +43 -0
- package/dist/rules/cwe/index.d.ts.map +1 -0
- package/dist/rules/cwe/index.js +99 -0
- package/dist/rules/cwe/index.js.map +1 -0
- package/dist/rules/engine/index.d.ts +10 -0
- package/dist/rules/engine/index.d.ts.map +1 -0
- package/dist/rules/engine/index.js +9 -0
- package/dist/rules/engine/index.js.map +1 -0
- package/dist/rules/engine/rule-context.d.ts +99 -0
- package/dist/rules/engine/rule-context.d.ts.map +1 -0
- package/dist/rules/engine/rule-context.js +175 -0
- package/dist/rules/engine/rule-context.js.map +1 -0
- package/dist/rules/engine/rule-engine.d.ts +132 -0
- package/dist/rules/engine/rule-engine.d.ts.map +1 -0
- package/dist/rules/engine/rule-engine.js +379 -0
- package/dist/rules/engine/rule-engine.js.map +1 -0
- package/dist/rules/engine/rule-registry.d.ts +133 -0
- package/dist/rules/engine/rule-registry.d.ts.map +1 -0
- package/dist/rules/engine/rule-registry.js +281 -0
- package/dist/rules/engine/rule-registry.js.map +1 -0
- package/dist/rules/index.d.ts +14 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +16 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/owasp/a01-broken-access-control.d.ts +19 -0
- package/dist/rules/owasp/a01-broken-access-control.d.ts.map +1 -0
- package/dist/rules/owasp/a01-broken-access-control.js +295 -0
- package/dist/rules/owasp/a01-broken-access-control.js.map +1 -0
- package/dist/rules/owasp/a02-cryptographic-failures.d.ts +19 -0
- package/dist/rules/owasp/a02-cryptographic-failures.d.ts.map +1 -0
- package/dist/rules/owasp/a02-cryptographic-failures.js +327 -0
- package/dist/rules/owasp/a02-cryptographic-failures.js.map +1 -0
- package/dist/rules/owasp/a03-injection.d.ts +21 -0
- package/dist/rules/owasp/a03-injection.d.ts.map +1 -0
- package/dist/rules/owasp/a03-injection.js +342 -0
- package/dist/rules/owasp/a03-injection.js.map +1 -0
- package/dist/rules/owasp/a04-insecure-design.d.ts +19 -0
- package/dist/rules/owasp/a04-insecure-design.d.ts.map +1 -0
- package/dist/rules/owasp/a04-insecure-design.js +403 -0
- package/dist/rules/owasp/a04-insecure-design.js.map +1 -0
- package/dist/rules/owasp/a05-security-misconfiguration.d.ts +19 -0
- package/dist/rules/owasp/a05-security-misconfiguration.d.ts.map +1 -0
- package/dist/rules/owasp/a05-security-misconfiguration.js +371 -0
- package/dist/rules/owasp/a05-security-misconfiguration.js.map +1 -0
- package/dist/rules/owasp/a06-vulnerable-components.d.ts +18 -0
- package/dist/rules/owasp/a06-vulnerable-components.d.ts.map +1 -0
- package/dist/rules/owasp/a06-vulnerable-components.js +243 -0
- package/dist/rules/owasp/a06-vulnerable-components.js.map +1 -0
- package/dist/rules/owasp/a07-auth-failures.d.ts +19 -0
- package/dist/rules/owasp/a07-auth-failures.d.ts.map +1 -0
- package/dist/rules/owasp/a07-auth-failures.js +300 -0
- package/dist/rules/owasp/a07-auth-failures.js.map +1 -0
- package/dist/rules/owasp/a08-integrity-failures.d.ts +18 -0
- package/dist/rules/owasp/a08-integrity-failures.d.ts.map +1 -0
- package/dist/rules/owasp/a08-integrity-failures.js +306 -0
- package/dist/rules/owasp/a08-integrity-failures.js.map +1 -0
- package/dist/rules/owasp/a09-logging-failures.d.ts +18 -0
- package/dist/rules/owasp/a09-logging-failures.d.ts.map +1 -0
- package/dist/rules/owasp/a09-logging-failures.js +339 -0
- package/dist/rules/owasp/a09-logging-failures.js.map +1 -0
- package/dist/rules/owasp/a10-ssrf.d.ts +18 -0
- package/dist/rules/owasp/a10-ssrf.d.ts.map +1 -0
- package/dist/rules/owasp/a10-ssrf.js +349 -0
- package/dist/rules/owasp/a10-ssrf.js.map +1 -0
- package/dist/rules/owasp/index.d.ts +20 -0
- package/dist/rules/owasp/index.d.ts.map +1 -0
- package/dist/rules/owasp/index.js +53 -0
- package/dist/rules/owasp/index.js.map +1 -0
- package/dist/rules/types.d.ts +277 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +34 -0
- package/dist/rules/types.js.map +1 -0
- package/dist/tests/integration/epic-integration.test.d.ts +7 -0
- package/dist/tests/integration/epic-integration.test.d.ts.map +1 -0
- package/dist/tests/integration/epic-integration.test.js +390 -0
- package/dist/tests/integration/epic-integration.test.js.map +1 -0
- package/dist/tests/rules/cwe/cwe-top25-1-13.test.d.ts +2 -0
- package/dist/tests/rules/cwe/cwe-top25-1-13.test.d.ts.map +1 -0
- package/dist/tests/rules/cwe/cwe-top25-1-13.test.js +154 -0
- package/dist/tests/rules/cwe/cwe-top25-1-13.test.js.map +1 -0
- package/dist/tests/rules/cwe/cwe-top25-14-25.test.d.ts +2 -0
- package/dist/tests/rules/cwe/cwe-top25-14-25.test.d.ts.map +1 -0
- package/dist/tests/rules/cwe/cwe-top25-14-25.test.js +121 -0
- package/dist/tests/rules/cwe/cwe-top25-14-25.test.js.map +1 -0
- package/dist/types/cve.d.ts +278 -0
- package/dist/types/cve.d.ts.map +1 -0
- package/dist/types/cve.js +7 -0
- package/dist/types/cve.js.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/rule.d.ts +245 -0
- package/dist/types/rule.d.ts.map +1 -0
- package/dist/types/rule.js +7 -0
- package/dist/types/rule.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview CPE (Common Platform Enumeration) Matching Engine
|
|
3
|
+
* @module @nahisaho/musubix-security/cve/cpe-matcher
|
|
4
|
+
*
|
|
5
|
+
* Provides npm package name to CPE conversion and semver-based
|
|
6
|
+
* vulnerability matching.
|
|
7
|
+
*
|
|
8
|
+
* @requirement REQ-CVE-003 - CPE matching for vulnerability lookup
|
|
9
|
+
* @design DES-EPIC2-004 - CPE Matcher component
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* Known npm package to vendor mappings
|
|
13
|
+
* Many npm packages use different names than their CPE vendor
|
|
14
|
+
*/
|
|
15
|
+
const VENDOR_MAPPINGS = {
|
|
16
|
+
// Major frameworks
|
|
17
|
+
'express': 'expressjs',
|
|
18
|
+
'koa': 'koajs',
|
|
19
|
+
'fastify': 'fastify',
|
|
20
|
+
'next': 'vercel',
|
|
21
|
+
'nuxt': 'nuxtjs',
|
|
22
|
+
'gatsby': 'gatsbyjs',
|
|
23
|
+
// Utilities
|
|
24
|
+
'lodash': 'lodash',
|
|
25
|
+
'underscore': 'underscorejs',
|
|
26
|
+
'moment': 'momentjs',
|
|
27
|
+
'dayjs': 'dayjs',
|
|
28
|
+
// Security-related
|
|
29
|
+
'jsonwebtoken': 'auth0',
|
|
30
|
+
'passport': 'passportjs',
|
|
31
|
+
'helmet': 'helmetjs',
|
|
32
|
+
// Database clients
|
|
33
|
+
'mongoose': 'mongoosejs',
|
|
34
|
+
'sequelize': 'sequelizejs',
|
|
35
|
+
'typeorm': 'typeorm',
|
|
36
|
+
'prisma': 'prisma',
|
|
37
|
+
'pg': 'postgresql',
|
|
38
|
+
'mysql2': 'mysql',
|
|
39
|
+
'sqlite3': 'sqlite',
|
|
40
|
+
// Build tools
|
|
41
|
+
'webpack': 'webpack',
|
|
42
|
+
'vite': 'vitejs',
|
|
43
|
+
'esbuild': 'esbuild',
|
|
44
|
+
'rollup': 'rollupjs',
|
|
45
|
+
// Testing
|
|
46
|
+
'jest': 'jestjs',
|
|
47
|
+
'mocha': 'mochajs',
|
|
48
|
+
'vitest': 'vitest',
|
|
49
|
+
// HTTP clients
|
|
50
|
+
'axios': 'axios',
|
|
51
|
+
'node-fetch': 'node-fetch',
|
|
52
|
+
'got': 'sindresorhus',
|
|
53
|
+
// Template engines
|
|
54
|
+
'pug': 'pugjs',
|
|
55
|
+
'ejs': 'ejs',
|
|
56
|
+
'handlebars': 'handlebarsjs',
|
|
57
|
+
// Validation
|
|
58
|
+
'joi': 'hapijs',
|
|
59
|
+
'yup': 'jquense',
|
|
60
|
+
'zod': 'colinhacks',
|
|
61
|
+
// Crypto
|
|
62
|
+
'bcrypt': 'bcrypt',
|
|
63
|
+
'argon2': 'argon2',
|
|
64
|
+
'crypto-js': 'crypto-js',
|
|
65
|
+
};
|
|
66
|
+
/**
|
|
67
|
+
* Packages that should be searched under 'node.js' vendor
|
|
68
|
+
*/
|
|
69
|
+
const NODEJS_VENDOR_PACKAGES = new Set([
|
|
70
|
+
'node',
|
|
71
|
+
'npm',
|
|
72
|
+
'npx',
|
|
73
|
+
]);
|
|
74
|
+
/**
|
|
75
|
+
* CPE Matcher for npm packages
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* ```typescript
|
|
79
|
+
* const matcher = new CPEMatcher();
|
|
80
|
+
*
|
|
81
|
+
* // Generate CPE from package
|
|
82
|
+
* const cpe = matcher.generateCPE('express', '4.18.2');
|
|
83
|
+
* // => 'cpe:2.3:a:expressjs:express:4.18.2:*:*:*:*:node.js:*:*'
|
|
84
|
+
*
|
|
85
|
+
* // Check if version is vulnerable
|
|
86
|
+
* const isVuln = matcher.isVersionVulnerable('4.18.2', {
|
|
87
|
+
* versionStart: '4.0.0',
|
|
88
|
+
* versionEnd: '4.19.0',
|
|
89
|
+
* versionEndExcluding: true
|
|
90
|
+
* });
|
|
91
|
+
* ```
|
|
92
|
+
*/
|
|
93
|
+
export class CPEMatcher {
|
|
94
|
+
vendorMappings;
|
|
95
|
+
constructor(customMappings) {
|
|
96
|
+
this.vendorMappings = new Map([
|
|
97
|
+
...Object.entries(VENDOR_MAPPINGS),
|
|
98
|
+
...Object.entries(customMappings ?? {}),
|
|
99
|
+
]);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Generate CPE 2.3 URI for an npm package
|
|
103
|
+
* @param packageName - npm package name
|
|
104
|
+
* @param version - Package version
|
|
105
|
+
* @returns CPE 2.3 formatted URI
|
|
106
|
+
*/
|
|
107
|
+
generateCPE(packageName, version) {
|
|
108
|
+
const components = this.packageToCPEComponents(packageName, version);
|
|
109
|
+
return this.componentsToURI(components);
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Convert npm package info to CPE components
|
|
113
|
+
*/
|
|
114
|
+
packageToCPEComponents(packageName, version) {
|
|
115
|
+
const normalizedName = this.normalizeName(packageName);
|
|
116
|
+
const vendor = this.resolveVendor(packageName);
|
|
117
|
+
return {
|
|
118
|
+
part: 'a',
|
|
119
|
+
vendor,
|
|
120
|
+
product: normalizedName,
|
|
121
|
+
version: this.normalizeVersion(version),
|
|
122
|
+
targetSw: 'node.js',
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Convert CPE components to URI string
|
|
127
|
+
*/
|
|
128
|
+
componentsToURI(components) {
|
|
129
|
+
const parts = [
|
|
130
|
+
'cpe:2.3',
|
|
131
|
+
components.part,
|
|
132
|
+
this.escapeComponent(components.vendor),
|
|
133
|
+
this.escapeComponent(components.product),
|
|
134
|
+
this.escapeComponent(components.version),
|
|
135
|
+
this.escapeComponent(components.update ?? '*'),
|
|
136
|
+
this.escapeComponent(components.edition ?? '*'),
|
|
137
|
+
this.escapeComponent(components.language ?? '*'),
|
|
138
|
+
this.escapeComponent(components.swEdition ?? '*'),
|
|
139
|
+
this.escapeComponent(components.targetSw ?? '*'),
|
|
140
|
+
this.escapeComponent(components.targetHw ?? '*'),
|
|
141
|
+
this.escapeComponent(components.other ?? '*'),
|
|
142
|
+
];
|
|
143
|
+
return parts.join(':');
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* Parse CPE 2.3 URI to components
|
|
147
|
+
*/
|
|
148
|
+
parseURI(cpeUri) {
|
|
149
|
+
const match = cpeUri.match(/^cpe:2\.3:([aoh]):([^:]+):([^:]+):([^:]+):([^:]*):([^:]*):([^:]*):([^:]*):([^:]*):([^:]*):([^:]*)$/);
|
|
150
|
+
if (!match) {
|
|
151
|
+
return null;
|
|
152
|
+
}
|
|
153
|
+
return {
|
|
154
|
+
part: match[1],
|
|
155
|
+
vendor: this.unescapeComponent(match[2]),
|
|
156
|
+
product: this.unescapeComponent(match[3]),
|
|
157
|
+
version: this.unescapeComponent(match[4]),
|
|
158
|
+
update: match[5] && match[5] !== '*' ? this.unescapeComponent(match[5]) : undefined,
|
|
159
|
+
edition: match[6] && match[6] !== '*' ? this.unescapeComponent(match[6]) : undefined,
|
|
160
|
+
language: match[7] && match[7] !== '*' ? this.unescapeComponent(match[7]) : undefined,
|
|
161
|
+
swEdition: match[8] && match[8] !== '*' ? this.unescapeComponent(match[8]) : undefined,
|
|
162
|
+
targetSw: match[9] && match[9] !== '*' ? this.unescapeComponent(match[9]) : undefined,
|
|
163
|
+
targetHw: match[10] && match[10] !== '*' ? this.unescapeComponent(match[10]) : undefined,
|
|
164
|
+
other: match[11] && match[11] !== '*' ? this.unescapeComponent(match[11]) : undefined,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Check if a version falls within a vulnerable range
|
|
169
|
+
* @param version - Version to check
|
|
170
|
+
* @param range - Version range from CVE data
|
|
171
|
+
* @returns True if version is within vulnerable range
|
|
172
|
+
*/
|
|
173
|
+
isVersionVulnerable(version, range) {
|
|
174
|
+
const normalizedVersion = this.normalizeVersion(version);
|
|
175
|
+
// Handle "all versions" case
|
|
176
|
+
if (!range.versionStart && !range.versionEnd) {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
const vStart = range.versionStart ? this.normalizeVersion(range.versionStart) : null;
|
|
180
|
+
const vEnd = range.versionEnd ? this.normalizeVersion(range.versionEnd) : null;
|
|
181
|
+
// Check start bound
|
|
182
|
+
if (vStart) {
|
|
183
|
+
const comparison = this.compareVersions(normalizedVersion, vStart);
|
|
184
|
+
if (range.versionStartExcluding) {
|
|
185
|
+
if (comparison <= 0)
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
if (comparison < 0)
|
|
190
|
+
return false;
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// Check end bound
|
|
194
|
+
if (vEnd) {
|
|
195
|
+
const comparison = this.compareVersions(normalizedVersion, vEnd);
|
|
196
|
+
if (range.versionEndExcluding) {
|
|
197
|
+
if (comparison >= 0)
|
|
198
|
+
return false;
|
|
199
|
+
}
|
|
200
|
+
else {
|
|
201
|
+
if (comparison > 0)
|
|
202
|
+
return false;
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
/**
|
|
208
|
+
* Match a package against CPE criteria
|
|
209
|
+
*/
|
|
210
|
+
matchPackage(packageName, packageVersion, cpeMatch) {
|
|
211
|
+
const parsed = this.parseURI(cpeMatch.criteria);
|
|
212
|
+
if (!parsed) {
|
|
213
|
+
return null;
|
|
214
|
+
}
|
|
215
|
+
const normalizedName = this.normalizeName(packageName);
|
|
216
|
+
const expectedVendors = this.getPossibleVendors(packageName);
|
|
217
|
+
// Check if product matches
|
|
218
|
+
const productMatches = parsed.product === normalizedName ||
|
|
219
|
+
parsed.product === '*' ||
|
|
220
|
+
parsed.product.includes(normalizedName);
|
|
221
|
+
// Check if vendor matches
|
|
222
|
+
const vendorMatches = parsed.vendor === '*' ||
|
|
223
|
+
expectedVendors.some(v => parsed.vendor === v ||
|
|
224
|
+
parsed.vendor.includes(v) ||
|
|
225
|
+
v.includes(parsed.vendor));
|
|
226
|
+
if (!productMatches || !vendorMatches) {
|
|
227
|
+
return null;
|
|
228
|
+
}
|
|
229
|
+
// Calculate confidence based on match quality
|
|
230
|
+
let confidence = 0.5;
|
|
231
|
+
if (parsed.vendor !== '*' && expectedVendors.includes(parsed.vendor)) {
|
|
232
|
+
confidence += 0.25;
|
|
233
|
+
}
|
|
234
|
+
if (parsed.product === normalizedName) {
|
|
235
|
+
confidence += 0.25;
|
|
236
|
+
}
|
|
237
|
+
// Check version range
|
|
238
|
+
const versionRange = cpeMatch.versionRange;
|
|
239
|
+
let isVulnerable = cpeMatch.vulnerable;
|
|
240
|
+
if (versionRange) {
|
|
241
|
+
isVulnerable = isVulnerable && this.isVersionVulnerable(packageVersion, versionRange);
|
|
242
|
+
}
|
|
243
|
+
else if (parsed.version !== '*') {
|
|
244
|
+
// Exact version match
|
|
245
|
+
isVulnerable = isVulnerable && this.compareVersions(this.normalizeVersion(packageVersion), this.normalizeVersion(parsed.version)) === 0;
|
|
246
|
+
}
|
|
247
|
+
return {
|
|
248
|
+
packageName,
|
|
249
|
+
packageVersion,
|
|
250
|
+
cveId: '', // To be filled by caller
|
|
251
|
+
cpe: this.generateCPE(packageName, packageVersion),
|
|
252
|
+
matchCriteria: cpeMatch,
|
|
253
|
+
isVulnerable,
|
|
254
|
+
confidence,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Add a custom vendor mapping
|
|
259
|
+
*/
|
|
260
|
+
addVendorMapping(packageName, vendor) {
|
|
261
|
+
this.vendorMappings.set(packageName.toLowerCase(), vendor);
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Get the vendor for a package
|
|
265
|
+
*/
|
|
266
|
+
getVendor(packageName) {
|
|
267
|
+
return this.resolveVendor(packageName);
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Normalize package name for CPE
|
|
271
|
+
*/
|
|
272
|
+
normalizeName(name) {
|
|
273
|
+
// Handle scoped packages (@org/package -> package)
|
|
274
|
+
const unscoped = name.startsWith('@') ? name.split('/')[1] : name;
|
|
275
|
+
// Convert to lowercase, replace special chars
|
|
276
|
+
return unscoped
|
|
277
|
+
.toLowerCase()
|
|
278
|
+
.replace(/[^a-z0-9]/g, '_')
|
|
279
|
+
.replace(/_+/g, '_')
|
|
280
|
+
.replace(/^_|_$/g, '');
|
|
281
|
+
}
|
|
282
|
+
/**
|
|
283
|
+
* Normalize version string
|
|
284
|
+
*/
|
|
285
|
+
normalizeVersion(version) {
|
|
286
|
+
// Remove leading 'v' and any pre-release/build metadata for comparison
|
|
287
|
+
return version
|
|
288
|
+
.replace(/^v/, '')
|
|
289
|
+
.replace(/[+-].*$/, '') // Remove pre-release (-beta) and build (+build) metadata
|
|
290
|
+
.trim();
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Resolve vendor for a package
|
|
294
|
+
*/
|
|
295
|
+
resolveVendor(packageName) {
|
|
296
|
+
const normalized = packageName.toLowerCase();
|
|
297
|
+
// Check for scoped packages
|
|
298
|
+
if (normalized.startsWith('@')) {
|
|
299
|
+
const [scope] = normalized.slice(1).split('/');
|
|
300
|
+
// Use scope as vendor (without @)
|
|
301
|
+
return scope.replace(/[^a-z0-9]/g, '_');
|
|
302
|
+
}
|
|
303
|
+
// Check custom mappings
|
|
304
|
+
if (this.vendorMappings.has(normalized)) {
|
|
305
|
+
return this.vendorMappings.get(normalized);
|
|
306
|
+
}
|
|
307
|
+
// Check Node.js packages
|
|
308
|
+
if (NODEJS_VENDOR_PACKAGES.has(normalized)) {
|
|
309
|
+
return 'nodejs';
|
|
310
|
+
}
|
|
311
|
+
// Default: use package name as vendor
|
|
312
|
+
return this.normalizeName(packageName);
|
|
313
|
+
}
|
|
314
|
+
/**
|
|
315
|
+
* Get possible vendor names for a package
|
|
316
|
+
*/
|
|
317
|
+
getPossibleVendors(packageName) {
|
|
318
|
+
const vendors = new Set();
|
|
319
|
+
const normalized = packageName.toLowerCase();
|
|
320
|
+
// Add resolved vendor
|
|
321
|
+
vendors.add(this.resolveVendor(packageName));
|
|
322
|
+
// Add normalized name
|
|
323
|
+
vendors.add(this.normalizeName(packageName));
|
|
324
|
+
// Add common variations
|
|
325
|
+
if (normalized.endsWith('js')) {
|
|
326
|
+
vendors.add(normalized.slice(0, -2));
|
|
327
|
+
}
|
|
328
|
+
if (!normalized.endsWith('js')) {
|
|
329
|
+
vendors.add(`${normalized}js`);
|
|
330
|
+
}
|
|
331
|
+
return Array.from(vendors);
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Compare two semver versions
|
|
335
|
+
* @returns -1 if a < b, 0 if a == b, 1 if a > b
|
|
336
|
+
*/
|
|
337
|
+
compareVersions(a, b) {
|
|
338
|
+
const partsA = a.split('.').map(p => parseInt(p, 10) || 0);
|
|
339
|
+
const partsB = b.split('.').map(p => parseInt(p, 10) || 0);
|
|
340
|
+
const maxLen = Math.max(partsA.length, partsB.length);
|
|
341
|
+
for (let i = 0; i < maxLen; i++) {
|
|
342
|
+
const partA = partsA[i] ?? 0;
|
|
343
|
+
const partB = partsB[i] ?? 0;
|
|
344
|
+
if (partA < partB)
|
|
345
|
+
return -1;
|
|
346
|
+
if (partA > partB)
|
|
347
|
+
return 1;
|
|
348
|
+
}
|
|
349
|
+
return 0;
|
|
350
|
+
}
|
|
351
|
+
/**
|
|
352
|
+
* Escape special characters in CPE component
|
|
353
|
+
*/
|
|
354
|
+
escapeComponent(value) {
|
|
355
|
+
if (value === '*' || value === '-') {
|
|
356
|
+
return value;
|
|
357
|
+
}
|
|
358
|
+
return value
|
|
359
|
+
.replace(/\\/g, '\\\\')
|
|
360
|
+
.replace(/\*/g, '\\*')
|
|
361
|
+
.replace(/\?/g, '\\?');
|
|
362
|
+
}
|
|
363
|
+
/**
|
|
364
|
+
* Unescape CPE component value
|
|
365
|
+
*/
|
|
366
|
+
unescapeComponent(value) {
|
|
367
|
+
if (value === '*' || value === '-') {
|
|
368
|
+
return value;
|
|
369
|
+
}
|
|
370
|
+
return value
|
|
371
|
+
.replace(/\\\\/g, '\\')
|
|
372
|
+
.replace(/\\\*/g, '*')
|
|
373
|
+
.replace(/\\\?/g, '?');
|
|
374
|
+
}
|
|
375
|
+
}
|
|
376
|
+
/**
|
|
377
|
+
* Create a CPE search query from package info
|
|
378
|
+
* Generates wildcarded CPE for searching NVD
|
|
379
|
+
*/
|
|
380
|
+
export function createCPESearchQuery(packageName, vendor) {
|
|
381
|
+
const matcher = new CPEMatcher();
|
|
382
|
+
const normalizedName = packageName
|
|
383
|
+
.toLowerCase()
|
|
384
|
+
.replace(/[^a-z0-9]/g, '_');
|
|
385
|
+
const resolvedVendor = vendor ?? matcher.getVendor(packageName);
|
|
386
|
+
return `cpe:2.3:a:${resolvedVendor}:${normalizedName}:*:*:*:*:*:*:*:*`;
|
|
387
|
+
}
|
|
388
|
+
/**
|
|
389
|
+
* Extract package name from CPE URI
|
|
390
|
+
*/
|
|
391
|
+
export function extractPackageFromCPE(cpeUri) {
|
|
392
|
+
const matcher = new CPEMatcher();
|
|
393
|
+
const parsed = matcher.parseURI(cpeUri);
|
|
394
|
+
return parsed?.product ?? null;
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=cpe-matcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpe-matcher.js","sourceRoot":"","sources":["../../src/cve/cpe-matcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview CVE Cache with SQLite storage
|
|
3
|
+
* @module @nahisaho/musubix-security/cve/cve-cache
|
|
4
|
+
* @description Provides persistent caching for CVE data to reduce NVD API calls
|
|
5
|
+
* @requirements REQ-SEC-CVE-002 - Rate limiting and caching for NVD API
|
|
6
|
+
* @design DES-SEC-CVE-002 - CVE cache with configurable TTL
|
|
7
|
+
* @task TSK-CVE-007 - SQLite キャッシュ
|
|
8
|
+
*/
|
|
9
|
+
import type { CVE } from '../types/cve.js';
|
|
10
|
+
/**
|
|
11
|
+
* Cache entry with metadata
|
|
12
|
+
*/
|
|
13
|
+
export interface CacheEntry<T> {
|
|
14
|
+
/** Cached data */
|
|
15
|
+
data: T;
|
|
16
|
+
/** Timestamp when the entry was created */
|
|
17
|
+
createdAt: number;
|
|
18
|
+
/** Timestamp when the entry expires */
|
|
19
|
+
expiresAt: number;
|
|
20
|
+
/** Optional ETag for conditional requests */
|
|
21
|
+
etag?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* CVE Cache configuration options
|
|
25
|
+
*/
|
|
26
|
+
export interface CVECacheOptions {
|
|
27
|
+
/** Path to the SQLite database file */
|
|
28
|
+
dbPath?: string;
|
|
29
|
+
/** Default TTL in milliseconds (default: 24 hours) */
|
|
30
|
+
defaultTTL?: number;
|
|
31
|
+
/** Maximum number of entries (default: 10000) */
|
|
32
|
+
maxEntries?: number;
|
|
33
|
+
/** Enable automatic cleanup (default: true) */
|
|
34
|
+
autoCleanup?: boolean;
|
|
35
|
+
/** Cleanup interval in milliseconds (default: 1 hour) */
|
|
36
|
+
cleanupInterval?: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Cache statistics
|
|
40
|
+
*/
|
|
41
|
+
export interface CacheStats {
|
|
42
|
+
/** Total number of entries */
|
|
43
|
+
totalEntries: number;
|
|
44
|
+
/** Number of expired entries */
|
|
45
|
+
expiredEntries: number;
|
|
46
|
+
/** Number of valid entries */
|
|
47
|
+
validEntries: number;
|
|
48
|
+
/** Cache hit rate */
|
|
49
|
+
hitRate: number;
|
|
50
|
+
/** Total cache size in bytes */
|
|
51
|
+
sizeBytes: number;
|
|
52
|
+
/** Oldest entry timestamp */
|
|
53
|
+
oldestEntry: number | null;
|
|
54
|
+
/** Newest entry timestamp */
|
|
55
|
+
newestEntry: number | null;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* CVE Cache implementation using file-based JSON storage
|
|
59
|
+
* @description Uses JSON files for persistence to avoid native module dependencies
|
|
60
|
+
*/
|
|
61
|
+
export declare class CVECache {
|
|
62
|
+
private readonly dbPath;
|
|
63
|
+
private readonly defaultTTL;
|
|
64
|
+
private readonly maxEntries;
|
|
65
|
+
private readonly autoCleanup;
|
|
66
|
+
private readonly cleanupInterval;
|
|
67
|
+
private cleanupTimer?;
|
|
68
|
+
private metrics;
|
|
69
|
+
private cache;
|
|
70
|
+
/**
|
|
71
|
+
* Default 24 hours TTL
|
|
72
|
+
*/
|
|
73
|
+
static readonly DEFAULT_TTL: number;
|
|
74
|
+
/**
|
|
75
|
+
* Default maximum entries
|
|
76
|
+
*/
|
|
77
|
+
static readonly DEFAULT_MAX_ENTRIES = 10000;
|
|
78
|
+
/**
|
|
79
|
+
* Default cleanup interval (1 hour)
|
|
80
|
+
*/
|
|
81
|
+
static readonly DEFAULT_CLEANUP_INTERVAL: number;
|
|
82
|
+
constructor(options?: CVECacheOptions);
|
|
83
|
+
/**
|
|
84
|
+
* Initialize storage directory and file
|
|
85
|
+
*/
|
|
86
|
+
private initializeStorage;
|
|
87
|
+
/**
|
|
88
|
+
* Load cache from disk
|
|
89
|
+
*/
|
|
90
|
+
private loadFromDisk;
|
|
91
|
+
/**
|
|
92
|
+
* Save cache to disk
|
|
93
|
+
*/
|
|
94
|
+
private saveToDisk;
|
|
95
|
+
/**
|
|
96
|
+
* Start automatic cleanup timer
|
|
97
|
+
*/
|
|
98
|
+
private startCleanupTimer;
|
|
99
|
+
/**
|
|
100
|
+
* Stop automatic cleanup timer
|
|
101
|
+
*/
|
|
102
|
+
private stopCleanupTimer;
|
|
103
|
+
/**
|
|
104
|
+
* Generate cache key for CVE ID
|
|
105
|
+
*/
|
|
106
|
+
private cveKey;
|
|
107
|
+
/**
|
|
108
|
+
* Generate cache key for CPE search
|
|
109
|
+
*/
|
|
110
|
+
private cpeKey;
|
|
111
|
+
/**
|
|
112
|
+
* Generate cache key for keyword search
|
|
113
|
+
*/
|
|
114
|
+
private keywordKey;
|
|
115
|
+
/**
|
|
116
|
+
* Get a CVE from cache
|
|
117
|
+
* @param cveId - CVE identifier (e.g., CVE-2024-12345)
|
|
118
|
+
* @returns Cached CVE or undefined if not found/expired
|
|
119
|
+
*/
|
|
120
|
+
getCVE(cveId: string): CVE | undefined;
|
|
121
|
+
/**
|
|
122
|
+
* Store a CVE in cache
|
|
123
|
+
* @param cve - CVE to cache
|
|
124
|
+
* @param ttl - Optional custom TTL in milliseconds
|
|
125
|
+
* @param etag - Optional ETag for conditional requests
|
|
126
|
+
*/
|
|
127
|
+
setCVE(cve: CVE, ttl?: number, etag?: string): void;
|
|
128
|
+
/**
|
|
129
|
+
* Get CVEs for a CPE from cache
|
|
130
|
+
* @param cpeName - CPE name string
|
|
131
|
+
* @returns Cached CVE array or undefined
|
|
132
|
+
*/
|
|
133
|
+
getCVEsByCPE(cpeName: string): CVE[] | undefined;
|
|
134
|
+
/**
|
|
135
|
+
* Store CVEs for a CPE in cache
|
|
136
|
+
* @param cpeName - CPE name string
|
|
137
|
+
* @param cves - Array of CVEs to cache
|
|
138
|
+
* @param ttl - Optional custom TTL
|
|
139
|
+
*/
|
|
140
|
+
setCVEsByCPE(cpeName: string, cves: CVE[], ttl?: number): void;
|
|
141
|
+
/**
|
|
142
|
+
* Get CVEs for a keyword search from cache
|
|
143
|
+
* @param keyword - Search keyword
|
|
144
|
+
* @returns Cached CVE array or undefined
|
|
145
|
+
*/
|
|
146
|
+
getCVEsByKeyword(keyword: string): CVE[] | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Store CVEs for a keyword search in cache
|
|
149
|
+
* @param keyword - Search keyword
|
|
150
|
+
* @param cves - Array of CVEs to cache
|
|
151
|
+
* @param ttl - Optional custom TTL (shorter recommended for searches)
|
|
152
|
+
*/
|
|
153
|
+
setCVEsByKeyword(keyword: string, cves: CVE[], ttl?: number): void;
|
|
154
|
+
/**
|
|
155
|
+
* Check if a CVE is in cache and not expired
|
|
156
|
+
* @param cveId - CVE identifier
|
|
157
|
+
* @returns true if cached and valid
|
|
158
|
+
*/
|
|
159
|
+
hasCVE(cveId: string): boolean;
|
|
160
|
+
/**
|
|
161
|
+
* Delete a CVE from cache
|
|
162
|
+
* @param cveId - CVE identifier
|
|
163
|
+
* @returns true if entry was deleted
|
|
164
|
+
*/
|
|
165
|
+
deleteCVE(cveId: string): boolean;
|
|
166
|
+
/**
|
|
167
|
+
* Get cache entry metadata
|
|
168
|
+
* @param cveId - CVE identifier
|
|
169
|
+
* @returns Cache entry metadata or undefined
|
|
170
|
+
*/
|
|
171
|
+
getCVEMetadata(cveId: string): Omit<CacheEntry<unknown>, 'data'> | undefined;
|
|
172
|
+
/**
|
|
173
|
+
* Remove expired entries
|
|
174
|
+
* @returns Number of entries removed
|
|
175
|
+
*/
|
|
176
|
+
cleanup(): number;
|
|
177
|
+
/**
|
|
178
|
+
* Enforce maximum entries limit (LRU eviction)
|
|
179
|
+
*/
|
|
180
|
+
private enforceMaxEntries;
|
|
181
|
+
/**
|
|
182
|
+
* Clear all entries
|
|
183
|
+
*/
|
|
184
|
+
clear(): void;
|
|
185
|
+
/**
|
|
186
|
+
* Get cache statistics
|
|
187
|
+
*/
|
|
188
|
+
getStats(): CacheStats;
|
|
189
|
+
/**
|
|
190
|
+
* Close cache and cleanup resources
|
|
191
|
+
*/
|
|
192
|
+
close(): void;
|
|
193
|
+
/**
|
|
194
|
+
* Batch get multiple CVEs
|
|
195
|
+
* @param cveIds - Array of CVE identifiers
|
|
196
|
+
* @returns Map of CVE ID to CVE (only found entries)
|
|
197
|
+
*/
|
|
198
|
+
getMultipleCVEs(cveIds: string[]): Map<string, CVE>;
|
|
199
|
+
/**
|
|
200
|
+
* Batch set multiple CVEs
|
|
201
|
+
* @param cves - Array of CVEs to cache
|
|
202
|
+
* @param ttl - Optional custom TTL
|
|
203
|
+
*/
|
|
204
|
+
setMultipleCVEs(cves: CVE[], ttl?: number): void;
|
|
205
|
+
/**
|
|
206
|
+
* Touch a cache entry to extend its TTL
|
|
207
|
+
* @param cveId - CVE identifier
|
|
208
|
+
* @param ttl - Optional new TTL
|
|
209
|
+
* @returns true if entry was touched
|
|
210
|
+
*/
|
|
211
|
+
touchCVE(cveId: string, ttl?: number): boolean;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Create a CVE cache with memory-only storage (no persistence)
|
|
215
|
+
*/
|
|
216
|
+
export declare function createMemoryCache(options?: Omit<CVECacheOptions, 'dbPath'>): CVECache;
|
|
217
|
+
/**
|
|
218
|
+
* Get or create the default cache instance
|
|
219
|
+
*/
|
|
220
|
+
export declare function getDefaultCache(): CVECache;
|
|
221
|
+
/**
|
|
222
|
+
* Close the default cache instance
|
|
223
|
+
*/
|
|
224
|
+
export declare function closeDefaultCache(): void;
|
|
225
|
+
//# sourceMappingURL=cve-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cve-cache.d.ts","sourceRoot":"","sources":["../../src/cve/cve-cache.ts"],"names":[],"mappings":"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"}
|