@zerothreatai/vulnerability-registry 9.0.5 → 9.0.7

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.
Files changed (52) hide show
  1. package/dist/categories/authentication.js +22 -0
  2. package/dist/categories/injection.js +49 -0
  3. package/dist/categories/sensitive-data.d.ts +8 -0
  4. package/dist/categories/sensitive-data.js +96 -0
  5. package/dist/categories/xss.js +22 -0
  6. package/dist/compliances/compliance-by-vulnerabilities.d.ts +1 -1
  7. package/dist/compliances/compliance-by-vulnerabilities.js +9 -6
  8. package/dist/compliances/gdpr.js +2 -1
  9. package/dist/compliances/hipaa.js +2 -1
  10. package/dist/compliances/iso27001.js +2 -1
  11. package/dist/compliances/owasp.js +2 -1
  12. package/dist/compliances/pci-dss.js +2 -1
  13. package/dist/compliances/sans-top-25.js +1 -1
  14. package/dist/error-codes.d.ts +52 -0
  15. package/dist/error-codes.js +58 -0
  16. package/dist/index.d.ts +2 -1
  17. package/dist/index.js +2 -1
  18. package/dist/registry.js +2 -0
  19. package/dist/scanner.js +1 -0
  20. package/dist-cjs/categories/authentication.js +22 -0
  21. package/dist-cjs/categories/injection.js +49 -0
  22. package/dist-cjs/categories/sensitive-data.js +99 -0
  23. package/dist-cjs/categories/xss.js +22 -0
  24. package/dist-cjs/compliances/compliance-by-vulnerabilities.js +9 -6
  25. package/dist-cjs/compliances/gdpr.js +2 -1
  26. package/dist-cjs/compliances/hipaa.js +2 -1
  27. package/dist-cjs/compliances/iso27001.js +2 -1
  28. package/dist-cjs/compliances/owasp.js +2 -1
  29. package/dist-cjs/compliances/pci-dss.js +2 -1
  30. package/dist-cjs/compliances/sans-top-25.js +1 -1
  31. package/dist-cjs/error-codes.js +58 -0
  32. package/dist-cjs/index.js +3 -1
  33. package/dist-cjs/registry.js +2 -0
  34. package/dist-cjs/scanner.js +1 -0
  35. package/package.json +1 -1
  36. package/src/categories/authentication.ts +34 -11
  37. package/src/categories/injection.ts +59 -8
  38. package/src/categories/sensitive-data.ts +117 -0
  39. package/src/categories/xss.ts +23 -0
  40. package/src/compliances/compliance-by-vulnerabilities.ts +23 -19
  41. package/src/compliances/gdpr.ts +2 -1
  42. package/src/compliances/hipaa.ts +2 -1
  43. package/src/compliances/iso27001.ts +2 -1
  44. package/src/compliances/owasp.ts +2 -1
  45. package/src/compliances/pci-dss.ts +2 -1
  46. package/src/compliances/sans-top-25.ts +4 -1
  47. package/src/error-codes.ts +130 -70
  48. package/src/index.ts +9 -7
  49. package/src/registry.ts +2 -0
  50. package/src/scanner.ts +3 -2
  51. package/zerothreatai-vulnerability-registry-2.0.0.tgz +0 -0
  52. package/zerothreatai-vulnerability-registry-4npm .0.0.tgz +0 -0
@@ -391,5 +391,27 @@ exports.AUTH_VULNERABILITIES = {
391
391
  ],
392
392
  remediation: 'Ignore untrusted x5c headers or validate certificate chains against a trusted root store with strict policy. Prefer pinned public keys or JWKS allowlists.',
393
393
  },
394
+ [error_codes_js_1.VulnerabilityCode.AUTH_SESSION_NOT_INVALIDATED_ON_LOGOUT]: {
395
+ id: 117,
396
+ code: error_codes_js_1.VulnerabilityCode.AUTH_SESSION_NOT_INVALIDATED_ON_LOGOUT,
397
+ title: 'Session Remains Valid After Logout',
398
+ description: 'Application logout does not invalidate the authenticated server-side session or token. A previously captured authenticated session can be replayed after logout to regain access to protected functionality, allowing attackers with stolen or fixed session material to continue operating as the victim.',
399
+ severity: 'high',
400
+ levelId: 2,
401
+ category: 'authentication',
402
+ scanner: 'session-invalidation',
403
+ cvss: {
404
+ score: 7.1,
405
+ vector: 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N',
406
+ severity: 'HIGH',
407
+ },
408
+ cwe: [
409
+ { id: 'CWE-613', name: 'Insufficient Session Expiration', url: 'https://cwe.mitre.org/data/definitions/613.html' },
410
+ ],
411
+ owasp: [
412
+ { id: 'A07:2021', name: 'Identification and Authentication Failures', url: 'https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/' },
413
+ ],
414
+ remediation: 'Invalidate sessions and tokens server-side during logout. Rotate session identifiers after login and privilege changes. Ensure logout revokes all session artifacts that can restore authenticated access, including cookies and browser storage tokens.',
415
+ },
394
416
  };
395
417
  exports.default = exports.AUTH_VULNERABILITIES;
@@ -780,5 +780,54 @@ exports.INJECTION_VULNERABILITIES = {
780
780
  ],
781
781
  remediation: 'Suppress detailed XPath error messages in production. Use safe XPath APIs and validation to prevent injection. Implement centralized error handling with generic responses.',
782
782
  },
783
+ // ========================================
784
+ // PATH PARAMETER INJECTION
785
+ // ========================================
786
+ [error_codes_js_1.VulnerabilityCode.PATH_PARAMETER_INJECTION]: {
787
+ id: 334,
788
+ code: error_codes_js_1.VulnerabilityCode.PATH_PARAMETER_INJECTION,
789
+ title: 'Path Parameter Injection',
790
+ description: 'Path parameter injection vulnerability detected where user-controlled path segments trigger server errors or internal detail leaks, indicating unsafe handling of dynamic path values that may enable injection or traversal behaviors.',
791
+ severity: 'medium',
792
+ levelId: 3,
793
+ category: 'injection',
794
+ scanner: 'model-state',
795
+ groupName: 'Injection',
796
+ cvss: {
797
+ score: 6.1,
798
+ vector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N',
799
+ severity: 'MEDIUM',
800
+ },
801
+ cwe: [
802
+ { id: 'CWE-20', name: 'Improper Input Validation', url: 'https://cwe.mitre.org/data/definitions/20.html' },
803
+ ],
804
+ owasp: [
805
+ { id: 'A03:2021', name: 'Injection', url: 'https://owasp.org/Top10/A03_2021-Injection/' },
806
+ ],
807
+ remediation: 'Validate and constrain path parameters with allowlists or route constraints. Normalize and sanitize path inputs before use. Avoid passing raw path segments into file or query handlers.',
808
+ },
809
+ [error_codes_js_1.VulnerabilityCode.HPP_DUPLICATE_PARAMETER]: {
810
+ id: 335,
811
+ code: error_codes_js_1.VulnerabilityCode.HPP_DUPLICATE_PARAMETER,
812
+ title: 'HTTP Parameter Pollution',
813
+ description: 'HTTP parameter pollution vulnerability detected where duplicate query parameter keys trigger behavior distinct from both single-value control requests, indicating inconsistent duplicate-key handling that may enable logic bypasses or validation mismatches across components.',
814
+ severity: 'medium',
815
+ levelId: 3,
816
+ category: 'injection',
817
+ scanner: 'model-state',
818
+ groupName: 'HTTP Parameter Pollution',
819
+ cvss: {
820
+ score: 5.3,
821
+ vector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N',
822
+ severity: 'MEDIUM',
823
+ },
824
+ cwe: [
825
+ { id: 'CWE-235', name: 'Improper Handling of Extra Parameters', url: 'https://cwe.mitre.org/data/definitions/235.html' },
826
+ ],
827
+ owasp: [
828
+ { id: 'A04:2021', name: 'Insecure Design', url: 'https://owasp.org/Top10/A04_2021-Insecure_Design/' },
829
+ ],
830
+ remediation: 'Reject unexpected duplicate parameters or canonicalize them consistently at the edge. Ensure upstream proxies, frameworks, and application code all apply the same duplicate-key handling rules. Prefer strict allowlists for security-sensitive parameters.',
831
+ },
783
832
  };
