codeslick-cli 1.4.0 → 1.4.2

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 (138) hide show
  1. package/dist/packages/cli/src/commands/scan.d.ts.map +1 -1
  2. package/dist/packages/cli/src/commands/scan.js +7 -3
  3. package/dist/packages/cli/src/commands/scan.js.map +1 -1
  4. package/dist/packages/cli/src/reporters/cli-reporter.d.ts +11 -0
  5. package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -1
  6. package/dist/packages/cli/src/reporters/cli-reporter.js +150 -45
  7. package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -1
  8. package/dist/packages/cli/src/scanner/local-scanner.d.ts +2 -2
  9. package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -1
  10. package/dist/packages/cli/src/scanner/local-scanner.js +40 -9
  11. package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -1
  12. package/dist/src/lib/analyzers/go-analyzer.d.ts +12 -0
  13. package/dist/src/lib/analyzers/go-analyzer.d.ts.map +1 -1
  14. package/dist/src/lib/analyzers/go-analyzer.js +113 -0
  15. package/dist/src/lib/analyzers/go-analyzer.js.map +1 -1
  16. package/dist/src/lib/analyzers/iac/pii-detector.d.ts +27 -0
  17. package/dist/src/lib/analyzers/iac/pii-detector.d.ts.map +1 -0
  18. package/dist/src/lib/analyzers/iac/pii-detector.js +199 -0
  19. package/dist/src/lib/analyzers/iac/pii-detector.js.map +1 -0
  20. package/dist/src/lib/analyzers/iac/pii-patterns.d.ts +43 -0
  21. package/dist/src/lib/analyzers/iac/pii-patterns.d.ts.map +1 -0
  22. package/dist/src/lib/analyzers/iac/pii-patterns.js +228 -0
  23. package/dist/src/lib/analyzers/iac/pii-patterns.js.map +1 -0
  24. package/dist/src/lib/analyzers/java-analyzer.d.ts +5 -0
  25. package/dist/src/lib/analyzers/java-analyzer.d.ts.map +1 -1
  26. package/dist/src/lib/analyzers/java-analyzer.js +51 -0
  27. package/dist/src/lib/analyzers/java-analyzer.js.map +1 -1
  28. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts +8 -4
  29. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts.map +1 -1
  30. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js +109 -13
  31. package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js.map +1 -1
  32. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts.map +1 -1
  33. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js +7 -8
  34. package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js.map +1 -1
  35. package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -1
  36. package/dist/src/lib/analyzers/javascript-analyzer.js +16 -12
  37. package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -1
  38. package/dist/src/lib/analyzers/kubernetes/checks/network-security.d.ts +33 -0
  39. package/dist/src/lib/analyzers/kubernetes/checks/network-security.d.ts.map +1 -0
  40. package/dist/src/lib/analyzers/kubernetes/checks/network-security.js +184 -0
  41. package/dist/src/lib/analyzers/kubernetes/checks/network-security.js.map +1 -0
  42. package/dist/src/lib/analyzers/kubernetes/checks/pod-security.d.ts +60 -0
  43. package/dist/src/lib/analyzers/kubernetes/checks/pod-security.d.ts.map +1 -0
  44. package/dist/src/lib/analyzers/kubernetes/checks/pod-security.js +418 -0
  45. package/dist/src/lib/analyzers/kubernetes/checks/pod-security.js.map +1 -0
  46. package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.d.ts +44 -0
  47. package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.d.ts.map +1 -0
  48. package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.js +275 -0
  49. package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.js.map +1 -0
  50. package/dist/src/lib/analyzers/kubernetes/checks/resource-management.d.ts +32 -0
  51. package/dist/src/lib/analyzers/kubernetes/checks/resource-management.d.ts.map +1 -0
  52. package/dist/src/lib/analyzers/kubernetes/checks/resource-management.js +176 -0
  53. package/dist/src/lib/analyzers/kubernetes/checks/resource-management.js.map +1 -0
  54. package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.d.ts +38 -0
  55. package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.d.ts.map +1 -0
  56. package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.js +266 -0
  57. package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.js.map +1 -0
  58. package/dist/src/lib/analyzers/kubernetes/checks/service-security.d.ts +26 -0
  59. package/dist/src/lib/analyzers/kubernetes/checks/service-security.d.ts.map +1 -0
  60. package/dist/src/lib/analyzers/kubernetes/checks/service-security.js +120 -0
  61. package/dist/src/lib/analyzers/kubernetes/checks/service-security.js.map +1 -0
  62. package/dist/src/lib/analyzers/kubernetes/parser.d.ts +74 -0
  63. package/dist/src/lib/analyzers/kubernetes/parser.d.ts.map +1 -0
  64. package/dist/src/lib/analyzers/kubernetes/parser.js +233 -0
  65. package/dist/src/lib/analyzers/kubernetes/parser.js.map +1 -0
  66. package/dist/src/lib/analyzers/kubernetes/pii-detector.d.ts +34 -0
  67. package/dist/src/lib/analyzers/kubernetes/pii-detector.d.ts.map +1 -0
  68. package/dist/src/lib/analyzers/kubernetes/pii-detector.js +182 -0
  69. package/dist/src/lib/analyzers/kubernetes/pii-detector.js.map +1 -0
  70. package/dist/src/lib/analyzers/kubernetes/types.d.ts +266 -0
  71. package/dist/src/lib/analyzers/kubernetes/types.d.ts.map +1 -0
  72. package/dist/src/lib/analyzers/kubernetes/types.js +77 -0
  73. package/dist/src/lib/analyzers/kubernetes/types.js.map +1 -0
  74. package/dist/src/lib/analyzers/kubernetes-analyzer.d.ts +93 -0
  75. package/dist/src/lib/analyzers/kubernetes-analyzer.d.ts.map +1 -0
  76. package/dist/src/lib/analyzers/kubernetes-analyzer.js +215 -0
  77. package/dist/src/lib/analyzers/kubernetes-analyzer.js.map +1 -0
  78. package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -1
  79. package/dist/src/lib/analyzers/python-analyzer.js +32 -48
  80. package/dist/src/lib/analyzers/python-analyzer.js.map +1 -1
  81. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts +1 -1
  82. package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts.map +1 -1
  83. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts +1 -1
  84. package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts.map +1 -1
  85. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts +1 -1
  86. package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts.map +1 -1
  87. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts +1 -1
  88. package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts.map +1 -1
  89. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts +1 -1
  90. package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts.map +1 -1
  91. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts +1 -1
  92. package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts.map +1 -1
  93. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts +1 -1
  94. package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts.map +1 -1
  95. package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts +1 -1
  96. package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts.map +1 -1
  97. package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts +1 -1
  98. package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts.map +1 -1
  99. package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts +1 -1
  100. package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts.map +1 -1
  101. package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts +1 -1
  102. package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts.map +1 -1
  103. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +2 -32
  104. package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -1
  105. package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -1
  106. package/dist/src/lib/analyzers/secrets/types.d.ts +40 -0
  107. package/dist/src/lib/analyzers/secrets/types.d.ts.map +1 -0
  108. package/dist/src/lib/analyzers/secrets/types.js +10 -0
  109. package/dist/src/lib/analyzers/secrets/types.js.map +1 -0
  110. package/dist/src/lib/analyzers/terraform-analyzer.d.ts +1 -0
  111. package/dist/src/lib/analyzers/terraform-analyzer.d.ts.map +1 -1
  112. package/dist/src/lib/analyzers/terraform-analyzer.js +28 -0
  113. package/dist/src/lib/analyzers/terraform-analyzer.js.map +1 -1
  114. package/dist/src/lib/analyzers/typescript-analyzer.d.ts +5 -0
  115. package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -1
  116. package/dist/src/lib/analyzers/typescript-analyzer.js +76 -0
  117. package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -1
  118. package/dist/src/lib/analyzers/utils/false-positive-filter.d.ts +27 -0
  119. package/dist/src/lib/analyzers/utils/false-positive-filter.d.ts.map +1 -0
  120. package/dist/src/lib/analyzers/utils/false-positive-filter.js +176 -0
  121. package/dist/src/lib/analyzers/utils/false-positive-filter.js.map +1 -0
  122. package/dist/src/lib/security/epss-service.d.ts.map +1 -1
  123. package/dist/src/lib/security/epss-service.js +27 -8
  124. package/dist/src/lib/security/epss-service.js.map +1 -1
  125. package/dist/src/lib/security/severity-scoring.d.ts.map +1 -1
  126. package/dist/src/lib/security/severity-scoring.js +24 -0
  127. package/dist/src/lib/security/severity-scoring.js.map +1 -1
  128. package/dist/src/lib/types/index.d.ts +3 -3
  129. package/dist/src/lib/types/index.d.ts.map +1 -1
  130. package/dist/src/lib/utils/ignore-patterns.d.ts +60 -0
  131. package/dist/src/lib/utils/ignore-patterns.d.ts.map +1 -0
  132. package/dist/src/lib/utils/ignore-patterns.js +212 -0
  133. package/dist/src/lib/utils/ignore-patterns.js.map +1 -0
  134. package/package.json +1 -1
  135. package/src/commands/scan.ts +7 -3
  136. package/src/reporters/cli-reporter.ts +174 -48
  137. package/src/scanner/local-scanner.ts +54 -10
  138. package/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,233 @@
