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.
- package/dist/packages/cli/src/commands/scan.d.ts.map +1 -1
- package/dist/packages/cli/src/commands/scan.js +7 -3
- package/dist/packages/cli/src/commands/scan.js.map +1 -1
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts +11 -0
- package/dist/packages/cli/src/reporters/cli-reporter.d.ts.map +1 -1
- package/dist/packages/cli/src/reporters/cli-reporter.js +150 -45
- package/dist/packages/cli/src/reporters/cli-reporter.js.map +1 -1
- package/dist/packages/cli/src/scanner/local-scanner.d.ts +2 -2
- package/dist/packages/cli/src/scanner/local-scanner.d.ts.map +1 -1
- package/dist/packages/cli/src/scanner/local-scanner.js +40 -9
- package/dist/packages/cli/src/scanner/local-scanner.js.map +1 -1
- package/dist/src/lib/analyzers/go-analyzer.d.ts +12 -0
- package/dist/src/lib/analyzers/go-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/go-analyzer.js +113 -0
- package/dist/src/lib/analyzers/go-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/iac/pii-detector.d.ts +27 -0
- package/dist/src/lib/analyzers/iac/pii-detector.d.ts.map +1 -0
- package/dist/src/lib/analyzers/iac/pii-detector.js +199 -0
- package/dist/src/lib/analyzers/iac/pii-detector.js.map +1 -0
- package/dist/src/lib/analyzers/iac/pii-patterns.d.ts +43 -0
- package/dist/src/lib/analyzers/iac/pii-patterns.d.ts.map +1 -0
- package/dist/src/lib/analyzers/iac/pii-patterns.js +228 -0
- package/dist/src/lib/analyzers/iac/pii-patterns.js.map +1 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts +5 -0
- package/dist/src/lib/analyzers/java-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/java-analyzer.js +51 -0
- package/dist/src/lib/analyzers/java-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts +8 -4
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.d.ts.map +1 -1
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js +109 -13
- package/dist/src/lib/analyzers/javascript/quality-checks/ai-hallucinations.js.map +1 -1
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.d.ts.map +1 -1
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js +7 -8
- package/dist/src/lib/analyzers/javascript/quality-checks/reference-errors.js.map +1 -1
- package/dist/src/lib/analyzers/javascript-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/javascript-analyzer.js +16 -12
- package/dist/src/lib/analyzers/javascript-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/kubernetes/checks/network-security.d.ts +33 -0
- package/dist/src/lib/analyzers/kubernetes/checks/network-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/network-security.js +184 -0
- package/dist/src/lib/analyzers/kubernetes/checks/network-security.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/pod-security.d.ts +60 -0
- package/dist/src/lib/analyzers/kubernetes/checks/pod-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/pod-security.js +418 -0
- package/dist/src/lib/analyzers/kubernetes/checks/pod-security.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.d.ts +44 -0
- package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.js +275 -0
- package/dist/src/lib/analyzers/kubernetes/checks/rbac-security.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/resource-management.d.ts +32 -0
- package/dist/src/lib/analyzers/kubernetes/checks/resource-management.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/resource-management.js +176 -0
- package/dist/src/lib/analyzers/kubernetes/checks/resource-management.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.d.ts +38 -0
- package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.js +266 -0
- package/dist/src/lib/analyzers/kubernetes/checks/secrets-management.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/service-security.d.ts +26 -0
- package/dist/src/lib/analyzers/kubernetes/checks/service-security.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/checks/service-security.js +120 -0
- package/dist/src/lib/analyzers/kubernetes/checks/service-security.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/parser.d.ts +74 -0
- package/dist/src/lib/analyzers/kubernetes/parser.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/parser.js +233 -0
- package/dist/src/lib/analyzers/kubernetes/parser.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/pii-detector.d.ts +34 -0
- package/dist/src/lib/analyzers/kubernetes/pii-detector.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/pii-detector.js +182 -0
- package/dist/src/lib/analyzers/kubernetes/pii-detector.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/types.d.ts +266 -0
- package/dist/src/lib/analyzers/kubernetes/types.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes/types.js +77 -0
- package/dist/src/lib/analyzers/kubernetes/types.js.map +1 -0
- package/dist/src/lib/analyzers/kubernetes-analyzer.d.ts +93 -0
- package/dist/src/lib/analyzers/kubernetes-analyzer.d.ts.map +1 -0
- package/dist/src/lib/analyzers/kubernetes-analyzer.js +215 -0
- package/dist/src/lib/analyzers/kubernetes-analyzer.js.map +1 -0
- package/dist/src/lib/analyzers/python-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/python-analyzer.js +32 -48
- package/dist/src/lib/analyzers/python-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/ai-providers.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/aws.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/cloud-providers.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/communication.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/generic.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/github.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys/stripe.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/api-keys.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/credentials.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/private-keys.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts +1 -1
- package/dist/src/lib/analyzers/secrets/patterns/tokens.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts +2 -32
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/secrets/secrets-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/secrets/types.d.ts +40 -0
- package/dist/src/lib/analyzers/secrets/types.d.ts.map +1 -0
- package/dist/src/lib/analyzers/secrets/types.js +10 -0
- package/dist/src/lib/analyzers/secrets/types.js.map +1 -0
- package/dist/src/lib/analyzers/terraform-analyzer.d.ts +1 -0
- package/dist/src/lib/analyzers/terraform-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/terraform-analyzer.js +28 -0
- package/dist/src/lib/analyzers/terraform-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts +5 -0
- package/dist/src/lib/analyzers/typescript-analyzer.d.ts.map +1 -1
- package/dist/src/lib/analyzers/typescript-analyzer.js +76 -0
- package/dist/src/lib/analyzers/typescript-analyzer.js.map +1 -1
- package/dist/src/lib/analyzers/utils/false-positive-filter.d.ts +27 -0
- package/dist/src/lib/analyzers/utils/false-positive-filter.d.ts.map +1 -0
- package/dist/src/lib/analyzers/utils/false-positive-filter.js +176 -0
- package/dist/src/lib/analyzers/utils/false-positive-filter.js.map +1 -0
- package/dist/src/lib/security/epss-service.d.ts.map +1 -1
- package/dist/src/lib/security/epss-service.js +27 -8
- package/dist/src/lib/security/epss-service.js.map +1 -1
- package/dist/src/lib/security/severity-scoring.d.ts.map +1 -1
- package/dist/src/lib/security/severity-scoring.js +24 -0
- package/dist/src/lib/security/severity-scoring.js.map +1 -1
- package/dist/src/lib/types/index.d.ts +3 -3
- package/dist/src/lib/types/index.d.ts.map +1 -1
- package/dist/src/lib/utils/ignore-patterns.d.ts +60 -0
- package/dist/src/lib/utils/ignore-patterns.d.ts.map +1 -0
- package/dist/src/lib/utils/ignore-patterns.js +212 -0
- package/dist/src/lib/utils/ignore-patterns.js.map +1 -0
- package/package.json +1 -1
- package/src/commands/scan.ts +7 -3
- package/src/reporters/cli-reporter.ts +174 -48
- package/src/scanner/local-scanner.ts +54 -10
- 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":"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"}
|
|
@@ -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
|