784
833
  exports.default = exports.INJECTION_VULNERABILITIES;
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ /**
3
+ * Vulnerability Registry - Sensitive Data Exposure
4
+ *
5
+ * Definitions for high-confidence sensitive data exposures detected in content.
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.SENSITIVE_DATA_VULNERABILITIES = void 0;
9
+ const error_codes_js_1 = require("../error-codes.js");
10
+ const CWE_EXPOSURE = [
11
+ { id: 'CWE-200', name: 'Exposure of Sensitive Information to an Unauthorized Actor', url: 'https://cwe.mitre.org/data/definitions/200.html' },
12
+ ];
13
+ const OWASP_CRYPTO = [
14
+ { id: 'A02:2021', name: 'Cryptographic Failures', url: 'https://owasp.org/Top10/A02_2021-Cryptographic_Failures/' },
15
+ ];
16
+ const CVSS_BY_SEVERITY = {
17
+ critical: { score: 9.1, vector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N', severity: 'CRITICAL' },
18
+ high: { score: 7.5, vector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N', severity: 'HIGH' },
19
+ medium: { score: 5.3, vector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N', severity: 'MEDIUM' },
20
+ low: { score: 3.1, vector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N', severity: 'LOW' },
21
+ info: { score: 0.0, vector: 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:N', severity: 'NONE' },
22
+ };
23
+ const LEVEL_BY_SEVERITY = {
24
+ critical: 1,
25
+ high: 2,
26
+ medium: 3,
27
+ low: 4,
28
+ info: 5,
29
+ };
30
+ const REMEDIATION = 'Remove secrets from client-visible responses, rotate any exposed keys, and store secrets in a secure vault. Implement response redaction and ensure sensitive data is never returned to unauthenticated users.';
31
+ const SENSITIVE_DATA_DEFS = [
32
+ { id: 608, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_AWS_ACCESS_KEY_ID, title: 'AWS Access Key ID Exposed', description: 'Exposure of an AWS Access Key ID in response content may allow unauthorized access to AWS resources.', severity: 'critical' },
33
+ { id: 609, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_AWS_SECRET_ACCESS_KEY, title: 'AWS Secret Access Key Exposed', description: 'Exposure of an AWS Secret Access Key in response content may allow unauthorized access to AWS resources.', severity: 'critical' },
34
+ { id: 610, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_AWS_MWS_AUTH_TOKEN, title: 'Amazon MWS Auth Token Exposed', description: 'Exposure of an Amazon MWS auth token in response content may allow unauthorized access to merchant APIs.', severity: 'critical' },
35
+ { id: 611, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_GOOGLE_API_KEY, title: 'Google API Key Exposed', description: 'Exposure of a Google API key in response content may allow unauthorized access to Google APIs.', severity: 'high' },
36
+ { id: 612, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_GOOGLE_OAUTH_TOKEN, title: 'Google OAuth Token Exposed', description: 'Exposure of a Google OAuth token in response content may allow unauthorized access to Google user data.', severity: 'high' },
37
+ { id: 613, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_GOOGLE_CLOUD_PRIVATE_KEY_ID, title: 'Google Cloud Private Key ID Exposed', description: 'Exposure of a Google Cloud private key ID in response content may allow unauthorized access to GCP services.', severity: 'critical' },
38
+ { id: 614, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_GITHUB_PAT, title: 'GitHub Personal Access Token Exposed', description: 'Exposure of a GitHub personal access token in response content may allow unauthorized access to repositories and APIs.', severity: 'critical' },
39
+ { id: 615, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_GITHUB_OAUTH_TOKEN, title: 'GitHub OAuth Token Exposed', description: 'Exposure of a GitHub OAuth token in response content may allow unauthorized access to GitHub APIs.', severity: 'critical' },
40
+ { id: 616, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_GITHUB_APP_TOKEN, title: 'GitHub App Token Exposed', description: 'Exposure of a GitHub App token in response content may allow unauthorized access to GitHub APIs.', severity: 'critical' },
41
+ { id: 617, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_GITHUB_REFRESH_TOKEN, title: 'GitHub Refresh Token Exposed', description: 'Exposure of a GitHub refresh token in response content may allow long-term unauthorized access.', severity: 'critical' },
42
+ { id: 618, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_GITLAB_PAT, title: 'GitLab Personal Access Token Exposed', description: 'Exposure of a GitLab personal access token in response content may allow unauthorized access to GitLab APIs.', severity: 'critical' },
43
+ { id: 619, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_GITLAB_PIPELINE_TOKEN, title: 'GitLab Pipeline Token Exposed', description: 'Exposure of a GitLab pipeline trigger token in response content may allow unauthorized pipeline execution.', severity: 'critical' },
44
+ { id: 620, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_AZURE_STORAGE_ACCOUNT_KEY, title: 'Azure Storage Account Key Exposed', description: 'Exposure of an Azure Storage account key in response content may allow unauthorized access to storage resources.', severity: 'critical' },
45
+ { id: 621, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_STRIPE_SECRET_KEY, title: 'Stripe Secret Key Exposed', description: 'Exposure of a Stripe secret key in response content may allow unauthorized payment operations.', severity: 'critical' },
46
+ { id: 622, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_STRIPE_PUBLISHABLE_KEY, title: 'Stripe Publishable Key Exposed', description: 'Exposure of a Stripe publishable key in response content may allow public API usage and metadata exposure.', severity: 'medium' },
47
+ { id: 623, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_STRIPE_RESTRICTED_KEY, title: 'Stripe Restricted Key Exposed', description: 'Exposure of a Stripe restricted key in response content may allow unauthorized access to restricted Stripe APIs.', severity: 'critical' },
48
+ { id: 624, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SLACK_TOKEN, title: 'Slack Token Exposed', description: 'Exposure of a Slack token in response content may allow unauthorized access to Slack workspaces.', severity: 'critical' },
49
+ { id: 625, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SLACK_WEBHOOK, title: 'Slack Webhook Exposed', description: 'Exposure of a Slack webhook URL in response content may allow unauthorized message posting.', severity: 'high' },
50
+ { id: 626, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_DISCORD_BOT_TOKEN, title: 'Discord Bot Token Exposed', description: 'Exposure of a Discord bot token in response content may allow unauthorized bot control.', severity: 'critical' },
51
+ { id: 627, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_DISCORD_WEBHOOK, title: 'Discord Webhook Exposed', description: 'Exposure of a Discord webhook URL in response content may allow unauthorized message posting.', severity: 'high' },
52
+ { id: 628, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_TWILIO_ACCOUNT_SID, title: 'Twilio Account SID Exposed', description: 'Exposure of a Twilio Account SID in response content may allow account enumeration or targeted attacks.', severity: 'high' },
53
+ { id: 629, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SENDGRID_API_KEY, title: 'SendGrid API Key Exposed', description: 'Exposure of a SendGrid API key in response content may allow unauthorized email sending.', severity: 'critical' },
54
+ { id: 630, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_MAILGUN_API_KEY, title: 'Mailgun API Key Exposed', description: 'Exposure of a Mailgun API key in response content may allow unauthorized email sending.', severity: 'critical' },
55
+ { id: 631, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_MAILCHIMP_API_KEY, title: 'Mailchimp API Key Exposed', description: 'Exposure of a Mailchimp API key in response content may allow unauthorized access to marketing data.', severity: 'critical' },
56
+ { id: 632, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_NPM_TOKEN, title: 'NPM Token Exposed', description: 'Exposure of an NPM access token in response content may allow unauthorized package publication or access.', severity: 'critical' },
57
+ { id: 633, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_PYPI_TOKEN, title: 'PyPI Token Exposed', description: 'Exposure of a PyPI API token in response content may allow unauthorized package publication or access.', severity: 'critical' },
58
+ { id: 634, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_RSA_PRIVATE_KEY, title: 'RSA Private Key Exposed', description: 'Exposure of an RSA private key in response content may allow unauthorized decryption or authentication.', severity: 'critical' },
59
+ { id: 635, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_OPENSSH_PRIVATE_KEY, title: 'OpenSSH Private Key Exposed', description: 'Exposure of an OpenSSH private key in response content may allow unauthorized server access.', severity: 'critical' },
60
+ { id: 636, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_DSA_PRIVATE_KEY, title: 'DSA Private Key Exposed', description: 'Exposure of a DSA private key in response content may allow unauthorized decryption or authentication.', severity: 'critical' },
61
+ { id: 637, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_EC_PRIVATE_KEY, title: 'EC Private Key Exposed', description: 'Exposure of an EC private key in response content may allow unauthorized decryption or authentication.', severity: 'critical' },
62
+ { id: 638, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_PGP_PRIVATE_KEY, title: 'PGP Private Key Exposed', description: 'Exposure of a PGP private key in response content may allow unauthorized decryption or signing.', severity: 'critical' },
63
+ { id: 639, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_ENCRYPTED_PRIVATE_KEY, title: 'Encrypted Private Key Exposed', description: 'Exposure of an encrypted private key in response content may allow offline brute force and key recovery.', severity: 'critical' },
64
+ { id: 640, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_MONGODB_URI, title: 'MongoDB Connection String Exposed', description: 'Exposure of a MongoDB connection string in response content may allow unauthorized database access.', severity: 'critical' },
65
+ { id: 641, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_POSTGRESQL_URI, title: 'PostgreSQL Connection String Exposed', description: 'Exposure of a PostgreSQL connection string in response content may allow unauthorized database access.', severity: 'critical' },
66
+ { id: 642, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_MYSQL_URI, title: 'MySQL Connection String Exposed', description: 'Exposure of a MySQL connection string in response content may allow unauthorized database access.', severity: 'critical' },
67
+ { id: 643, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_REDIS_URI, title: 'Redis Connection String Exposed', description: 'Exposure of a Redis connection string in response content may allow unauthorized database access.', severity: 'critical' },
68
+ { id: 644, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_MSSQL_URI, title: 'MSSQL Connection String Exposed', description: 'Exposure of a Microsoft SQL Server connection string in response content may allow unauthorized database access.', severity: 'critical' },
69
+ { id: 645, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_DIGITALOCEAN_TOKEN, title: 'DigitalOcean Token Exposed', description: 'Exposure of a DigitalOcean token in response content may allow unauthorized access to cloud resources.', severity: 'critical' },
70
+ { id: 646, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_ALIBABA_CLOUD_ACCESS_KEY, title: 'Alibaba Cloud Access Key Exposed', description: 'Exposure of an Alibaba Cloud access key in response content may allow unauthorized access to cloud resources.', severity: 'critical' },
71
+ { id: 647, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SQUARE_ACCESS_TOKEN, title: 'Square Access Token Exposed', description: 'Exposure of a Square access token in response content may allow unauthorized payment operations.', severity: 'critical' },
72
+ { id: 648, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SQUARE_OAUTH_SECRET, title: 'Square OAuth Secret Exposed', description: 'Exposure of a Square OAuth secret in response content may allow unauthorized access to Square APIs.', severity: 'critical' },
73
+ { id: 649, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SHOPIFY_ACCESS_TOKEN, title: 'Shopify Access Token Exposed', description: 'Exposure of a Shopify access token in response content may allow unauthorized access to Shopify APIs.', severity: 'critical' },
74
+ { id: 650, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SHOPIFY_CUSTOM_APP_TOKEN, title: 'Shopify Custom App Token Exposed', description: 'Exposure of a Shopify custom app token in response content may allow unauthorized access to Shopify APIs.', severity: 'critical' },
75
+ { id: 651, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SHOPIFY_PRIVATE_APP_TOKEN, title: 'Shopify Private App Token Exposed', description: 'Exposure of a Shopify private app token in response content may allow unauthorized access to Shopify APIs.', severity: 'critical' },
76
+ { id: 652, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SHOPIFY_SHARED_SECRET, title: 'Shopify Shared Secret Exposed', description: 'Exposure of a Shopify shared secret in response content may allow unauthorized access to Shopify integrations.', severity: 'critical' },
77
+ { id: 653, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_TELEGRAM_BOT_TOKEN, title: 'Telegram Bot Token Exposed', description: 'Exposure of a Telegram bot token in response content may allow unauthorized bot control.', severity: 'critical' },
78
+ { id: 654, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_OPENAI_API_KEY, title: 'OpenAI API Key Exposed', description: 'Exposure of an OpenAI API key in response content may allow unauthorized API usage.', severity: 'critical' },
79
+ { id: 655, code: error_codes_js_1.VulnerabilityCode.SENS_DATA_SENTRY_DSN, title: 'Sentry DSN Exposed', description: 'Exposure of a Sentry DSN in response content may allow unauthorized event submission.', severity: 'high' },
80
+ ];
81
+ exports.SENSITIVE_DATA_VULNERABILITIES = Object.fromEntries(SENSITIVE_DATA_DEFS.map((def) => ([
82
+ def.code,
83
+ {
84
+ id: def.id,
85
+ code: def.code,
86
+ title: def.title,
87
+ description: def.description,
88
+ severity: def.severity,
89
+ levelId: LEVEL_BY_SEVERITY[def.severity],
90
+ category: 'information_disclosure',
91
+ scanner: 'sensitive-data',
92
+ groupName: 'Sensitive Data',
93
+ cvss: CVSS_BY_SEVERITY[def.severity],
94
+ cwe: CWE_EXPOSURE,
95
+ owasp: OWASP_CRYPTO,
96
+ remediation: REMEDIATION,
97
+ },
98
+ ])));
99
+ exports.default = exports.SENSITIVE_DATA_VULNERABILITIES;
@@ -340,4 +340,26 @@ exports.XSS_VULNERABILITIES = {
340
340
  ],
341
341
  remediation: 'Use v-text instead of v-html for user content. Never compile user input as Vue templates. Use vue-runtime-only build that does not include template compiler. Sanitize mustache syntax.',
342
342
  },
343
+ [error_codes_js_1.VulnerabilityCode.XSS_INSUFFICIENT_OUTPUT_ENCODING]: {
344
+ id: 415,
345
+ code: error_codes_js_1.VulnerabilityCode.XSS_INSUFFICIENT_OUTPUT_ENCODING,
346
+ title: 'Insufficient Output Encoding',
347
+ description: 'Special characters are reflected without proper encoding in the response. While no direct XSS exploitation was confirmed, the incomplete encoding of characters like quotes, ampersands, or parentheses indicates potential encoding gaps that could lead to vulnerabilities in different contexts.',
348
+ severity: 'info',
349
+ levelId: 5,
350
+ category: 'xss',
351
+ scanner: 'xss',
352
+ cvss: {
353
+ score: 2.6,
354
+ vector: 'CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:N/I:L/A:N',
355
+ severity: 'LOW',
356
+ },
357
+ cwe: [
358
+ { id: 'CWE-116', name: 'Improper Encoding or Escaping of Output', url: 'https://cwe.mitre.org/data/definitions/116.html' },
359
+ ],
360
+ owasp: [
361
+ { id: 'A03:2021', name: 'Injection', url: 'https://owasp.org/Top10/A03_2021-Injection/' },
362
+ ],
363
+ remediation: 'Implement comprehensive output encoding for all special characters including <, >, ", \', &, (, ), /, and \\. Use context-aware encoding based on the output location (HTML body, attributes, JavaScript, URL, CSS).',
364
+ },
343
365
  };
@@ -7,35 +7,38 @@ const owasp_js_1 = require("./owasp.js");
7
7
  const pci_dss_js_1 = require("./pci-dss.js");
8
8
  const sans_top_25_js_1 = require("./sans-top-25.js");
9
9
  const iso27001_js_1 = require("./iso27001.js");
10
+ const helpers_js_1 = require("./helpers.js");
11
+ const pathInjectionIds = (0, helpers_js_1.idsByCodes)(['PATH_PARAMETER_INJECTION']);
12
+ const uniqueIds = (ids) => Array.from(new Set(ids));
10
13
  exports.COMPLIANCE_BY_VULNERABILITIES = [
11
14
  {
12
15
  id: 3,
13
16
  title: 'GDPR',
14
- vulnerabilities: [...gdpr_js_1.accessRestrictionIds, ...gdpr_js_1.allAppSecIds, ...gdpr_js_1.authAndCookieIds, ...gdpr_js_1.cryptoPolicyIds, ...gdpr_js_1.infoLeakageIds, ...gdpr_js_1.inputValidationIds, ...gdpr_js_1.outputValidationIds]
17
+ vulnerabilities: uniqueIds([...gdpr_js_1.accessRestrictionIds, ...gdpr_js_1.allAppSecIds, ...gdpr_js_1.authAndCookieIds, ...gdpr_js_1.cryptoPolicyIds, ...gdpr_js_1.infoLeakageIds, ...gdpr_js_1.inputValidationIds, ...gdpr_js_1.outputValidationIds, ...pathInjectionIds])
15
18
  },
16
19
  {
17
20
  id: 2,
18
21
  title: 'HIPAA',
19
- vulnerabilities: [hipaa_js_1.accessControlIds, ...hipaa_js_1.allAppSecIds, ...hipaa_js_1.authAndCookieIds, ...hipaa_js_1.cryptoIds, ...hipaa_js_1.integrityIds]
22
+ vulnerabilities: uniqueIds([...hipaa_js_1.accessControlIds, ...hipaa_js_1.allAppSecIds, ...hipaa_js_1.authAndCookieIds, ...hipaa_js_1.cryptoIds, ...hipaa_js_1.integrityIds, ...pathInjectionIds])
20
23
  },
21
24
  {
22
25
  id: 1,
23
26
  title: 'OWASP',
24
- vulnerabilities: [...owasp_js_1.owaspA1Ids, ...owasp_js_1.owaspA2Ids, ...owasp_js_1.owaspA3Ids, ...owasp_js_1.owaspA5Ids, ...owasp_js_1.owaspA7Ids, ...owasp_js_1.owaspA8Ids]
27
+ vulnerabilities: uniqueIds([...owasp_js_1.owaspA1Ids, ...owasp_js_1.owaspA2Ids, ...owasp_js_1.owaspA3Ids, ...owasp_js_1.owaspA5Ids, ...owasp_js_1.owaspA7Ids, ...owasp_js_1.owaspA8Ids, ...pathInjectionIds])
25
28
  },
26
29
  {
27
30
  id: 4,
28
31
  title: 'PCI-DSS',
29
- vulnerabilities: [...pci_dss_js_1.allAppSecIds, ...pci_dss_js_1.misconfigIds, ...pci_dss_js_1.accessControlIds, ...pci_dss_js_1.cryptoIds, ...pci_dss_js_1.injectionAndXssIds, ...pci_dss_js_1.authAndCookieIds]
32
+ vulnerabilities: uniqueIds([...pci_dss_js_1.allAppSecIds, ...pci_dss_js_1.misconfigIds, ...pci_dss_js_1.accessControlIds, ...pci_dss_js_1.cryptoIds, ...pci_dss_js_1.injectionAndXssIds, ...pci_dss_js_1.authAndCookieIds, ...pathInjectionIds])
30
33
  },
31
34
  {
32
35
  id: 6,
33
36
  title: 'SANS Top 25',
34
- vulnerabilities: [...sans_top_25_js_1.authIds, ...sans_top_25_js_1.accessControlIds, ...sans_top_25_js_1.cmdiIds, ...sans_top_25_js_1.deserializationIds, ...sans_top_25_js_1.disclosureIds, ...sans_top_25_js_1.injectionIds, ...sans_top_25_js_1.lfiIds, ...sans_top_25_js_1.sqliIds, ...sans_top_25_js_1.ssrfIds, ...sans_top_25_js_1.sstiIds, ...sans_top_25_js_1.xssIds]
37
+ vulnerabilities: uniqueIds([...sans_top_25_js_1.authIds, ...sans_top_25_js_1.accessControlIds, ...sans_top_25_js_1.cmdiIds, ...sans_top_25_js_1.deserializationIds, ...sans_top_25_js_1.disclosureIds, ...sans_top_25_js_1.injectionIds, ...sans_top_25_js_1.lfiIds, ...sans_top_25_js_1.sqliIds, ...sans_top_25_js_1.ssrfIds, ...sans_top_25_js_1.sstiIds, ...sans_top_25_js_1.xssIds, ...pathInjectionIds])
35
38
  },
36
39
  {
37
40
  id: 5,
38
41
  title: 'ISO 27001',
39
- vulnerabilities: [...iso27001_js_1.isoAccessControlIds, ...iso27001_js_1.isoCryptoIds, ...iso27001_js_1.isoOpsSecurityIds, ...iso27001_js_1.isoCommunicationsSecurityIds, ...iso27001_js_1.isoSecureDevelopmentIds, ...iso27001_js_1.isoComplianceIds]
42
+ vulnerabilities: uniqueIds([...iso27001_js_1.isoAccessControlIds, ...iso27001_js_1.isoCryptoIds, ...iso27001_js_1.isoOpsSecurityIds, ...iso27001_js_1.isoCommunicationsSecurityIds, ...iso27001_js_1.isoSecureDevelopmentIds, ...iso27001_js_1.isoComplianceIds, ...pathInjectionIds])
40
43
  }
41
44
  ];
@@ -5,7 +5,8 @@ const compliance_codes_js_1 = require("../compliance-codes.js");
5
5
  const types_js_1 = require("../types.js");
6
6
  const helpers_js_1 = require("./helpers.js");
7
7
  const authIds = (0, helpers_js_1.idsByCategory)('authentication');
8
- const injectionIds = (0, helpers_js_1.idsByCategory)('injection');
8
+ const pathInjectionIds = (0, helpers_js_1.idsByCodes)(['PATH_PARAMETER_INJECTION']);
9
+ const injectionIds = (0, helpers_js_1.mergeIds)((0, helpers_js_1.idsByCategory)('injection'), pathInjectionIds);
9
10
  const xssIds = (0, helpers_js_1.idsByCategory)('xss');
10
11
  const ssrfIds = (0, helpers_js_1.idsByCategory)('ssrf');
11
12
  const configIds = (0, helpers_js_1.idsByCategory)('configuration');
@@ -5,7 +5,8 @@ const compliance_codes_js_1 = require("../compliance-codes.js");
5
5
  const types_js_1 = require("../types.js");
6
6
  const helpers_js_1 = require("./helpers.js");
7
7
  const authIds = (0, helpers_js_1.idsByCategory)('authentication');
8
- const injectionIds = (0, helpers_js_1.idsByCategory)('injection');
8
+ const pathInjectionIds = (0, helpers_js_1.idsByCodes)(['PATH_PARAMETER_INJECTION']);
9
+ const injectionIds = (0, helpers_js_1.mergeIds)((0, helpers_js_1.idsByCategory)('injection'), pathInjectionIds);
9
10
  const xssIds = (0, helpers_js_1.idsByCategory)('xss');
10
11
  const ssrfIds = (0, helpers_js_1.idsByCategory)('ssrf');
11
12
  const configIds = (0, helpers_js_1.idsByCategory)('configuration');
@@ -5,7 +5,8 @@ const compliance_codes_js_1 = require("../compliance-codes.js");
5
5
  const types_js_1 = require("../types.js");
6
6
  const helpers_js_1 = require("./helpers.js");
7
7
  const authIds = (0, helpers_js_1.idsByCategory)('authentication');
8
- const injectionIds = (0, helpers_js_1.idsByCategory)('injection');
8
+ const pathInjectionIds = (0, helpers_js_1.idsByCodes)(['PATH_PARAMETER_INJECTION']);
9
+ const injectionIds = (0, helpers_js_1.mergeIds)((0, helpers_js_1.idsByCategory)('injection'), pathInjectionIds);
9
10
  const xssIds = (0, helpers_js_1.idsByCategory)('xss');
10
11
  const ssrfIds = (0, helpers_js_1.idsByCategory)('ssrf');
11
12
  const configIds = (0, helpers_js_1.idsByCategory)('configuration');
@@ -5,7 +5,8 @@ const compliance_codes_js_1 = require("../compliance-codes.js");
5
5
  const types_js_1 = require("../types.js");
6
6
  const helpers_js_1 = require("./helpers.js");
7
7
  const authIds = (0, helpers_js_1.idsByCategory)('authentication');
8
- const injectionIds = (0, helpers_js_1.idsByCategory)('injection');
8
+ const pathInjectionIds = (0, helpers_js_1.idsByCodes)(['PATH_PARAMETER_INJECTION']);
9
+ const injectionIds = (0, helpers_js_1.mergeIds)((0, helpers_js_1.idsByCategory)('injection'), pathInjectionIds);
9
10
  const xssIds = (0, helpers_js_1.idsByCategory)('xss');
10
11
  const ssrfIds = (0, helpers_js_1.idsByCategory)('ssrf');
11
12
  const configIds = (0, helpers_js_1.idsByCategory)('configuration');
@@ -5,7 +5,8 @@ const compliance_codes_js_1 = require("../compliance-codes.js");
5
5
  const types_js_1 = require("../types.js");
6
6
  const helpers_js_1 = require("./helpers.js");
7
7
  const authIds = (0, helpers_js_1.idsByCategory)('authentication');
8
- const injectionIds = (0, helpers_js_1.idsByCategory)('injection');
8
+ const pathInjectionIds = (0, helpers_js_1.idsByCodes)(['PATH_PARAMETER_INJECTION']);
9
+ const injectionIds = (0, helpers_js_1.mergeIds)((0, helpers_js_1.idsByCategory)('injection'), pathInjectionIds);
9
10
  const xssIds = (0, helpers_js_1.idsByCategory)('xss');
10
11
  const ssrfIds = (0, helpers_js_1.idsByCategory)('ssrf');
11
12
  const configIds = (0, helpers_js_1.idsByCategory)('configuration');
@@ -5,7 +5,7 @@ const compliance_codes_js_1 = require("../compliance-codes.js");
5
5
  const types_js_1 = require("../types.js");
6
6
  const helpers_js_1 = require("./helpers.js");
7
7
  exports.authIds = (0, helpers_js_1.idsByCategory)('authentication');
8
- exports.injectionIds = (0, helpers_js_1.idsByCategory)('injection');
8
+ exports.injectionIds = (0, helpers_js_1.mergeIds)((0, helpers_js_1.idsByCategory)('injection'), (0, helpers_js_1.idsByCodePrefix)(['PATH_PARAMETER_INJECTION']));
9
9
  exports.xssIds = (0, helpers_js_1.idsByCategory)('xss');
10
10
  exports.ssrfIds = (0, helpers_js_1.idsByCategory)('ssrf');
11
11
  exports.disclosureIds = (0, helpers_js_1.idsByCategory)('information_disclosure');
@@ -18,6 +18,10 @@ var VulnerabilityCode;
18
18
  VulnerabilityCode["SQLI_STACK_BASED"] = "SQLI_STACK_BASED";
19
19
  VulnerabilityCode["SQLI_UNION_BASED"] = "SQLI_UNION_BASED";
20
20
  // ========================================
21
+ // PATH INJECTION (PATH_*)
22
+ // ========================================
23
+ VulnerabilityCode["PATH_PARAMETER_INJECTION"] = "PATH_PARAMETER_INJECTION";
24
+ // ========================================
21
25
  // CROSS-SITE SCRIPTING (XSS_*)
22
26
  // ========================================
23
27
  VulnerabilityCode["XSS_REFLECTED"] = "XSS_REFLECTED";
@@ -35,6 +39,7 @@ var VulnerabilityCode;
35
39
  VulnerabilityCode["XSS_CSP_BYPASS"] = "XSS_CSP_BYPASS";
36
40
  VulnerabilityCode["XSS_TEMPLATE_LITERAL"] = "XSS_TEMPLATE_LITERAL";
37
41
  VulnerabilityCode["XSS_MUTATION_BASED"] = "XSS_MUTATION_BASED";
42
+ VulnerabilityCode["XSS_INSUFFICIENT_OUTPUT_ENCODING"] = "XSS_INSUFFICIENT_OUTPUT_ENCODING";
38
43
  // ========================================
39
44
  // COMMAND INJECTION (CMDI_*)
40
45
  // ========================================
@@ -100,6 +105,7 @@ var VulnerabilityCode;
100
105
  VulnerabilityCode["JWT_JKU_INJECTION"] = "JWT_JKU_INJECTION";
101
106
  VulnerabilityCode["JWT_EMBEDDED_JWK"] = "JWT_EMBEDDED_JWK";
102
107
  VulnerabilityCode["JWT_X5C_INJECTION"] = "JWT_X5C_INJECTION";
108
+ VulnerabilityCode["AUTH_SESSION_NOT_INVALIDATED_ON_LOGOUT"] = "AUTH_SESSION_NOT_INVALIDATED_ON_LOGOUT";
103
109
  // ========================================
104
110
  // OPEN REDIRECT (REDIRECT_*)
105
111
  // ========================================
@@ -203,6 +209,7 @@ var VulnerabilityCode;
203
209
  VulnerabilityCode["MASSASSIGN_PROTOTYPE_POLLUTION"] = "MASSASSIGN_PROTOTYPE_POLLUTION";
204
210
  VulnerabilityCode["MASSASSIGN_ROLE_ESCALATION"] = "MASSASSIGN_ROLE_ESCALATION";
205
211
  VulnerabilityCode["MASSASSIGN_HIDDEN_FIELD"] = "MASSASSIGN_HIDDEN_FIELD";
212
+ VulnerabilityCode["HPP_DUPLICATE_PARAMETER"] = "HPP_DUPLICATE_PARAMETER";
206
213
  // ========================================
207
214
  // DESERIALIZATION (DESER_*)
208
215
  // ========================================
@@ -345,6 +352,57 @@ var VulnerabilityCode;
345
352
  VulnerabilityCode["SENS_LOW_SERVERLESS_CONFIG_EXPOSED"] = "SENS_LOW_SERVERLESS_CONFIG_EXPOSED";
346
353
  VulnerabilityCode["SENS_LOW_CLOUD_FORMATION_TEMPLATE_EXPOSED"] = "SENS_LOW_CLOUD_FORMATION_TEMPLATE_EXPOSED";
347
354
  // ========================================
355
+ // SENSITIVE DATA EXPOSURE (SENS_DATA_*)
356
+ // ========================================
357
+ VulnerabilityCode["SENS_DATA_AWS_ACCESS_KEY_ID"] = "SENS_DATA_AWS_ACCESS_KEY_ID";
358
+ VulnerabilityCode["SENS_DATA_AWS_SECRET_ACCESS_KEY"] = "SENS_DATA_AWS_SECRET_ACCESS_KEY";
359
+ VulnerabilityCode["SENS_DATA_AWS_MWS_AUTH_TOKEN"] = "SENS_DATA_AWS_MWS_AUTH_TOKEN";
360
+ VulnerabilityCode["SENS_DATA_GOOGLE_API_KEY"] = "SENS_DATA_GOOGLE_API_KEY";
361
+ VulnerabilityCode["SENS_DATA_GOOGLE_OAUTH_TOKEN"] = "SENS_DATA_GOOGLE_OAUTH_TOKEN";
362
+ VulnerabilityCode["SENS_DATA_GOOGLE_CLOUD_PRIVATE_KEY_ID"] = "SENS_DATA_GOOGLE_CLOUD_PRIVATE_KEY_ID";
363
+ VulnerabilityCode["SENS_DATA_GITHUB_PAT"] = "SENS_DATA_GITHUB_PAT";
364
+ VulnerabilityCode["SENS_DATA_GITHUB_OAUTH_TOKEN"] = "SENS_DATA_GITHUB_OAUTH_TOKEN";
365
+ VulnerabilityCode["SENS_DATA_GITHUB_APP_TOKEN"] = "SENS_DATA_GITHUB_APP_TOKEN";
366
+ VulnerabilityCode["SENS_DATA_GITHUB_REFRESH_TOKEN"] = "SENS_DATA_GITHUB_REFRESH_TOKEN";
367
+ VulnerabilityCode["SENS_DATA_GITLAB_PAT"] = "SENS_DATA_GITLAB_PAT";
368
+ VulnerabilityCode["SENS_DATA_GITLAB_PIPELINE_TOKEN"] = "SENS_DATA_GITLAB_PIPELINE_TOKEN";
369
+ VulnerabilityCode["SENS_DATA_AZURE_STORAGE_ACCOUNT_KEY"] = "SENS_DATA_AZURE_STORAGE_ACCOUNT_KEY";
370
+ VulnerabilityCode["SENS_DATA_STRIPE_SECRET_KEY"] = "SENS_DATA_STRIPE_SECRET_KEY";
371
+ VulnerabilityCode["SENS_DATA_STRIPE_PUBLISHABLE_KEY"] = "SENS_DATA_STRIPE_PUBLISHABLE_KEY";
372
+ VulnerabilityCode["SENS_DATA_STRIPE_RESTRICTED_KEY"] = "SENS_DATA_STRIPE_RESTRICTED_KEY";
373
+ VulnerabilityCode["SENS_DATA_SLACK_TOKEN"] = "SENS_DATA_SLACK_TOKEN";
374
+ VulnerabilityCode["SENS_DATA_SLACK_WEBHOOK"] = "SENS_DATA_SLACK_WEBHOOK";
375
+ VulnerabilityCode["SENS_DATA_DISCORD_BOT_TOKEN"] = "SENS_DATA_DISCORD_BOT_TOKEN";
376
+ VulnerabilityCode["SENS_DATA_DISCORD_WEBHOOK"] = "SENS_DATA_DISCORD_WEBHOOK";
377
+ VulnerabilityCode["SENS_DATA_TWILIO_ACCOUNT_SID"] = "SENS_DATA_TWILIO_ACCOUNT_SID";
378
+ VulnerabilityCode["SENS_DATA_SENDGRID_API_KEY"] = "SENS_DATA_SENDGRID_API_KEY";
379
+ VulnerabilityCode["SENS_DATA_MAILGUN_API_KEY"] = "SENS_DATA_MAILGUN_API_KEY";
380
+ VulnerabilityCode["SENS_DATA_MAILCHIMP_API_KEY"] = "SENS_DATA_MAILCHIMP_API_KEY";
381
+ VulnerabilityCode["SENS_DATA_NPM_TOKEN"] = "SENS_DATA_NPM_TOKEN";
382
+ VulnerabilityCode["SENS_DATA_PYPI_TOKEN"] = "SENS_DATA_PYPI_TOKEN";
383
+ VulnerabilityCode["SENS_DATA_RSA_PRIVATE_KEY"] = "SENS_DATA_RSA_PRIVATE_KEY";
384
+ VulnerabilityCode["SENS_DATA_OPENSSH_PRIVATE_KEY"] = "SENS_DATA_OPENSSH_PRIVATE_KEY";
385
+ VulnerabilityCode["SENS_DATA_DSA_PRIVATE_KEY"] = "SENS_DATA_DSA_PRIVATE_KEY";
386
+ VulnerabilityCode["SENS_DATA_EC_PRIVATE_KEY"] = "SENS_DATA_EC_PRIVATE_KEY";
387
+ VulnerabilityCode["SENS_DATA_PGP_PRIVATE_KEY"] = "SENS_DATA_PGP_PRIVATE_KEY";
388
+ VulnerabilityCode["SENS_DATA_ENCRYPTED_PRIVATE_KEY"] = "SENS_DATA_ENCRYPTED_PRIVATE_KEY";
389
+ VulnerabilityCode["SENS_DATA_MONGODB_URI"] = "SENS_DATA_MONGODB_URI";
390
+ VulnerabilityCode["SENS_DATA_POSTGRESQL_URI"] = "SENS_DATA_POSTGRESQL_URI";
391
+ VulnerabilityCode["SENS_DATA_MYSQL_URI"] = "SENS_DATA_MYSQL_URI";
392
+ VulnerabilityCode["SENS_DATA_REDIS_URI"] = "SENS_DATA_REDIS_URI";
393
+ VulnerabilityCode["SENS_DATA_MSSQL_URI"] = "SENS_DATA_MSSQL_URI";
394
+ VulnerabilityCode["SENS_DATA_DIGITALOCEAN_TOKEN"] = "SENS_DATA_DIGITALOCEAN_TOKEN";
395
+ VulnerabilityCode["SENS_DATA_ALIBABA_CLOUD_ACCESS_KEY"] = "SENS_DATA_ALIBABA_CLOUD_ACCESS_KEY";
396
+ VulnerabilityCode["SENS_DATA_SQUARE_ACCESS_TOKEN"] = "SENS_DATA_SQUARE_ACCESS_TOKEN";
397
+ VulnerabilityCode["SENS_DATA_SQUARE_OAUTH_SECRET"] = "SENS_DATA_SQUARE_OAUTH_SECRET";
398
+ VulnerabilityCode["SENS_DATA_SHOPIFY_ACCESS_TOKEN"] = "SENS_DATA_SHOPIFY_ACCESS_TOKEN";
399
+ VulnerabilityCode["SENS_DATA_SHOPIFY_CUSTOM_APP_TOKEN"] = "SENS_DATA_SHOPIFY_CUSTOM_APP_TOKEN";
400
+ VulnerabilityCode["SENS_DATA_SHOPIFY_PRIVATE_APP_TOKEN"] = "SENS_DATA_SHOPIFY_PRIVATE_APP_TOKEN";
401
+ VulnerabilityCode["SENS_DATA_SHOPIFY_SHARED_SECRET"] = "SENS_DATA_SHOPIFY_SHARED_SECRET";
402
+ VulnerabilityCode["SENS_DATA_TELEGRAM_BOT_TOKEN"] = "SENS_DATA_TELEGRAM_BOT_TOKEN";
403
+ VulnerabilityCode["SENS_DATA_OPENAI_API_KEY"] = "SENS_DATA_OPENAI_API_KEY";
404
+ VulnerabilityCode["SENS_DATA_SENTRY_DSN"] = "SENS_DATA_SENTRY_DSN";
405
+ // ========================================
348
406
  // CLICKJACKING (CLICK_*)
349
407
  // ========================================
350
408
  VulnerabilityCode["CLICK_FRAMEABLE"] = "CLICK_FRAMEABLE";
package/dist-cjs/index.js CHANGED
@@ -5,7 +5,7 @@
5
5
  * Exports all vulnerability codes, definitions, and lookup utilities
6
6
  */
