timonel 2.5.1 → 2.6.1
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/CHANGELOG.md +12 -0
- package/dist/lib/helm.d.ts +78 -0
- package/dist/lib/helm.d.ts.map +1 -1
- package/dist/lib/helm.js +103 -0
- package/dist/lib/helm.js.map +1 -1
- package/dist/lib/resources/cloud/aws/awsResources.d.ts +50 -0
- package/dist/lib/resources/cloud/aws/awsResources.d.ts.map +1 -1
- package/dist/lib/resources/cloud/aws/awsResources.js +134 -5
- package/dist/lib/resources/cloud/aws/awsResources.js.map +1 -1
- package/dist/lib/resources/core/coreResources.d.ts +24 -0
- package/dist/lib/resources/core/coreResources.d.ts.map +1 -1
- package/dist/lib/resources/core/coreResources.js +76 -4
- package/dist/lib/resources/core/coreResources.js.map +1 -1
- package/dist/lib/rutter.d.ts +32 -3
- package/dist/lib/rutter.d.ts.map +1 -1
- package/dist/lib/rutter.js +87 -3
- package/dist/lib/rutter.js.map +1 -1
- package/dist/lib/security.d.ts +63 -0
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +223 -0
- package/dist/lib/security.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/security.js
CHANGED
|
@@ -134,5 +134,228 @@ export class SecurityUtils {
|
|
|
134
134
|
static isValidSubchartName(subchartName) {
|
|
135
135
|
return this.isValidChartName(subchartName);
|
|
136
136
|
}
|
|
137
|
+
/**
|
|
138
|
+
* Sanitizes environment variable names and values for Kubernetes security
|
|
139
|
+
* Prevents injection attacks and ensures compliance with Kubernetes naming rules
|
|
140
|
+
* @param name - Environment variable name to sanitize
|
|
141
|
+
* @param value - Environment variable value to sanitize
|
|
142
|
+
* @returns Object with sanitized name and value
|
|
143
|
+
* @throws Error if name or value contains dangerous patterns
|
|
144
|
+
*
|
|
145
|
+
* @since 2.6.0
|
|
146
|
+
*/
|
|
147
|
+
static sanitizeEnvVar(name, value) {
|
|
148
|
+
if (!name || typeof name !== 'string') {
|
|
149
|
+
throw new Error('Environment variable name must be a non-empty string');
|
|
150
|
+
}
|
|
151
|
+
if (typeof value !== 'string') {
|
|
152
|
+
throw new Error('Environment variable value must be a string');
|
|
153
|
+
}
|
|
154
|
+
// Kubernetes env var name validation (RFC 1123 compatible)
|
|
155
|
+
let sanitizedName = name.toUpperCase().replace(/[^A-Z0-9_]/g, '_');
|
|
156
|
+
// Ensure name starts with letter or underscore
|
|
157
|
+
if (/^[0-9]/.test(sanitizedName)) {
|
|
158
|
+
sanitizedName = `_${sanitizedName}`;
|
|
159
|
+
}
|
|
160
|
+
const nameRegex = /^[A-Z_][A-Z0-9_]*$/;
|
|
161
|
+
if (!nameRegex.test(sanitizedName)) {
|
|
162
|
+
throw new Error(`Invalid environment variable name: ${this.sanitizeLogMessage(name)}`);
|
|
163
|
+
}
|
|
164
|
+
// Check for dangerous patterns in value using safer string methods
|
|
165
|
+
const hasDangerousPattern = (val) => {
|
|
166
|
+
if (val.includes('$(') && val.includes(')'))
|
|
167
|
+
return 'command substitution';
|
|
168
|
+
if (val.includes('`'))
|
|
169
|
+
return 'backtick execution';
|
|
170
|
+
if (val.includes('${') && val.includes('}'))
|
|
171
|
+
return 'variable expansion';
|
|
172
|
+
// Check for control characters
|
|
173
|
+
for (let i = 0; i < val.length; i++) {
|
|
174
|
+
const code = val.charCodeAt(i);
|
|
175
|
+
if ((code >= 0x00 && code <= 0x08) ||
|
|
176
|
+
code === 0x0b ||
|
|
177
|
+
code === 0x0c ||
|
|
178
|
+
(code >= 0x0e && code <= 0x1f) ||
|
|
179
|
+
code === 0x7f) {
|
|
180
|
+
return 'control characters';
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
};
|
|
185
|
+
const dangerousPattern = hasDangerousPattern(value);
|
|
186
|
+
if (dangerousPattern) {
|
|
187
|
+
throw new Error(`Environment variable value contains dangerous pattern (${dangerousPattern}): ${this.sanitizeLogMessage(value)}`);
|
|
188
|
+
}
|
|
189
|
+
// Limit value length to prevent DoS
|
|
190
|
+
if (value.length > 32768) {
|
|
191
|
+
throw new Error('Environment variable value exceeds maximum length (32KB)');
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
name: sanitizedName,
|
|
195
|
+
value: value.trim(),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Validates container image tags for security best practices
|
|
200
|
+
* Prevents use of dangerous tags and ensures proper versioning
|
|
201
|
+
* @param tag - Image tag to validate
|
|
202
|
+
* @returns True if tag is valid and secure
|
|
203
|
+
* @throws Error if tag violates security policies
|
|
204
|
+
*
|
|
205
|
+
* @since 2.6.0
|
|
206
|
+
*/
|
|
207
|
+
static validateImageTag(tag) {
|
|
208
|
+
if (!tag || typeof tag !== 'string') {
|
|
209
|
+
throw new Error('Image tag must be a non-empty string');
|
|
210
|
+
}
|
|
211
|
+
const trimmedTag = tag.trim();
|
|
212
|
+
// Reject dangerous or non-specific tags
|
|
213
|
+
const dangerousTags = ['latest', 'master', 'main', 'dev', 'development', 'test', 'staging'];
|
|
214
|
+
if (dangerousTags.includes(trimmedTag.toLowerCase())) {
|
|
215
|
+
throw new Error(`Insecure image tag detected: '${trimmedTag}'. Use specific version tags for security.`);
|
|
216
|
+
}
|
|
217
|
+
// Validate tag format (Docker tag rules)
|
|
218
|
+
const tagRegex = /^[a-zA-Z0-9._-]+$/;
|
|
219
|
+
if (!tagRegex.test(trimmedTag)) {
|
|
220
|
+
throw new Error(`Invalid image tag format: ${this.sanitizeLogMessage(trimmedTag)}`);
|
|
221
|
+
}
|
|
222
|
+
// Check length limits
|
|
223
|
+
if (trimmedTag.length > 128) {
|
|
224
|
+
throw new Error('Image tag exceeds maximum length (128 characters)');
|
|
225
|
+
}
|
|
226
|
+
// Prefer semantic versioning patterns
|
|
227
|
+
// eslint-disable-next-line security/detect-unsafe-regex -- Simple regex patterns are safe for validation
|
|
228
|
+
const semverPattern = /^v?\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?$/;
|
|
229
|
+
const hashPattern = /^[a-f0-9]{7,64}$/;
|
|
230
|
+
// eslint-disable-next-line security/detect-unsafe-regex -- Simple date pattern is safe for validation
|
|
231
|
+
const datePattern = /^\d{4}-\d{2}-\d{2}(-[a-zA-Z0-9.-]+)?$/;
|
|
232
|
+
if (!semverPattern.test(trimmedTag) &&
|
|
233
|
+
!hashPattern.test(trimmedTag) &&
|
|
234
|
+
!datePattern.test(trimmedTag)) {
|
|
235
|
+
// Warning for non-standard tags but don't fail
|
|
236
|
+
console.warn(`Warning: Image tag '${trimmedTag}' doesn't follow recommended patterns (semver, hash, or date)`);
|
|
237
|
+
}
|
|
238
|
+
return true;
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Generates secure names for Kubernetes secrets
|
|
242
|
+
* Ensures names follow RFC 1123 and are safe for Kubernetes
|
|
243
|
+
* @param baseName - Base name for the secret
|
|
244
|
+
* @param suffix - Optional suffix to append
|
|
245
|
+
* @returns Secure secret name
|
|
246
|
+
* @throws Error if generated name is invalid
|
|
247
|
+
*
|
|
248
|
+
* @since 2.6.0
|
|
249
|
+
*/
|
|
250
|
+
static generateSecretName(baseName, suffix) {
|
|
251
|
+
if (!baseName || typeof baseName !== 'string') {
|
|
252
|
+
throw new Error('Base name must be a non-empty string');
|
|
253
|
+
}
|
|
254
|
+
let sanitizedBase = this.sanitizeBaseName(baseName);
|
|
255
|
+
if (suffix) {
|
|
256
|
+
sanitizedBase = this.appendSuffix(sanitizedBase, suffix);
|
|
257
|
+
}
|
|
258
|
+
// Ensure name starts with letter (not number)
|
|
259
|
+
if (/^[0-9]/.test(sanitizedBase)) {
|
|
260
|
+
sanitizedBase = `s${sanitizedBase}`;
|
|
261
|
+
}
|
|
262
|
+
sanitizedBase = this.truncateIfNeeded(sanitizedBase, suffix);
|
|
263
|
+
// Final validation
|
|
264
|
+
if (!this.isValidChartName(sanitizedBase)) {
|
|
265
|
+
throw new Error(`Generated secret name is invalid: ${sanitizedBase}`);
|
|
266
|
+
}
|
|
267
|
+
return sanitizedBase;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Sanitizes the base name for secret generation using safe string methods
|
|
271
|
+
* @param baseName - Base name to sanitize
|
|
272
|
+
* @returns Sanitized base name
|
|
273
|
+
* @throws Error if no valid characters remain
|
|
274
|
+
*
|
|
275
|
+
* @since 2.6.0
|
|
276
|
+
*/
|
|
277
|
+
static sanitizeBaseName(baseName) {
|
|
278
|
+
// Use character-by-character processing instead of regex
|
|
279
|
+
let sanitized = '';
|
|
280
|
+
for (const char of baseName.toLowerCase()) {
|
|
281
|
+
if ((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9') || char === '-') {
|
|
282
|
+
sanitized += char;
|
|
283
|
+
}
|
|
284
|
+
else {
|
|
285
|
+
sanitized += '-';
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
// Collapse multiple hyphens using split/filter/join
|
|
289
|
+
const parts = sanitized.split('-').filter((part) => part.length > 0);
|
|
290
|
+
sanitized = parts.join('-');
|
|
291
|
+
if (!sanitized) {
|
|
292
|
+
throw new Error('Base name contains no valid characters');
|
|
293
|
+
}
|
|
294
|
+
return sanitized;
|
|
295
|
+
}
|
|
296
|
+
/**
|
|
297
|
+
* Appends suffix to sanitized base name using safe string methods
|
|
298
|
+
* @param baseName - Sanitized base name
|
|
299
|
+
* @param suffix - Suffix to append
|
|
300
|
+
* @returns Base name with suffix
|
|
301
|
+
* @throws Error if suffix is invalid
|
|
302
|
+
*
|
|
303
|
+
* @since 2.6.0
|
|
304
|
+
*/
|
|
305
|
+
static appendSuffix(baseName, suffix) {
|
|
306
|
+
if (typeof suffix !== 'string') {
|
|
307
|
+
throw new Error('Suffix must be a string');
|
|
308
|
+
}
|
|
309
|
+
// Use character-by-character processing instead of regex
|
|
310
|
+
let sanitizedSuffix = '';
|
|
311
|
+
for (const char of suffix.toLowerCase()) {
|
|
312
|
+
if ((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9') || char === '-') {
|
|
313
|
+
sanitizedSuffix += char;
|
|
314
|
+
}
|
|
315
|
+
else {
|
|
316
|
+
sanitizedSuffix += '-';
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
// Collapse multiple hyphens using split/filter/join
|
|
320
|
+
const parts = sanitizedSuffix.split('-').filter((part) => part.length > 0);
|
|
321
|
+
sanitizedSuffix = parts.join('-');
|
|
322
|
+
if (sanitizedSuffix) {
|
|
323
|
+
return `${baseName}-${sanitizedSuffix}`;
|
|
324
|
+
}
|
|
325
|
+
return baseName;
|
|
326
|
+
}
|
|
327
|
+
/**
|
|
328
|
+
* Truncates name if it exceeds length limits
|
|
329
|
+
* @param name - Name to potentially truncate
|
|
330
|
+
* @param suffix - Original suffix for preservation
|
|
331
|
+
* @returns Truncated name if needed
|
|
332
|
+
*
|
|
333
|
+
* @since 2.6.0
|
|
334
|
+
*/
|
|
335
|
+
static truncateIfNeeded(name, suffix) {
|
|
336
|
+
const maxLength = 63;
|
|
337
|
+
if (name.length <= maxLength) {
|
|
338
|
+
return name;
|
|
339
|
+
}
|
|
340
|
+
// Truncate but preserve suffix if possible
|
|
341
|
+
if (suffix) {
|
|
342
|
+
// Use safe character processing instead of regex
|
|
343
|
+
let safeSuffix = '';
|
|
344
|
+
for (const char of suffix.toLowerCase()) {
|
|
345
|
+
if ((char >= 'a' && char <= 'z') || (char >= '0' && char <= '9') || char === '-') {
|
|
346
|
+
safeSuffix += char;
|
|
347
|
+
}
|
|
348
|
+
else {
|
|
349
|
+
safeSuffix += '-';
|
|
350
|
+
}
|
|
351
|
+
}
|
|
352
|
+
const suffixPart = `-${safeSuffix}`;
|
|
353
|
+
const maxBaseLength = maxLength - suffixPart.length;
|
|
354
|
+
if (maxBaseLength > 0) {
|
|
355
|
+
return name.substring(0, maxBaseLength) + suffixPart;
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
return name.substring(0, maxLength);
|
|
359
|
+
}
|
|
137
360
|
}
|
|
138
361
|
//# sourceMappingURL=security.js.map
|
package/dist/lib/security.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"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"}
|