1
+ "use strict";
2
+ /**
3
+ * Kubernetes YAML Parser
4
+ *
5
+ * WR3 Week 6: Kubernetes YAML Security Scanner
6
+ * Parses Kubernetes YAML manifests (single and multi-document)
7
+ *
8
+ * Created: February 5, 2026
9
+ */
10
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ var desc = Object.getOwnPropertyDescriptor(m, k);
13
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
14
+ desc = { enumerable: true, get: function() { return m[k]; } };
15
+ }
16
+ Object.defineProperty(o, k2, desc);
17
+ }) : (function(o, m, k, k2) {
18
+ if (k2 === undefined) k2 = k;
19
+ o[k2] = m[k];
20
+ }));
21
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
22
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
23
+ }) : function(o, v) {
24
+ o["default"] = v;
25
+ });
26
+ var __importStar = (this && this.__importStar) || (function () {
27
+ var ownKeys = function(o) {
28
+ ownKeys = Object.getOwnPropertyNames || function (o) {
29
+ var ar = [];
30
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
31
+ return ar;
32
+ };
33
+ return ownKeys(o);
34
+ };
35
+ return function (mod) {
36
+ if (mod && mod.__esModule) return mod;
37
+ var result = {};
38
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
39
+ __setModuleDefault(result, mod);
40
+ return result;
41
+ };
42
+ })();
43
+ Object.defineProperty(exports, "__esModule", { value: true });
44
+ exports.parseKubernetes = parseKubernetes;
45
+ exports.isKubernetesResource = isKubernetesResource;
46
+ exports.isKubernetesYAML = isKubernetesYAML;
47
+ exports.extractContainers = extractContainers;
48
+ exports.getPodSpec = getPodSpec;
49
+ exports.getResourceIdentifier = getResourceIdentifier;
50
+ exports.isProductionResource = isProductionResource;
51
+ exports.getContainerEnvVars = getContainerEnvVars;
52
+ const yaml = __importStar(require("js-yaml"));
53
+ /**
54
+ * Parse Kubernetes YAML content (supports multi-document YAML with ---)
55
+ *
56
+ * @param yamlContent - YAML string to parse
57
+ * @returns Array of Kubernetes resources
58
+ */
59
+ function parseKubernetes(yamlContent) {
60
+ const resources = [];
61
+ try {
62
+ // Split by document separator (---)
63
+ const documents = yamlContent.split(/^---$/m);
64
+ for (const doc of documents) {
65
+ const trimmed = doc.trim();
66
+ if (!trimmed) {
67
+ continue; // Skip empty documents
68
+ }
69
+ try {
70
+ const parsed = yaml.load(trimmed);
71
+ if (parsed && isKubernetesResource(parsed)) {
72
+ resources.push(parsed);
73
+ }
74
+ else {
75
+ // Log why resource was rejected for debugging
76
+ console.log('[K8s Parser] Resource rejected:', {
77
+ parsed: !!parsed,
78
+ hasApiVersion: parsed && 'apiVersion' in parsed,
79
+ hasKind: parsed && 'kind' in parsed,
80
+ hasMetadata: parsed && 'metadata' in parsed,
81
+ hasName: parsed && parsed.metadata && 'name' in parsed.metadata,
82
+ kind: parsed?.kind,
83
+ name: parsed?.metadata?.name
84
+ });
85
+ }
86
+ }
87
+ catch (err) {
88
+ // Skip invalid YAML documents, continue with others
89
+ console.error('[K8s Parser] Failed to parse YAML document:', err);
90
+ }
91
+ }
92
+ }
93
+ catch (error) {
94
+ throw new Error(`YAML parsing error: ${error instanceof Error ? error.message : 'Unknown error'}`);
95
+ }
96
+ return resources;
97
+ }
98
+ /**
99
+ * Check if an object is a valid Kubernetes resource
100
+ *
101
+ * @param obj - Object to check
102
+ * @returns True if object has apiVersion and kind
103
+ */
104
+ function isKubernetesResource(obj) {
105
+ return (obj &&
106
+ typeof obj === 'object' &&
107
+ 'apiVersion' in obj &&
108
+ 'kind' in obj &&
109
+ 'metadata' in obj &&
110
+ obj.metadata &&
111
+ typeof obj.metadata === 'object' &&
112
+ 'name' in obj.metadata);
113
+ }
114
+ /**
115
+ * Check if YAML content contains Kubernetes resources
116
+ *
117
+ * @param yamlContent - YAML string to check
118
+ * @returns True if content contains K8s resources
119
+ */
120
+ function isKubernetesYAML(yamlContent) {
121
+ try {
122
+ // Quick check for common K8s indicators
123
+ return (yamlContent.includes('apiVersion:') &&
124
+ yamlContent.includes('kind:') &&
125
+ yamlContent.includes('metadata:'));
126
+ }
127
+ catch {
128
+ return false;
129
+ }
130
+ }
131
+ /**
132
+ * Extract all containers from a Kubernetes resource
133
+ * Handles Pod, Deployment, StatefulSet, DaemonSet, Job, CronJob
134
+ *
135
+ * @param resource - Kubernetes resource
136
+ * @returns Array of containers (including initContainers)
137
+ */
138
+ function extractContainers(resource) {
139
+ const containers = [];
140
+ let podSpec = null;
141
+ // Extract pod spec based on resource kind
142
+ if (resource.kind === 'Pod') {
143
+ podSpec = resource.spec;
144
+ }
145
+ else if (['Deployment', 'StatefulSet', 'DaemonSet', 'ReplicaSet'].includes(resource.kind)) {
146
+ podSpec = resource.spec?.template?.spec;
147
+ }
148
+ else if (resource.kind === 'Job') {
149
+ podSpec = resource.spec?.template?.spec;
150
+ }
151
+ else if (resource.kind === 'CronJob') {
152
+ podSpec = resource.spec?.jobTemplate?.spec?.template?.spec;
153
+ }
154
+ if (!podSpec) {
155
+ return containers;
156
+ }
157
+ // Add regular containers
158
+ if (Array.isArray(podSpec.containers)) {
159
+ for (const container of podSpec.containers) {
160
+ containers.push({ container, isInitContainer: false });
161
+ }
162
+ }
163
+ // Add init containers
164
+ if (Array.isArray(podSpec.initContainers)) {
165
+ for (const container of podSpec.initContainers) {
166
+ containers.push({ container, isInitContainer: true });
167
+ }
168
+ }
169
+ return containers;
170
+ }
171
+ /**
172
+ * Get pod spec from various Kubernetes workload resources
173
+ *
174
+ * @param resource - Kubernetes resource
175
+ * @returns Pod spec or null
176
+ */
177
+ function getPodSpec(resource) {
178
+ if (resource.kind === 'Pod') {
179
+ return resource.spec;
180
+ }
181
+ if (['Deployment', 'StatefulSet', 'DaemonSet', 'ReplicaSet'].includes(resource.kind)) {
182
+ return resource.spec?.template?.spec;
183
+ }
184
+ if (resource.kind === 'Job') {
185
+ return resource.spec?.template?.spec;
186
+ }
187
+ if (resource.kind === 'CronJob') {
188
+ return resource.spec?.jobTemplate?.spec?.template?.spec;
189
+ }
190
+ return null;
191
+ }
192
+ /**
193
+ * Get resource identifier for error messages
194
+ *
195
+ * @param resource - Kubernetes resource
196
+ * @returns Formatted identifier (e.g., "Deployment/default/nginx")
197
+ */
198
+ function getResourceIdentifier(resource) {
199
+ const namespace = resource.metadata.namespace || 'default';
200
+ return `${resource.kind}/${namespace}/${resource.metadata.name}`;
201
+ }
202
+ /**
203
+ * Check if resource is in a production-like namespace
204
+ *
205
+ * @param resource - Kubernetes resource
206
+ * @returns True if in prod/production/live namespace
207
+ */
208
+ function isProductionResource(resource) {
209
+ const namespace = (resource.metadata.namespace || '').toLowerCase();
210
+ const prodIndicators = ['prod', 'production', 'live', 'prd'];
211
+ return prodIndicators.some(indicator => namespace.includes(indicator));
212
+ }
213
+ /**
214
+ * Get all environment variables from a container (including valueFrom)
215
+ *
216
+ * @param container - Container spec
217
+ * @returns Array of environment variable names and values
218
+ */
219
+ function getContainerEnvVars(container) {
220
+ const envVars = [];
221
+ // Direct env vars
222
+ if (Array.isArray(container.env)) {
223
+ for (const env of container.env) {
224
+ envVars.push({
225
+ name: env.name,
226
+ value: env.value,
227
+ source: env.valueFrom ? 'valueFrom' : 'direct',
228
+ });
229
+ }
230
+ }
231
+ return envVars;
232
+ }
233
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/kubernetes/parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * PII Detection for Kubernetes Resources
3
+ *
4
+ * Reuses the 12 PII patterns from Terraform/IaC scanning and applies them to:
5
+ * - ConfigMap data fields
6
+ * - Secret data fields (stringData and decoded data)
7
+ * - Environment variables (env and envFrom)
8
+ * - Annotations and labels
9
+ *
10
+ * Created: February 5, 2026
11
+ */
12
+ import { SecurityVulnerability } from '../types';
13
+ import type { KubernetesResource } from './types';
14
+ /**
15
+ * Check ConfigMap resources for PII in data fields
16
+ */
17
+ export declare function checkConfigMapPII(resource: KubernetesResource): SecurityVulnerability[];
18
+ /**
19
+ * Check Secret resources for PII in stringData fields
20
+ */
21
+ export declare function checkSecretPII(resource: KubernetesResource): SecurityVulnerability[];
22
+ /**
23
+ * Check pod environment variables for PII
24
+ */
25
+ export declare function checkEnvironmentVariablesPII(resource: KubernetesResource): SecurityVulnerability[];
26
+ /**
27
+ * Check annotations and labels for PII
28
+ */
29
+ export declare function checkMetadataPII(resource: KubernetesResource): SecurityVulnerability[];
30
+ /**
31
+ * Run all PII detection checks on a Kubernetes resource
32
+ */
33
+ export declare function runKubernetesPIIChecks(resource: KubernetesResource): SecurityVulnerability[];
34
+ //# sourceMappingURL=pii-detector.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii-detector.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/kubernetes/pii-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAyElD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,qBAAqB,EAAE,CAmBvF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,qBAAqB,EAAE,CAuBpF;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,kBAAkB,GAC3B,qBAAqB,EAAE,CA2BzB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,qBAAqB,EAAE,CA4BtF;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,qBAAqB,EAAE,CAoB5F"}
@@ -0,0 +1,182 @@
1
+ "use strict";
2
+ /**
3
+ * PII Detection for Kubernetes Resources
4
+ *
5
+ * Reuses the 12 PII patterns from Terraform/IaC scanning and applies them to:
6
+ * - ConfigMap data fields
7
+ * - Secret data fields (stringData and decoded data)
8
+ * - Environment variables (env and envFrom)
9
+ * - Annotations and labels
10
+ *
11
+ * Created: February 5, 2026
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.checkConfigMapPII = checkConfigMapPII;
15
+ exports.checkSecretPII = checkSecretPII;
16
+ exports.checkEnvironmentVariablesPII = checkEnvironmentVariablesPII;
17
+ exports.checkMetadataPII = checkMetadataPII;
18
+ exports.runKubernetesPIIChecks = runKubernetesPIIChecks;
19
+ const parser_1 = require("./parser");
20
+ const pii_patterns_1 = require("../iac/pii-patterns");
21
+ /**
22
+ * Scan text content for PII patterns
23
+ * Reuses the same logic as Terraform PII detection
24
+ */
25
+ function scanTextForPII(text, context) {
26
+ const vulnerabilities = [];
27
+ // Check each PII pattern
28
+ for (const [type, pattern] of Object.entries(pii_patterns_1.PII_PATTERNS)) {
29
+ const matches = text.matchAll(pattern.regex);
30
+ for (const match of matches) {
31
+ const matchedText = match[0];
32
+ // Check if match should be excluded
33
+ if ((0, pii_patterns_1.shouldExcludeMatch)(matchedText, pattern)) {
34
+ continue;
35
+ }
36
+ // Validate if pattern has custom validation function
37
+ if (pattern.validate && !pattern.validate(matchedText)) {
38
+ continue;
39
+ }
40
+ vulnerabilities.push((0, pii_patterns_1.createPIIVulnerability)(type, pattern, matchedText, context));
41
+ }
42
+ }
43
+ return vulnerabilities;
44
+ }
45
+ /**
46
+ * Scan nested objects recursively for PII
47
+ */
48
+ function scanNestedObject(obj, context) {
49
+ const vulnerabilities = [];
50
+ if (typeof obj === 'string') {
51
+ return scanTextForPII(obj, context);
52
+ }
53
+ if (typeof obj === 'object' && obj !== null) {
54
+ for (const [key, value] of Object.entries(obj)) {
55
+ const nestedContext = {
56
+ ...context,
57
+ attributePath: `${context.attributePath}.${key}`,
58
+ };
59
+ if (typeof value === 'string') {
60
+ vulnerabilities.push(...scanTextForPII(value, nestedContext));
61
+ }
62
+ else if (typeof value === 'object') {
63
+ vulnerabilities.push(...scanNestedObject(value, nestedContext));
64
+ }
65
+ }
66
+ }
67
+ return vulnerabilities;
68
+ }
69
+ /**
70
+ * Check ConfigMap resources for PII in data fields
71
+ */
72
+ function checkConfigMapPII(resource) {
73
+ if (resource.kind !== 'ConfigMap') {
74
+ return [];
75
+ }
76
+ const vulnerabilities = [];
77
+ const data = resource.data || {};
78
+ for (const [key, value] of Object.entries(data)) {
79
+ const context = {
80
+ resourceName: (0, parser_1.getResourceIdentifier)(resource),
81
+ attributePath: `data.${key}`,
82
+ line: resource.line,
83
+ };
84
+ vulnerabilities.push(...scanTextForPII(value, context));
85
+ }
86
+ return vulnerabilities;
87
+ }
88
+ /**
89
+ * Check Secret resources for PII in stringData fields
90
+ */
91
+ function checkSecretPII(resource) {
92
+ if (resource.kind !== 'Secret') {
93
+ return [];
94
+ }
95
+ const vulnerabilities = [];
96
+ // Check stringData (plain text secrets)
97
+ const stringData = resource.stringData || {};
98
+ for (const [key, value] of Object.entries(stringData)) {
99
+ const context = {
100
+ resourceName: (0, parser_1.getResourceIdentifier)(resource),
101
+ attributePath: `stringData.${key}`,
102
+ line: resource.line,
103
+ };
104
+ vulnerabilities.push(...scanTextForPII(value, context));
105
+ }
106
+ // Note: We don't scan base64-encoded 'data' fields to avoid false positives
107
+ // The secrets-management checks already flag hardcoded secrets
108
+ return vulnerabilities;
109
+ }
110
+ /**
111
+ * Check pod environment variables for PII
112
+ */
113
+ function checkEnvironmentVariablesPII(resource) {
114
+ const podSpec = (0, parser_1.getPodSpec)(resource);
115
+ if (!podSpec) {
116
+ return [];
117
+ }
118
+ const vulnerabilities = [];
119
+ const containers = [...(podSpec.containers || []), ...(podSpec.initContainers || [])];
120
+ for (const container of containers) {
121
+ const env = container.env || [];
122
+ for (const envVar of env) {
123
+ // Only check direct values (not secretKeyRef, configMapKeyRef, etc.)
124
+ if (envVar.value) {
125
+ const context = {
126
+ resourceName: (0, parser_1.getResourceIdentifier)(resource),
127
+ attributePath: `env.${envVar.name}`,
128
+ line: resource.line,
129
+ };
130
+ vulnerabilities.push(...scanTextForPII(envVar.value, context));
131
+ }
132
+ }
133
+ }
134
+ return vulnerabilities;
135
+ }
136
+ /**
137
+ * Check annotations and labels for PII
138
+ */
139
+ function checkMetadataPII(resource) {
140
+ const vulnerabilities = [];
141
+ // Check annotations
142
+ const annotations = resource.metadata.annotations || {};
143
+ for (const [key, value] of Object.entries(annotations)) {
144
+ const context = {
145
+ resourceName: (0, parser_1.getResourceIdentifier)(resource),
146
+ attributePath: `annotations.${key}`,
147
+ line: resource.line,
148
+ };
149
+ vulnerabilities.push(...scanTextForPII(value, context));
150
+ }
151
+ // Check labels
152
+ const labels = resource.metadata.labels || {};
153
+ for (const [key, value] of Object.entries(labels)) {
154
+ const context = {
155
+ resourceName: (0, parser_1.getResourceIdentifier)(resource),
156
+ attributePath: `labels.${key}`,
157
+ line: resource.line,
158
+ };
159
+ vulnerabilities.push(...scanTextForPII(value, context));
160
+ }
161
+ return vulnerabilities;
162
+ }
163
+ /**
164
+ * Run all PII detection checks on a Kubernetes resource
165
+ */
166
+ function runKubernetesPIIChecks(resource) {
167
+ const vulnerabilities = [];
168
+ // Check all resource types for metadata PII
169
+ vulnerabilities.push(...checkMetadataPII(resource));
170
+ // Check ConfigMaps
171
+ if (resource.kind === 'ConfigMap') {
172
+ vulnerabilities.push(...checkConfigMapPII(resource));
173
+ }
174
+ // Check Secrets
175
+ if (resource.kind === 'Secret') {
176
+ vulnerabilities.push(...checkSecretPII(resource));
177
+ }
178
+ // Check pod environment variables (all pod-based resources)
179
+ vulnerabilities.push(...checkEnvironmentVariablesPII(resource));
180
+ return vulnerabilities;
181
+ }
182
+ //# sourceMappingURL=pii-detector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pii-detector.js","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/kubernetes/pii-detector.ts"],"names":[],"mappings":"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"}