7
7
  Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.COMPLIANCE_BY_VULNERABILITIES = exports.SCANNER_REGISTRY = exports.CATEGORY_REGISTRY = exports.ISO27001_COMPLIANCE = exports.SANS_TOP_25_COMPLIANCE = exports.PCI_DSS_COMPLIANCE = exports.GDPR_COMPLIANCE = exports.HIPAA_COMPLIANCE = exports.OWASP_COMPLIANCE = exports.VULNERABILITY_REGISTRY = exports.SENSITIVE_PATH_VULNERABILITIES = exports.CONFIG_VULNERABILITIES = exports.AUTH_VULNERABILITIES = exports.SSRF_VULNERABILITIES = exports.XSS_VULNERABILITIES = exports.INJECTION_VULNERABILITIES = exports.VulnerabilityCode = void 0;
8
+ exports.COMPLIANCE_BY_VULNERABILITIES = exports.SCANNER_REGISTRY = exports.CATEGORY_REGISTRY = exports.ISO27001_COMPLIANCE = exports.SANS_TOP_25_COMPLIANCE = exports.PCI_DSS_COMPLIANCE = exports.GDPR_COMPLIANCE = exports.HIPAA_COMPLIANCE = exports.OWASP_COMPLIANCE = exports.VULNERABILITY_REGISTRY = exports.SENSITIVE_DATA_VULNERABILITIES = exports.SENSITIVE_PATH_VULNERABILITIES = exports.CONFIG_VULNERABILITIES = exports.AUTH_VULNERABILITIES = exports.SSRF_VULNERABILITIES = exports.XSS_VULNERABILITIES = exports.INJECTION_VULNERABILITIES = exports.VulnerabilityCode = void 0;
9
9
  exports.getVulnerabilityDefinition = getVulnerabilityDefinition;
