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,266 @@
1
+ /**
2
+ * Kubernetes Resource Type Definitions
3
+ *
4
+ * WR3 Week 6: Kubernetes YAML Security Scanner
5
+ * Type definitions for K8s resources, pod specs, RBAC, and security contexts
6
+ *
7
+ * Created: February 5, 2026
8
+ */
9
+ export type KubernetesKind = 'Pod' | 'Deployment' | 'StatefulSet' | 'DaemonSet' | 'ReplicaSet' | 'Job' | 'CronJob' | 'Service' | 'ConfigMap' | 'Secret' | 'Role' | 'ClusterRole' | 'RoleBinding' | 'ClusterRoleBinding' | 'ServiceAccount' | 'NetworkPolicy' | 'Ingress' | 'PersistentVolume' | 'PersistentVolumeClaim';
10
+ export interface KubernetesResource {
11
+ apiVersion: string;
12
+ kind: KubernetesKind | string;
13
+ metadata: Metadata;
14
+ spec?: any;
15
+ data?: Record<string, string>;
16
+ stringData?: Record<string, string>;
17
+ rules?: RBACRule[];
18
+ roleRef?: RoleRef;
19
+ subjects?: Subject[];
20
+ line?: number;
21
+ }
22
+ export interface Metadata {
23
+ name: string;
24
+ namespace?: string;
25
+ labels?: Record<string, string>;
26
+ annotations?: Record<string, string>;
27
+ uid?: string;
28
+ }
29
+ export interface PodSpec {
30
+ containers: Container[];
31
+ initContainers?: Container[];
32
+ volumes?: Volume[];
33
+ hostNetwork?: boolean;
34
+ hostPID?: boolean;
35
+ hostIPC?: boolean;
36
+ serviceAccountName?: string;
37
+ automountServiceAccountToken?: boolean;
38
+ securityContext?: PodSecurityContext;
39
+ nodeSelector?: Record<string, string>;
40
+ affinity?: any;
41
+ tolerations?: any[];
42
+ }
43
+ export interface Container {
44
+ name: string;
45
+ image: string;
46
+ command?: string[];
47
+ args?: string[];
48
+ securityContext?: SecurityContext;
49
+ resources?: Resources;
50
+ env?: EnvVar[];
51
+ envFrom?: EnvFromSource[];
52
+ volumeMounts?: VolumeMount[];
53
+ ports?: ContainerPort[];
54
+ livenessProbe?: Probe;
55
+ readinessProbe?: Probe;
56
+ startupProbe?: Probe;
57
+ }
58
+ export interface SecurityContext {
59
+ privileged?: boolean;
60
+ runAsNonRoot?: boolean;
61
+ runAsUser?: number;
62
+ runAsGroup?: number;
63
+ readOnlyRootFilesystem?: boolean;
64
+ allowPrivilegeEscalation?: boolean;
65
+ capabilities?: {
66
+ add?: string[];
67
+ drop?: string[];
68
+ };
69
+ seccompProfile?: {
70
+ type: string;
71
+ localhostProfile?: string;
72
+ };
73
+ seLinuxOptions?: any;
74
+ }
75
+ export interface PodSecurityContext {
76
+ runAsNonRoot?: boolean;
77
+ runAsUser?: number;
78
+ runAsGroup?: number;
79
+ fsGroup?: number;
80
+ supplementalGroups?: number[];
81
+ seccompProfile?: {
82
+ type: string;
83
+ localhostProfile?: string;
84
+ };
85
+ seLinuxOptions?: any;
86
+ }
87
+ export interface Resources {
88
+ limits?: {
89
+ cpu?: string;
90
+ memory?: string;
91
+ [key: string]: string | undefined;
92
+ };
93
+ requests?: {
94
+ cpu?: string;
95
+ memory?: string;
96
+ [key: string]: string | undefined;
97
+ };
98
+ }
99
+ export interface EnvVar {
100
+ name: string;
101
+ value?: string;
102
+ valueFrom?: {
103
+ secretKeyRef?: {
104
+ name: string;
105
+ key: string;
106
+ };
107
+ configMapKeyRef?: {
108
+ name: string;
109
+ key: string;
110
+ };
111
+ fieldRef?: {
112
+ fieldPath: string;
113
+ };
114
+ resourceFieldRef?: {
115
+ resource: string;
116
+ };
117
+ };
118
+ }
119
+ export interface EnvFromSource {
120
+ configMapRef?: {
121
+ name: string;
122
+ optional?: boolean;
123
+ };
124
+ secretRef?: {
125
+ name: string;
126
+ optional?: boolean;
127
+ };
128
+ }
129
+ export interface VolumeMount {
130
+ name: string;
131
+ mountPath: string;
132
+ readOnly?: boolean;
133
+ subPath?: string;
134
+ }
135
+ export interface Volume {
136
+ name: string;
137
+ hostPath?: {
138
+ path: string;
139
+ type?: string;
140
+ };
141
+ emptyDir?: {
142
+ medium?: string;
143
+ sizeLimit?: string;
144
+ };
145
+ configMap?: {
146
+ name: string;
147
+ items?: Array<{
148
+ key: string;
149
+ path: string;
150
+ }>;
151
+ };
152
+ secret?: {
153
+ secretName: string;
154
+ items?: Array<{
155
+ key: string;
156
+ path: string;
157
+ }>;
158
+ };
159
+ persistentVolumeClaim?: {
160
+ claimName: string;
161
+ };
162
+ nfs?: {
163
+ server: string;
164
+ path: string;
165
+ };
166
+ }
167
+ export interface ContainerPort {
168
+ containerPort: number;
169
+ protocol?: string;
170
+ name?: string;
171
+ hostPort?: number;
172
+ }
173
+ export interface Probe {
174
+ httpGet?: {
175
+ path: string;
176
+ port: number | string;
177
+ scheme?: string;
178
+ };
179
+ tcpSocket?: {
180
+ port: number | string;
181
+ };
182
+ exec?: {
183
+ command: string[];
184
+ };
185
+ initialDelaySeconds?: number;
186
+ timeoutSeconds?: number;
187
+ periodSeconds?: number;
188
+ successThreshold?: number;
189
+ failureThreshold?: number;
190
+ }
191
+ export interface RBACRule {
192
+ apiGroups?: string[];
193
+ resources?: string[];
194
+ verbs: string[];
195
+ resourceNames?: string[];
196
+ }
197
+ export interface RoleRef {
198
+ apiGroup: string;
199
+ kind: string;
200
+ name: string;
201
+ }
202
+ export interface Subject {
203
+ kind: string;
204
+ name: string;
205
+ namespace?: string;
206
+ apiGroup?: string;
207
+ }
208
+ export interface ServiceSpec {
209
+ type?: 'ClusterIP' | 'NodePort' | 'LoadBalancer' | 'ExternalName';
210
+ ports?: ServicePort[];
211
+ selector?: Record<string, string>;
212
+ clusterIP?: string;
213
+ externalIPs?: string[];
214
+ loadBalancerIP?: string;
215
+ loadBalancerSourceRanges?: string[];
216
+ }
217
+ export interface ServicePort {
218
+ name?: string;
219
+ protocol?: string;
220
+ port: number;
221
+ targetPort?: number | string;
222
+ nodePort?: number;
223
+ }
224
+ export interface NetworkPolicySpec {
225
+ podSelector: {
226
+ matchLabels?: Record<string, string>;
227
+ matchExpressions?: any[];
228
+ };
229
+ policyTypes?: string[];
230
+ ingress?: NetworkPolicyIngressRule[];
231
+ egress?: NetworkPolicyEgressRule[];
232
+ }
233
+ export interface NetworkPolicyIngressRule {
234
+ from?: NetworkPolicyPeer[];
235
+ ports?: NetworkPolicyPort[];
236
+ }
237
+ export interface NetworkPolicyEgressRule {
238
+ to?: NetworkPolicyPeer[];
239
+ ports?: NetworkPolicyPort[];
240
+ }
241
+ export interface NetworkPolicyPeer {
242
+ podSelector?: {
243
+ matchLabels?: Record<string, string>;
244
+ };
245
+ namespaceSelector?: {
246
+ matchLabels?: Record<string, string>;
247
+ };
248
+ ipBlock?: {
249
+ cidr: string;
250
+ except?: string[];
251
+ };
252
+ }
253
+ export interface NetworkPolicyPort {
254
+ protocol?: string;
255
+ port?: number | string;
256
+ endPort?: number;
257
+ }
258
+ export declare function isPodResource(resource: KubernetesResource): boolean;
259
+ export declare function isRBACResource(resource: KubernetesResource): boolean;
260
+ export declare function isSecretResource(resource: KubernetesResource): boolean;
261
+ export declare function extractPodSpec(resource: KubernetesResource): PodSpec | null;
262
+ export declare function getResourceIdentifier(resource: KubernetesResource): string;
263
+ export declare const DANGEROUS_CAPABILITIES: string[];
264
+ export declare const SENSITIVE_RESOURCES: string[];
265
+ export declare const DANGEROUS_VERBS: string[];
266
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/kubernetes/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,cAAc,GACtB,KAAK,GACL,YAAY,GACZ,aAAa,GACb,WAAW,GACX,YAAY,GACZ,KAAK,GACL,SAAS,GACT,SAAS,GACT,WAAW,GACX,QAAQ,GACR,MAAM,GACN,aAAa,GACb,aAAa,GACb,oBAAoB,GACpB,gBAAgB,GAChB,eAAe,GACf,SAAS,GACT,kBAAkB,GAClB,uBAAuB,CAAC;AAE5B,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC;IAC9B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,CAAC,EAAE,GAAG,CAAC;IACX,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,KAAK,CAAC,EAAE,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,cAAc,CAAC,EAAE,SAAS,EAAE,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,eAAe,CAAC,EAAE,kBAAkB,CAAC;IACrC,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,EAAE,GAAG,CAAC;IACf,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,aAAa,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,WAAW,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,aAAa,EAAE,CAAC;IACxB,aAAa,CAAC,EAAE,KAAK,CAAC;IACtB,cAAc,CAAC,EAAE,KAAK,CAAC;IACvB,YAAY,CAAC,EAAE,KAAK,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,YAAY,CAAC,EAAE;QACb,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IACF,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,cAAc,CAAC,EAAE,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kBAAkB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,cAAc,CAAC,EAAE,GAAG,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,CAAC,EAAE;QACP,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;CACH;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE;QACV,YAAY,CAAC,EAAE;YACb,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;QACF,eAAe,CAAC,EAAE;YAChB,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;QACF,QAAQ,CAAC,EAAE;YACT,SAAS,EAAE,MAAM,CAAC;SACnB,CAAC;QACF,gBAAgB,CAAC,EAAE;YACjB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,OAAO,CAAC;KACpB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,QAAQ,CAAC,EAAE;QACT,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,KAAK,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;SACd,CAAC,CAAC;KACJ,CAAC;IACF,MAAM,CAAC,EAAE;QACP,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,CAAC,EAAE,KAAK,CAAC;YACZ,GAAG,EAAE,MAAM,CAAC;YACZ,IAAI,EAAE,MAAM,CAAC;SACd,CAAC,CAAC;KACJ,CAAC;IACF,qBAAqB,CAAC,EAAE;QACtB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,GAAG,CAAC,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;IACF,SAAS,CAAC,EAAE;QACV,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;KACvB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,OAAO,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAID,MAAM,WAAW,QAAQ;IACvB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,WAAW,GAAG,UAAU,GAAG,cAAc,GAAG,cAAc,CAAC;IAClE,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;CACrC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAID,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE;QACX,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACrC,gBAAgB,CAAC,EAAE,GAAG,EAAE,CAAC;KAC1B,CAAC;IACF,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,CAAC,EAAE,wBAAwB,EAAE,CAAC;IACrC,MAAM,CAAC,EAAE,uBAAuB,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,iBAAiB,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,CAAC,EAAE,iBAAiB,EAAE,CAAC;IACzB,KAAK,CAAC,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE;QACZ,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC,CAAC;IACF,iBAAiB,CAAC,EAAE;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACtC,CAAC;IACF,OAAO,CAAC,EAAE;QACR,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,aAAa,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAInE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAEpE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,CAEtE;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,kBAAkB,GAAG,OAAO,GAAG,IAAI,CAoB3E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,CAG1E;AAGD,eAAO,MAAM,sBAAsB,UAalC,CAAC;AAGF,eAAO,MAAM,mBAAmB,UAU/B,CAAC;AAGF,eAAO,MAAM,eAAe,UAAmE,CAAC"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ /**
3
+ * Kubernetes Resource Type Definitions
4
+ *
5
+ * WR3 Week 6: Kubernetes YAML Security Scanner
6
+ * Type definitions for K8s resources, pod specs, RBAC, and security contexts
7
+ *
8
+ * Created: February 5, 2026
9
+ */
10
+ Object.defineProperty(exports, "__esModule", { value: true });
11
+ exports.DANGEROUS_VERBS = exports.SENSITIVE_RESOURCES = exports.DANGEROUS_CAPABILITIES = void 0;
12
+ exports.isPodResource = isPodResource;
13
+ exports.isRBACResource = isRBACResource;
14
+ exports.isSecretResource = isSecretResource;
15
+ exports.extractPodSpec = extractPodSpec;
16
+ exports.getResourceIdentifier = getResourceIdentifier;
17
+ // Helper type guards
18
+ function isPodResource(resource) {
19
+ return ['Pod', 'Deployment', 'StatefulSet', 'DaemonSet', 'ReplicaSet', 'Job', 'CronJob'].includes(resource.kind);
20
+ }
21
+ function isRBACResource(resource) {
22
+ return ['Role', 'ClusterRole', 'RoleBinding', 'ClusterRoleBinding'].includes(resource.kind);
23
+ }
24
+ function isSecretResource(resource) {
25
+ return ['Secret', 'ConfigMap'].includes(resource.kind);
26
+ }
27
+ function extractPodSpec(resource) {
28
+ if (resource.kind === 'Pod') {
29
+ return resource.spec;
30
+ }
31
+ // Extract from workload resources
32
+ if (['Deployment', 'StatefulSet', 'DaemonSet', 'ReplicaSet'].includes(resource.kind)) {
33
+ return resource.spec?.template?.spec;
34
+ }
35
+ // Extract from Job/CronJob
36
+ if (resource.kind === 'Job') {
37
+ return resource.spec?.template?.spec;
38
+ }
39
+ if (resource.kind === 'CronJob') {
40
+ return resource.spec?.jobTemplate?.spec?.template?.spec;
41
+ }
42
+ return null;
43
+ }
44
+ function getResourceIdentifier(resource) {
45
+ const namespace = resource.metadata.namespace ? `${resource.metadata.namespace}/` : '';
46
+ return `${resource.kind}/${namespace}${resource.metadata.name}`;
47
+ }
48
+ // Dangerous capabilities that should trigger alerts
49
+ exports.DANGEROUS_CAPABILITIES = [
50
+ 'SYS_ADMIN',
51
+ 'NET_ADMIN',
52
+ 'SYS_MODULE',
53
+ 'SYS_RAWIO',
54
+ 'SYS_PTRACE',
55
+ 'SYS_BOOT',
56
+ 'MAC_ADMIN',
57
+ 'MAC_OVERRIDE',
58
+ 'PERFMON',
59
+ 'BPF',
60
+ 'DAC_READ_SEARCH',
61
+ 'DAC_OVERRIDE',
62
+ ];
63
+ // Sensitive RBAC resources that should be protected
64
+ exports.SENSITIVE_RESOURCES = [
65
+ 'secrets',
66
+ 'configmaps',
67
+ 'pods',
68
+ 'pods/exec',
69
+ 'pods/log',
70
+ 'nodes',
71
+ 'persistentvolumes',
72
+ 'clusterroles',
73
+ 'clusterrolebindings',
74
+ ];
75
+ // Dangerous RBAC verbs
76
+ exports.DANGEROUS_VERBS = ['*', 'create', 'delete', 'deletecollection', 'patch', 'update'];
77
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../../src/lib/analyzers/kubernetes/types.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AA8SH,sCAIC;AAED,wCAEC;AAED,4CAEC;AAED,wCAoBC;AAED,sDAGC;AAzCD,qBAAqB;AAErB,SAAgB,aAAa,CAAC,QAA4B;IACxD,OAAO,CAAC,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,QAAQ,CAC/F,QAAQ,CAAC,IAAI,CACd,CAAC;AACJ,CAAC;AAED,SAAgB,cAAc,CAAC,QAA4B;IACzD,OAAO,CAAC,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,oBAAoB,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC9F,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAA4B;IAC3D,OAAO,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,SAAgB,cAAc,CAAC,QAA4B;IACzD,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,IAAe,CAAC;IAClC,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACrF,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAe,CAAC;IAClD,CAAC;IAED,2BAA2B;IAC3B,IAAI,QAAQ,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;QAC5B,OAAO,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAe,CAAC;IAClD,CAAC;IAED,IAAI,QAAQ,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAe,CAAC;IACrE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAgB,qBAAqB,CAAC,QAA4B;IAChE,MAAM,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACvF,OAAO,GAAG,QAAQ,CAAC,IAAI,IAAI,SAAS,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAClE,CAAC;AAED,oDAAoD;AACvC,QAAA,sBAAsB,GAAG;IACpC,WAAW;IACX,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,UAAU;IACV,WAAW;IACX,cAAc;IACd,SAAS;IACT,KAAK;IACL,iBAAiB;IACjB,cAAc;CACf,CAAC;AAEF,oDAAoD;AACvC,QAAA,mBAAmB,GAAG;IACjC,SAAS;IACT,YAAY;IACZ,MAAM;IACN,WAAW;IACX,UAAU;IACV,OAAO;IACP,mBAAmB;IACnB,cAAc;IACd,qBAAqB;CACtB,CAAC;AAEF,uBAAuB;AACV,QAAA,eAAe,GAAG,CAAC,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,93 @@
1
+ /**
2
+ * ⚠️ SHARED MODULE: Kubernetes Security Analyzer
3
+ *
4
+ * CRITICAL: This module is used by WebTool, GitHub App, and CLI
5
+ *
6
+ * WebTool uses this for:
7
+ * - /api/analyze endpoint - Interactive single-file K8s analysis (<5s target)
8
+ * - Real-time misconfiguration detection for individual developers
9
+ *
10
+ * GitHub App uses this for:
11
+ * - /api/github/webhook - Batch PR analysis of K8s YAML files (10-30s OK)
12
+ * - Automated K8s security checks for professional teams
13
+ *
14
+ * CLI uses this for:
15
+ * - Pre-commit hooks - K8s manifest validation (<5s target)
16
+ * - CI/CD pipeline integration
17
+ *
18
+ * WR3 Week 6: Kubernetes YAML Security Scanner
19
+ * 25 security checks + 12 PII patterns = 37 total checks
20
+ *
21
+ * ⚠️ BEFORE MODIFYING THIS FILE:
22
+ * 1. Run all analyzer tests: npm test kubernetes-analyzer
23
+ * 2. Test WebTool: Paste K8s YAML at /analyze → Verify results
24
+ * 3. Test GitHub: Open PR with .yaml file → Verify webhook comment
25
+ * 4. Test CLI: Scan K8s manifest → Verify exit codes
26
+ * 5. Verify performance: Analysis must complete in <5s per file
27
+ * 6. Check detection rate: All 25 K8s checks + 12 PII must still detect
28
+ *
29
+ * CRITICAL OUTPUT FORMAT (DO NOT CHANGE):
30
+ * - result.security.vulnerabilities - Used by all 3 systems
31
+ * - Each vulnerability has: line, message, severity, cvssScore, owasp, cwe
32
+ * - Changing this structure breaks ALL product UIs
33
+ *
34
+ * Created: February 5, 2026
35
+ * Last verified (all systems): TBD (after first commit)
36
+ */
37
+ import { ICodeAnalyzer, AnalyzerInput, AnalyzerResult } from './types';
38
+ import { SupportedLanguage } from '../types';
39
+ export declare class KubernetesAnalyzer implements ICodeAnalyzer {
40
+ readonly language: SupportedLanguage;
41
+ analyze(input: AnalyzerInput): Promise<AnalyzerResult>;
42
+ /**
43
+ * Route resource to appropriate security checks based on kind
44
+ */
45
+ private analyzeResource;
46
+ /**
47
+ * Pod Security checks (8 checks)
48
+ * - Privileged containers, host namespaces, root users, capabilities, etc.
49
+ */
50
+ private analyzePodSecurity;
51
+ /**
52
+ * RBAC Security checks (5 checks)
53
+ * - Cluster-admin bindings, wildcard rules, overly permissive roles
54
+ */
55
+ private analyzeRBACSecurity;
56
+ /**
57
+ * Secrets Management checks (4 checks)
58
+ * - Hardcoded secrets in ConfigMaps, secrets in env vars
59
+ */
60
+ private analyzeSecretsManagement;
61
+ /**
62
+ * Network Security checks (3 checks)
63
+ * - Missing network policies, unrestricted ingress, public services
64
+ */
65
+ private analyzeNetworkSecurity;
66
+ /**
67
+ * Resource Management checks (3 checks)
68
+ * - Missing resource limits/requests, latest image tags
69
+ */
70
+ private analyzeResourceManagement;
71
+ /**
72
+ * Service Security checks (2 checks)
73
+ * - Missing liveness/readiness probes
74
+ */
75
+ private analyzeServiceSecurity;
76
+ /**
77
+ * PII Detection (12 patterns)
78
+ * Reuse existing PII patterns from Terraform/IaC
79
+ * Scan ConfigMaps, Secrets, environment variables
80
+ */
81
+ private analyzePII;
82
+ /**
83
+ * Calculate metrics for Kubernetes manifests
84
+ */
85
+ private calculateMetrics;
86
+ validateSyntax(code: string): Promise<boolean>;
87
+ getLanguageInfo(): {
88
+ name: string;
89
+ extensions: string[];
90
+ description: string;
91
+ };
92
+ }
93
+ //# sourceMappingURL=kubernetes-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kubernetes-analyzer.d.ts","sourceRoot":"","sources":["../../../../../../src/lib/analyzers/kubernetes-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AAEH,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,cAAc,EAAyB,MAAM,SAAS,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAa7C,qBAAa,kBAAmB,YAAW,aAAa;IACtD,SAAgB,QAAQ,EAAE,iBAAiB,CAAgB;IAErD,OAAO,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAmD5D;;OAEG;IACH,OAAO,CAAC,eAAe;IA8BvB;;;OAGG;IACH,OAAO,CAAC,kBAAkB;IAK1B;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IAK3B;;;OAGG;IACH,OAAO,CAAC,wBAAwB;IAKhC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;;OAGG;IACH,OAAO,CAAC,yBAAyB;IAKjC;;;OAGG;IACH,OAAO,CAAC,sBAAsB;IAK9B;;;;OAIG;IACH,OAAO,CAAC,UAAU;IAOlB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAgBlB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAYpD,eAAe,IAAI;QACjB,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,EAAE,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;KACrB;CAOF"}
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ /**
3
+ * ⚠️ SHARED MODULE: Kubernetes Security Analyzer
4
+ *
5
+ * CRITICAL: This module is used by WebTool, GitHub App, and CLI
6
+ *
7
+ * WebTool uses this for:
8
+ * - /api/analyze endpoint - Interactive single-file K8s analysis (<5s target)
9
+ * - Real-time misconfiguration detection for individual developers
10
+ *
11
+ * GitHub App uses this for:
12
+ * - /api/github/webhook - Batch PR analysis of K8s YAML files (10-30s OK)
13
+ * - Automated K8s security checks for professional teams
14
+ *
15
+ * CLI uses this for:
16
+ * - Pre-commit hooks - K8s manifest validation (<5s target)
17
+ * - CI/CD pipeline integration
18
+ *
19
+ * WR3 Week 6: Kubernetes YAML Security Scanner
20
+ * 25 security checks + 12 PII patterns = 37 total checks
21
+ *
22
+ * ⚠️ BEFORE MODIFYING THIS FILE:
23
+ * 1. Run all analyzer tests: npm test kubernetes-analyzer
24
+ * 2. Test WebTool: Paste K8s YAML at /analyze → Verify results
25
+ * 3. Test GitHub: Open PR with .yaml file → Verify webhook comment
26
+ * 4. Test CLI: Scan K8s manifest → Verify exit codes
27
+ * 5. Verify performance: Analysis must complete in <5s per file
28
+ * 6. Check detection rate: All 25 K8s checks + 12 PII must still detect
29
+ *
30
+ * CRITICAL OUTPUT FORMAT (DO NOT CHANGE):
31
+ * - result.security.vulnerabilities - Used by all 3 systems
32
+ * - Each vulnerability has: line, message, severity, cvssScore, owasp, cwe
33
+ * - Changing this structure breaks ALL product UIs
34
+ *
35
+ * Created: February 5, 2026
36
+ * Last verified (all systems): TBD (after first commit)
37
+ */
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.KubernetesAnalyzer = void 0;
40
+ const parser_1 = require("./kubernetes/parser");
41
+ const types_1 = require("./kubernetes/types");
42
+ const pod_security_1 = require("./kubernetes/checks/pod-security");
43
+ const rbac_security_1 = require("./kubernetes/checks/rbac-security");
44
+ const secrets_management_1 = require("./kubernetes/checks/secrets-management");
45
+ const network_security_1 = require("./kubernetes/checks/network-security");
46
+ const resource_management_1 = require("./kubernetes/checks/resource-management");
47
+ const service_security_1 = require("./kubernetes/checks/service-security");
48
+ const pii_detector_1 = require("./kubernetes/pii-detector");
49
+ const ignore_patterns_1 = require("../utils/ignore-patterns");
50
+ class KubernetesAnalyzer {
51
+ constructor() {
52
+ this.language = 'kubernetes';
53
+ }
54
+ async analyze(input) {
55
+ const result = {
56
+ syntax: { valid: true, errors: [], lineErrors: [] },
57
+ quality: { score: 100, issues: [] },
58
+ performance: { score: 100, suggestions: [] },
59
+ security: { vulnerabilities: [] },
60
+ metrics: { complexity: 1, maintainability: 100, lines: 0, functions: 0 },
61
+ };
62
+ try {
63
+ // Quick validation: Is this Kubernetes YAML?
64
+ if (!(0, parser_1.isKubernetesYAML)(input.code)) {
65
+ result.syntax.valid = false;
66
+ result.syntax.errors.push('Not a valid Kubernetes YAML manifest');
67
+ return result;
68
+ }
69
+ // Parse Kubernetes YAML (supports multi-document with ---)
70
+ const resources = (0, parser_1.parseKubernetes)(input.code);
71
+ if (resources.length === 0) {
72
+ result.syntax.valid = false;
73
+ result.syntax.errors.push('No valid Kubernetes resources found');
74
+ return result;
75
+ }
76
+ // Analyze each resource
77
+ for (const resource of resources) {
78
+ this.analyzeResource(resource, result);
79
+ }
80
+ // Apply PII detection across all resources
81
+ this.analyzePII(resources, result);
82
+ // Calculate basic metrics
83
+ this.calculateMetrics(input.code, resources, result);
84
+ // Filter suppressed vulnerabilities (inline comments: # codeslick-ignore-next-line)
85
+ result.security.vulnerabilities = (0, ignore_patterns_1.filterSuppressedVulnerabilities)(input.code, result.security.vulnerabilities);
86
+ }
87
+ catch (error) {
88
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
89
+ result.syntax.valid = false;
90
+ result.syntax.errors.push(`Kubernetes analysis error: ${errorMessage}`);
91
+ }
92
+ return result;
93
+ }
94
+ /**
95
+ * Route resource to appropriate security checks based on kind
96
+ */
97
+ analyzeResource(resource, result) {
98
+ // Pod security checks (Pod, Deployment, StatefulSet, DaemonSet, Job, CronJob)
99
+ if ((0, types_1.isPodResource)(resource)) {
100
+ this.analyzePodSecurity(resource, result);
101
+ this.analyzeResourceManagement(resource, result);
102
+ this.analyzeServiceSecurity(resource, result);
103
+ // RBAC checks that apply to pods (ServiceAccount-related)
104
+ const rbacVulns = (0, rbac_security_1.runRBACSecurityChecks)(resource);
105
+ result.security.vulnerabilities.push(...rbacVulns);
106
+ // Secrets management checks that apply to pods (env vars, secret volumes)
107
+ const secretsVulns = (0, secrets_management_1.runSecretsManagementChecks)(resource);
108
+ result.security.vulnerabilities.push(...secretsVulns);
109
+ }
110
+ // RBAC checks (Role, ClusterRole, RoleBinding, ClusterRoleBinding)
111
+ if ((0, types_1.isRBACResource)(resource)) {
112
+ this.analyzeRBACSecurity(resource, result);
113
+ }
114
+ // Secrets management checks (ConfigMap, Secret)
115
+ if ((0, types_1.isSecretResource)(resource)) {
116
+ this.analyzeSecretsManagement(resource, result);
117
+ }
118
+ // Network security checks (NetworkPolicy, Service, Ingress)
119
+ if (['NetworkPolicy', 'Service', 'Ingress'].includes(resource.kind)) {
120
+ this.analyzeNetworkSecurity(resource, result);
121
+ }
122
+ }
123
+ /**
124
+ * Pod Security checks (8 checks)
125
+ * - Privileged containers, host namespaces, root users, capabilities, etc.
126
+ */
127
+ analyzePodSecurity(resource, result) {
128
+ const vulnerabilities = (0, pod_security_1.runPodSecurityChecks)(resource);
129
+ result.security.vulnerabilities.push(...vulnerabilities);
130
+ }
131
+ /**
132
+ * RBAC Security checks (5 checks)
133
+ * - Cluster-admin bindings, wildcard rules, overly permissive roles
134
+ */
135
+ analyzeRBACSecurity(resource, result) {
136
+ const vulnerabilities = (0, rbac_security_1.runRBACSecurityChecks)(resource);
137
+ result.security.vulnerabilities.push(...vulnerabilities);
138
+ }
139
+ /**
140
+ * Secrets Management checks (4 checks)
141
+ * - Hardcoded secrets in ConfigMaps, secrets in env vars
142
+ */
143
+ analyzeSecretsManagement(resource, result) {
144
+ const vulnerabilities = (0, secrets_management_1.runSecretsManagementChecks)(resource);
145
+ result.security.vulnerabilities.push(...vulnerabilities);
146
+ }
147
+ /**
148
+ * Network Security checks (3 checks)
149
+ * - Missing network policies, unrestricted ingress, public services
150
+ */
151
+ analyzeNetworkSecurity(resource, result) {
152
+ const vulnerabilities = (0, network_security_1.runNetworkSecurityChecks)(resource);
153
+ result.security.vulnerabilities.push(...vulnerabilities);
154
+ }
155
+ /**
156
+ * Resource Management checks (3 checks)
157
+ * - Missing resource limits/requests, latest image tags
158
+ */
159
+ analyzeResourceManagement(resource, result) {
160
+ const vulnerabilities = (0, resource_management_1.runResourceManagementChecks)(resource);
161
+ result.security.vulnerabilities.push(...vulnerabilities);
162
+ }
163
+ /**
164
+ * Service Security checks (2 checks)
165
+ * - Missing liveness/readiness probes
166
+ */
167
+ analyzeServiceSecurity(resource, result) {
168
+ const vulnerabilities = (0, service_security_1.runServiceSecurityChecks)(resource);
169
+ result.security.vulnerabilities.push(...vulnerabilities);
170
+ }
171
+ /**
172
+ * PII Detection (12 patterns)
173
+ * Reuse existing PII patterns from Terraform/IaC
174
+ * Scan ConfigMaps, Secrets, environment variables
175
+ */
176
+ analyzePII(resources, result) {
177
+ for (const resource of resources) {
178
+ const piiVulnerabilities = (0, pii_detector_1.runKubernetesPIIChecks)(resource);
179
+ result.security.vulnerabilities.push(...piiVulnerabilities);
180
+ }
181
+ }
182
+ /**
183
+ * Calculate metrics for Kubernetes manifests
184
+ */
185
+ calculateMetrics(code, resources, result) {
186
+ const lines = code.split('\n');
187
+ result.metrics.lines = lines.length;
188
+ // Count resources as "functions" for metrics
189
+ result.metrics.functions = resources.length;
190
+ // Basic complexity based on number of resources
191
+ result.metrics.complexity = Math.max(1, resources.length);
192
+ result.metrics.maintainability = Math.max(50, 100 - resources.length * 2);
193
+ }
194
+ async validateSyntax(code) {
195
+ try {
196
+ if (!(0, parser_1.isKubernetesYAML)(code)) {
197
+ return false;
198
+ }
199
+ const resources = (0, parser_1.parseKubernetes)(code);
200
+ return resources.length > 0;
201
+ }
202
+ catch {
203
+ return false;
204
+ }
205
+ }
206
+ getLanguageInfo() {
207
+ return {
208
+ name: 'Kubernetes',
209
+ extensions: ['.yaml', '.yml'],
210
+ description: 'Kubernetes YAML manifest security scanning with 25 checks + PII detection',
211
+ };
212
+ }
213
+ }
214
+ exports.KubernetesAnalyzer = KubernetesAnalyzer;
215
+ //# sourceMappingURL=kubernetes-analyzer.js.map