10
10
  exports.getVulnerabilitiesByScanner = getVulnerabilitiesByScanner;
11
11
  exports.getVulnerabilitiesByCategory = getVulnerabilitiesByCategory;
@@ -28,6 +28,8 @@ const configuration_js_1 = require("./categories/configuration.js");
28
28
  Object.defineProperty(exports, "CONFIG_VULNERABILITIES", { enumerable: true, get: function () { return configuration_js_1.CONFIG_VULNERABILITIES; } });
29
29
  const sensitive_paths_js_1 = require("./categories/sensitive-paths.js");
30
30
  Object.defineProperty(exports, "SENSITIVE_PATH_VULNERABILITIES", { enumerable: true, get: function () { return sensitive_paths_js_1.SENSITIVE_PATH_VULNERABILITIES; } });
31
+ const sensitive_data_js_1 = require("./categories/sensitive-data.js");
32
+ Object.defineProperty(exports, "SENSITIVE_DATA_VULNERABILITIES", { enumerable: true, get: function () { return sensitive_data_js_1.SENSITIVE_DATA_VULNERABILITIES; } });
31
33
  const category_js_1 = require("./category.js");
32
34
  Object.defineProperty(exports, "CATEGORY_REGISTRY", { enumerable: true, get: function () { return category_js_1.CATEGORY_REGISTRY; } });
33
35
  const scanner_js_1 = require("./scanner.js");
@@ -7,6 +7,7 @@ const ssrf_js_1 = require("./categories/ssrf.js");
7
7
  const authentication_js_1 = require("./categories/authentication.js");
8
8
  const configuration_js_1 = require("./categories/configuration.js");
9
9
  const sensitive_paths_js_1 = require("./categories/sensitive-paths.js");
10
+ const sensitive_data_js_1 = require("./categories/sensitive-data.js");
10
11
  /**
11
12
  * Complete vulnerability registry combining all categories.
12
13
  * Kept in a standalone module to avoid circular imports with compliances.
@@ -68,6 +69,7 @@ exports.VULNERABILITY_REGISTRY = Object.fromEntries(Object.entries({
68
69
  ...authentication_js_1.AUTH_VULNERABILITIES,
69
70
  ...configuration_js_1.CONFIG_VULNERABILITIES,
70
71
  ...sensitive_paths_js_1.SENSITIVE_PATH_VULNERABILITIES,
72
+ ...sensitive_data_js_1.SENSITIVE_DATA_VULNERABILITIES,
71
73
  }).map(([code, definition]) => ([
72
74
  code,
73
75
  {
@@ -16,6 +16,7 @@ exports.SCANNER_REGISTRY = {
16
16
  "redirect-route": { title: "Redirect Route" },
17
17
  "security-headers": { title: "Security Headers" },
18
18
  "sensitive-path-scout": { title: "Sensitive Path Scout" },
19
+ "sensitive-data": { title: "Sensitive Data Detection" },
19
20
  "sql-injection": { title: "SQL Injection" },
20
21
  "ssrf": { title: "SSRF" },
21
22
  "ssti": { title: "SSTI" },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zerothreatai/vulnerability-registry",
3
- "version": "9.0.5",
3
+ "version": "9.0.7",
4
4
  "description": "Centralized vulnerability definitions, CVSS scores, and references for ZeroThreat scanners",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -385,11 +385,11 @@ export const AUTH_VULNERABILITIES: Record<string, VulnerabilityDefinitionInput>
385
385
  remediation: 'Reject embedded JWKs from tokens unless explicitly required and validated against a trusted key set. Use pinned keys and strict header validation.',
386
386
  },
387
387
 
388
- [VulnerabilityCode.JWT_X5C_INJECTION]: {
389
- id: 116,
390
- code: VulnerabilityCode.JWT_X5C_INJECTION,
391
- title: 'JWT X5C Header Injection',
392
- description: 'JWT x5c header injection vulnerability where attackers provide an untrusted certificate chain, allowing them to influence key selection or bypass signature validation if certificate trust is not strictly enforced.',
388
+ [VulnerabilityCode.JWT_X5C_INJECTION]: {
389
+ id: 116,
390
+ code: VulnerabilityCode.JWT_X5C_INJECTION,
391
+ title: 'JWT X5C Header Injection',
392
+ description: 'JWT x5c header injection vulnerability where attackers provide an untrusted certificate chain, allowing them to influence key selection or bypass signature validation if certificate trust is not strictly enforced.',
393
393
  severity: 'high',
394
394
  levelId: 2,
395
395
  category: 'authentication',
@@ -404,9 +404,32 @@ export const AUTH_VULNERABILITIES: Record<string, VulnerabilityDefinitionInput>
404
404
  ],
405
405
  owasp: [
406
406
  { id: 'A07:2021', name: 'Identification and Authentication Failures', url: 'https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/' },
407
- ],
408
- remediation: 'Ignore untrusted x5c headers or validate certificate chains against a trusted root store with strict policy. Prefer pinned public keys or JWKS allowlists.',
409
- },
410
- };
411
-
412
- export default AUTH_VULNERABILITIES;
407
+ ],
408
+ remediation: 'Ignore untrusted x5c headers or validate certificate chains against a trusted root store with strict policy. Prefer pinned public keys or JWKS allowlists.',
409
+ },
410
+
411
+ [VulnerabilityCode.AUTH_SESSION_NOT_INVALIDATED_ON_LOGOUT]: {
412
+ id: 117,
413
+ code: VulnerabilityCode.AUTH_SESSION_NOT_INVALIDATED_ON_LOGOUT,
414
+ title: 'Session Remains Valid After Logout',
415
+ description: 'Application logout does not invalidate the authenticated server-side session or token. A previously captured authenticated session can be replayed after logout to regain access to protected functionality, allowing attackers with stolen or fixed session material to continue operating as the victim.',
416
+ severity: 'high',
417
+ levelId: 2,
418
+ category: 'authentication',
419
+ scanner: 'session-invalidation',
420
+ cvss: {
421
+ score: 7.1,
422
+ vector: 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N',
423
+ severity: 'HIGH',
424
+ },
425
+ cwe: [
426
+ { id: 'CWE-613', name: 'Insufficient Session Expiration', url: 'https://cwe.mitre.org/data/definitions/613.html' },
427
+ ],
428
+ owasp: [
429
+ { id: 'A07:2021', name: 'Identification and Authentication Failures', url: 'https://owasp.org/Top10/A07_2021-Identification_and_Authentication_Failures/' },
430
+ ],
431
+ remediation: 'Invalidate sessions and tokens server-side during logout. Rotate session identifiers after login and privilege changes. Ensure logout revokes all session artifacts that can restore authenticated access, including cookies and browser storage tokens.',
432
+ },
433
+ };
434
+
435
+ export default AUTH_VULNERABILITIES;