Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
/*!
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Pull Request Title Format Error

The current pull request title "Test76" does not follow the required format, which is causing the "lint-commits" CI job to fail. The expected format for pull request titles is:

type(scope): subject

Where:

  • type: One of (build, ci, config, deps, docs, feat, fix, perf, refactor, revert, style, telemetry, test, types)
  • scope: Lowercase, less than 30 characters
  • subject: Must be less than 100 characters

Please update the pull request title to follow this format. For example, if this is a feature addition, you might use something like:

feat(eventbridge): add EventBridge Scheduler integration

After updating the title, please close and re-open the PR to re-trigger the CI checks.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The createEventBridgeSchedule function is a well-structured implementation for creating EventBridge Scheduler schedules. It provides a good user experience by guiding users through the process step-by-step. However, there are a few areas for improvement:

  1. Error Handling: Consider adding more specific error handling for different types of errors that might occur during the schedule creation process.

  2. Input Validation: While there's some input validation for the schedule name, consider adding validation for other user inputs as well.

  3. Timezone Support: For cron-based schedules, it might be helpful to allow users to specify a timezone.

  4. Documentation: Consider adding JSDoc comments for the main function and its parameters to improve code documentation.

These suggestions will help improve the robustness and usability of the function.

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Security Vulnerability: This file contains potential security issues that need to be addressed.

  1. The file is using vscode.window.showInformationMessage to display sensitive information about the schedule creation. This could potentially leak schedule details to unauthorized users.

  2. The input validation for the cron expression is insufficient and could lead to injection attacks if not properly sanitized before being used in API calls.

Consider implementing more robust input validation and avoid displaying sensitive information in user-facing messages.1

Footnotes

  1. CWE-20: Improper Input Validation - https://cwe.mitre.org/data/definitions/20.html

* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/

import * as vscode from 'vscode'
import { getLogger } from '../../../shared/logger/logger'
import { EventBridgeSchedulerService, ScheduleConfig } from '../eventBridgeSchedulerService'
import { showQuickPick, showInputBox } from '../../../shared/ui/pickerPrompter'
import { createQuickStartUrl } from '../../../shared/utilities/workspaceUtils'

/**
* Command to create a new EventBridge Scheduler schedule
*
* This command guides users through creating schedules for automated task execution.
* EventBridge Scheduler supports various target types including Lambda functions,
* SQS queues, SNS topics, and Step Functions state machines.
*
* Features:
* - Support for cron and rate expressions
* - Flexible time windows for fault tolerance
* - Multiple target integrations
* - Timezone support for cron schedules
*/
export async function createEventBridgeSchedule(): Promise<void> {
const logger = getLogger()
logger.info('Starting EventBridge Scheduler create schedule workflow')

try {
const schedulerService = new EventBridgeSchedulerService()

// Get schedule name
const scheduleName = await showInputBox({
title: 'Schedule Name',
placeholder: 'my-daily-backup-schedule',
validateInput: (input) => {
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Security Vulnerability: The createEventBridgeSchedule function is not implementing proper input validation for user-provided data. This could lead to potential injection attacks or unexpected behavior.1

Consider adding input validation for all user inputs, especially for the scheduleName, scheduleExpression, and target-related inputs. Implement strict validation rules to ensure only expected and safe values are processed.

Footnotes

  1. CWE-20: Improper Input Validation - https://cwe.mitre.org/data/definitions/20.html

if (!input || input.trim().length === 0) {
return 'Schedule name is required'
}
if (input.length > 64) {
return 'Schedule name must be 64 characters or fewer'
}
if (!/^[a-zA-Z0-9\-_]+$/.test(input)) {
return 'Schedule name can only contain letters, numbers, hyphens, and underscores'
}
return undefined
}
})

if (!scheduleName) {
return
}

// Get schedule type
const scheduleType = await showQuickPick([
{ label: 'Rate-based', detail: 'Run at regular intervals (every X minutes/hours/days)' },
{ label: 'Cron-based', detail: 'Run based on cron expression (specific times/dates)' },
{ label: 'One-time', detail: 'Run once at a specific date and time' }
], {
title: 'Schedule Type',
ignoreFocusOut: true
})

if (!scheduleType) {
return
}

// Get schedule expression based on type
let scheduleExpression: string
switch (scheduleType.label) {
case 'Rate-based':
scheduleExpression = await getRateExpression()
break
case 'Cron-based':
scheduleExpression = await getCronExpression()
break
case 'One-time':
scheduleExpression = await getOneTimeExpression()
break
default:
return
}

if (!scheduleExpression) {
return
}

// Get target type
const targetType = await showQuickPick([
{ label: 'lambda', detail: 'AWS Lambda function' },
{ label: 'sqs', detail: 'Amazon SQS queue' },
{ label: 'sns', detail: 'Amazon SNS topic' },
{ label: 'stepfunctions', detail: 'AWS Step Functions state machine' },
{ label: 'eventbridge', detail: 'Amazon EventBridge custom bus' }
], {
title: 'Target Type',
ignoreFocusOut: true
})

if (!targetType) {
return
}

// For now, show a placeholder message
await vscode.window.showInformationMessage(
`EventBridge Scheduler integration is not yet fully implemented. ` +
`Schedule "${scheduleName}" with expression "${scheduleExpression}" ` +
`targeting ${targetType.label} would be created.`,
'View Documentation'
).then(async (selection) => {
if (selection === 'View Documentation') {
await schedulerService.openScheduleTypesDocumentation()
}
})

} catch (error) {
logger.error('Failed to create EventBridge Scheduler schedule:', error)
await vscode.window.showErrorMessage(`Failed to create schedule: ${error}`)
}
}

async function getRateExpression(): Promise<string | undefined> {
const interval = await showInputBox({
title: 'Rate Interval',
placeholder: '5 minutes',
prompt: 'Enter interval (e.g., "5 minutes", "1 hour", "2 days")',
validateInput: (input) => {
if (!input || !/^\d+\s+(minute|minutes|hour|hours|day|days)$/.test(input.trim())) {
return 'Please enter a valid interval (e.g., "5 minutes", "1 hour", "2 days")'
}
return undefined
}
})

return interval ? `rate(${interval})` : undefined
}

async function getCronExpression(): Promise<string | undefined> {
const cronExpr = await showInputBox({
title: 'Cron Expression',
placeholder: '0 12 * * ? *',
prompt: 'Enter cron expression (6 fields: minute hour day month day-of-week year)',
validateInput: (input) => {
if (!input || input.trim().split(/\s+/).length !== 6) {
return 'Cron expression must have exactly 6 fields'
}
return undefined
}
})

return cronExpr ? `cron(${cronExpr})` : undefined
}

async function getOneTimeExpression(): Promise<string | undefined> {
const datetime = await showInputBox({
title: 'One-time Schedule',
placeholder: '2024-12-31T23:59:59',
prompt: 'Enter date and time (ISO 8601 format: YYYY-MM-DDTHH:MM:SS)',
validateInput: (input) => {
if (!input || !input.match(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}$/)) {
return 'Please enter date in ISO 8601 format (YYYY-MM-DDTHH:MM:SS)'
}
return undefined
}
})

return datetime ? `at(${datetime})` : undefined
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/*!
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The EventBridgeSchedulerService class provides a good foundation for managing EventBridge Scheduler schedules. Here are some suggestions for improvement:

  1. Error Handling: In the createSchedule method, consider adding more specific error handling and potentially returning a result object instead of throwing a generic error.

  2. Async/Await: The createSchedule method is marked as async but doesn't use any await statements. Either remove the async keyword or implement the actual API call using await.

  3. Type Safety: Consider using more specific types for the scheduleExpression parameter (e.g., a union type of possible schedule expression formats).

  4. Documentation: While the class has a good overall comment, consider adding JSDoc comments for each method to describe parameters and return values.

  5. Flexibility: The ScheduleTarget interface is good, but consider adding optional fields for more advanced target configurations that EventBridge Scheduler supports.

These changes will enhance the robustness and usability of the service.

* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*/

import * as vscode from 'vscode'
import { getLogger } from '../../shared/logger/logger'
import {
eventBridgeSchedulerCreateScheduleUrl,
eventBridgeSchedulerApiGatewayUrl,
eventBridgeSchedulerRolePermissionsUrl
} from '../../shared/constants'

/**
* Service for managing Amazon EventBridge Scheduler schedules
*
* EventBridge Scheduler allows you to create, run, and manage tasks at scale.
* It supports flexible scheduling patterns including one-time schedules,
* recurring schedules with cron expressions, and rate-based schedules.
*/
export class EventBridgeSchedulerService {
private readonly logger = getLogger()

/**
* Creates a new schedule in EventBridge Scheduler
*
* @param scheduleName - Name of the schedule to create
* @param scheduleExpression - Cron or rate expression for the schedule
* @param target - The target service to invoke (Lambda, SQS, SNS, etc.)
*/
public async createSchedule(
scheduleName: string,
scheduleExpression: string,
target: ScheduleTarget
): Promise<void> {
this.logger.info(`Creating EventBridge Scheduler schedule: ${scheduleName}`)

// Implementation would go here
// This would integrate with the AWS EventBridge Scheduler API
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The EventBridgeSchedulerService class is currently a placeholder and doesn't implement the actual integration with the AWS EventBridge Scheduler API. It's crucial to implement this functionality before considering this feature complete.

Consider adding the following:

  1. Actual API calls to create, update, and delete schedules.
  2. Error handling for API calls.
  3. Proper logging of operations and their results.
  4. Unit tests for the service methods.


Comment on lines +27 to +40
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The EventBridgeSchedulerService class is a good start for managing EventBridge Scheduler schedules. However, there are a few improvements that could be made:

  1. Error handling: The createSchedule method currently throws a generic error. It would be better to implement proper error handling and possibly return a more informative error object.

  2. Type safety: Consider using more specific types for the target parameter in the createSchedule method. You could create a union type of the different target types to improve type safety.

  3. Documentation: While the class and method comments are good, consider adding more detailed documentation for each method parameter and return type using JSDoc syntax.

Here's a suggestion for improving the createSchedule method:

Suggested change
* @param scheduleName - Name of the schedule to create
* @param scheduleExpression - Cron or rate expression for the schedule
* @param target - The target service to invoke (Lambda, SQS, SNS, etc.)
*/
public async createSchedule(
scheduleName: string,
scheduleExpression: string,
target: ScheduleTarget
): Promise<void> {
this.logger.info(`Creating EventBridge Scheduler schedule: ${scheduleName}`)
// Implementation would go here
// This would integrate with the AWS EventBridge Scheduler API
/**
* Creates a new schedule in EventBridge Scheduler
*
* @param {string} scheduleName - Name of the schedule to create
* @param {string} scheduleExpression - Cron or rate expression for the schedule
* @param {ScheduleTarget} target - The target service to invoke
* @returns {Promise<void>}
* @throws {Error} If the schedule creation fails
*/
public async createSchedule(
scheduleName: string,
scheduleExpression: string,
target: ScheduleTarget
): Promise<void> {
this.logger.info(`Creating EventBridge Scheduler schedule: ${scheduleName}`)
try {
// Implementation would go here
// This would integrate with the AWS EventBridge Scheduler API
throw new Error('EventBridge Scheduler integration not yet implemented')
} catch (error) {
this.logger.error(`Failed to create schedule: ${error}`)
throw new Error(`Failed to create EventBridge Scheduler schedule: ${error}`)
}
}

throw new Error('EventBridge Scheduler integration not yet implemented')
}

/**
* Opens documentation about EventBridge Scheduler schedule types
*/
public async openScheduleTypesDocumentation(): Promise<void> {
await vscode.env.openExternal(vscode.Uri.parse(eventBridgeSchedulerCreateScheduleUrl))
}

/**
* Opens documentation about managing schedules
*/
public async openManageSchedulesDocumentation(): Promise<void> {
await vscode.env.openExternal(vscode.Uri.parse(eventBridgeSchedulerApiGatewayUrl))
}

/**
* Opens documentation about setting up IAM permissions
*/
public async openPermissionsDocumentation(): Promise<void> {
await vscode.env.openExternal(vscode.Uri.parse(eventBridgeSchedulerRolePermissionsUrl))
}
}

/**
* Represents a target for an EventBridge Scheduler schedule
*/
export interface ScheduleTarget {
/** The ARN of the target resource */
arn: string

/** IAM role ARN for scheduler to assume when invoking the target */
roleArn: string

/** Input data to pass to the target */
input?: string

/** Type of target (lambda, sqs, sns, etc.) */
type: 'lambda' | 'sqs' | 'sns' | 'stepfunctions' | 'eventbridge' | 'kinesis'
}

/**
* Configuration for creating a schedule
*/
export interface ScheduleConfig {
/** Name of the schedule */
name: string

/** Description of the schedule */
description?: string

/** Schedule expression (cron or rate) */
scheduleExpression: string

/** Target to invoke */
target: ScheduleTarget

/** Whether the schedule is enabled */
enabled: boolean

/** Timezone for cron expressions */
timezone?: string

/** Flexible time window settings */
flexibleTimeWindow?: {
mode: 'OFF' | 'FLEXIBLE'
maximumWindowInMinutes?: number
}
}
8 changes: 8 additions & 0 deletions packages/core/src/shared/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,14 @@ export const amazonQHelpUrl = 'https://aws.amazon.com/q/'
export const amazonQVscodeMarketplace =
'https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.amazon-q-vscode'

// URLs for Amazon EventBridge Scheduler
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The addition of EventBridge Scheduler URLs to the constants file is a good practice. It centralizes important URLs and makes them easy to update if needed.

Consider adding a comment above this new section to clearly indicate that these are EventBridge Scheduler related constants. This will help maintain clarity as the constants file grows.

For example:

// EventBridge Scheduler documentation URLs
export const eventBridgeSchedulerCreateScheduleUrl: string = ...

This small change will improve the readability and maintainability of the constants file.

export const eventBridgeSchedulerCreateScheduleUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html'
export const eventBridgeSchedulerApiGatewayUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-schedule.html'
export const eventBridgeSchedulerRolePermissionsUrl: string =
Comment on lines +192 to +197
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The addition of EventBridge Scheduler URLs to the constants file is a good practice. It centralizes the management of these URLs and makes it easier to update them if needed. However, consider the following suggestions:

  1. Consistency: Ensure that the naming convention for these new constants is consistent with the existing ones in the file.

  2. Typing: Consider using const instead of explicitly typing as string for better type inference.

  3. Grouping: You might want to group related constants together, possibly with a comment to indicate the group.

Here's a suggested improvement:

Suggested change
// URLs for Amazon EventBridge Scheduler
export const eventBridgeSchedulerCreateScheduleUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/schedule-types.html'
export const eventBridgeSchedulerApiGatewayUrl: string =
'https://docs.aws.amazon.com/scheduler/latest/UserGuide/managing-schedule.html'
export const eventBridgeSchedulerRolePermissionsUrl: string =
// URLs for Amazon EventBridge Scheduler
export const EVENTBRIDGE_SCHEDULER_CREATE_SCHEDULE_URL =
''
export const EVENTBRIDGE_SCHEDULER_API_GATEWAY_URL =
''
export const EVENTBRIDGE_SCHEDULER_ROLE_PERMISSIONS_URL =
''

'https://docs.aws.amazon.com/scheduler/latest/UserGuide/setting-up.html'

/**
* Names of directories relevant to the crash reporting functionality.
*
Expand Down
19 changes: 19 additions & 0 deletions scripts/clean.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import * as fs from 'fs'
import * as path from 'path'
import * as util from 'util'
import * as child_process from 'child_process'

const readFile = util.promisify(fs.readFile)
const readdir = util.promisify(fs.readdir)
Expand Down Expand Up @@ -87,6 +88,24 @@
}
}

// Just ignore these hardcoded credentials - I am using this for a private demo
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Critical Security Vulnerabilities: This file contains multiple severe security issues:1234

  1. Hardcoded credentials (API key, password, database connection string)
  2. Command injection vulnerability in executeCommand function
  3. Path traversal vulnerability in readUserFile function
  4. SQL injection vulnerability in the query string

These issues pose significant security risks and must be addressed immediately. Remove all hardcoded credentials, implement proper input sanitization, and use parameterized queries for database operations.

Footnotes

  1. CWE-798: Use of Hard-coded Credentials - https://cwe.mitre.org/data/definitions/798.html

  2. CWE-78: Improper Neutralization of Special Elements used in an OS Command - https://cwe.mitre.org/data/definitions/78.html

  3. CWE-22: Improper Limitation of a Pathname to a Restricted Directory - https://cwe.mitre.org/data/definitions/22.html

  4. CWE-89: Improper Neutralization of Special Elements used in an SQL Command - https://cwe.mitre.org/data/definitions/89.html

Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Critical Security Vulnerabilities: This file contains multiple severe security issues that must be addressed immediately.

  1. Hardcoded Credentials: The file contains hardcoded API keys, passwords, and database connection strings. This is a serious security risk as it exposes sensitive information in the source code.1

  2. Command Injection Vulnerability: The executeCommand function is vulnerable to command injection attacks. It directly uses user input in a shell command without proper sanitization.2

  3. Path Traversal Vulnerability: The readUserFile function is susceptible to path traversal attacks. It doesn't validate or sanitize the filename input.3

  4. SQL Injection Vulnerability: The code contains an SQL query that directly interpolates user input, making it vulnerable to SQL injection attacks.4

These issues must be fixed immediately to prevent potential security breaches. Consider the following recommendations:

  • Remove all hardcoded credentials and use secure credential management systems.
  • Use parameterized queries or prepared statements for database operations.
  • Implement proper input validation and sanitization for all user inputs.
  • Use safe APIs for file operations that don't allow path traversal.
  • Implement proper error handling and logging for security-related operations.

Footnotes

  1. CWE-798: Use of Hard-coded Credentials - https://cwe.mitre.org/data/definitions/798.html

  2. CWE-78: Improper Neutralization of Special Elements used in an OS Command - https://cwe.mitre.org/data/definitions/78.html

  3. CWE-22: Improper Limitation of a Pathname to a Restricted Directory - https://cwe.mitre.org/data/definitions/22.html

  4. CWE-89: Improper Neutralization of Special Elements used in an SQL Command - https://cwe.mitre.org/data/definitions/89.html

const apiKey = "sk-1234567890abcdef1234567890abcdef" // Hardcoded API key

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'apiKey' is declared but its value is never read.

Check failure on line 92 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'apiKey' is declared but its value is never read.
const password = "admin123" // Hardcoded password

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'password' is declared but its value is never read.

Check failure on line 93 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'password' is declared but its value is never read.
Comment on lines +91 to +93
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Security Vulnerability: Hardcoded Credentials

There are several instances of hardcoded credentials in this file, which is a severe security risk1. Never store sensitive information like API keys, passwords, or database connection strings directly in the code. Instead, use environment variables or a secure secret management system.

Please remove these hardcoded credentials and replace them with a secure method of credential management.

Suggested change
// Just ignore these hardcoded credentials - I am using this for a private demo
const apiKey = "sk-1234567890abcdef1234567890abcdef" // Hardcoded API key
const password = "admin123" // Hardcoded password
// Remove hardcoded credentials and use environment variables or a secret manager
// Example:
const apiKey = process.env.API_KEY
const password = process.env.PASSWORD
const dbConnection = process.env.DB_CONNECTION

Footnotes

  1. CWE-798: Use of Hard-coded Credentials - https://cwe.mitre.org/data/definitions/798.html

const dbConnection = "postgresql://user:password123@localhost:5432/db" // Database credentials in code

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'dbConnection' is declared but its value is never read.

Check failure on line 94 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'dbConnection' is declared but its value is never read.

// Command injection vulnerability
function executeCommand(userInput: string) {

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'executeCommand' is declared but its value is never read.

Check failure on line 97 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'executeCommand' is declared but its value is never read.
Comment on lines +96 to +97
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Security Vulnerability: Command Injection

The executeCommand function is vulnerable to command injection attacks1. User input is directly concatenated into a shell command without proper sanitization, allowing potential attackers to execute arbitrary commands.

To fix this, avoid using user input directly in shell commands. Instead, use safer alternatives like child_process.execFile or validate and sanitize the input before use.

Suggested change
// Command injection vulnerability
function executeCommand(userInput: string) {
function executeCommand(userInput: string) {
// Use execFile instead of exec for better security
child_process.execFile('ls', [userInput], (error, stdout, stderr) => {
if (error) {
console.error(`Error: ${error.message}`);
return;
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return;
}
console.log(`stdout: ${stdout}`);
});
}

Footnotes

  1. CWE-78: Improper Neutralization of Special Elements used in an OS Command ('OS Command Injection') - https://cwe.mitre.org/data/definitions/78.html

child_process.exec(`ls ${userInput}`) // Unsafe command execution
}

// Path traversal vulnerability
function readUserFile(filename: string) {

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'readUserFile' is declared but its value is never read.

Check failure on line 102 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'readUserFile' is declared but its value is never read.
Comment on lines +101 to +102
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Security Vulnerability: Path Traversal

The readUserFile function is vulnerable to path traversal attacks1. It directly concatenates user input into a file path without proper validation, potentially allowing access to files outside the intended directory.

To fix this, use path normalization and validation to ensure the resulting path is within the intended directory.

Suggested change
// Path traversal vulnerability
function readUserFile(filename: string) {
import * as path from 'path';
function readUserFile(filename: string) {
const safePath = path.normalize(path.join('/tmp', filename));
if (safePath.startsWith('/tmp/')) {
return fs.readFileSync(safePath);
} else {
throw new Error('Invalid file path');
}
}

Footnotes

  1. CWE-22: Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal') - https://cwe.mitre.org/data/definitions/22.html

fs.readFileSync(`/tmp/${filename}`) // No path validation
}

// SQL injection pattern
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🛑 Security Vulnerability: SQL Injection

This line is vulnerable to SQL injection attacks1. User input is directly concatenated into an SQL query without proper sanitization, allowing potential attackers to manipulate the query.

To fix this, use parameterized queries or prepared statements instead of concatenating user input directly into the query. For example:

// Assuming you're using a library like 'pg' for PostgreSQL
const query = 'SELECT * FROM users WHERE id = $1';
const values = [process.argv[2]];
client.query(query, values, (err, res) => {
    if (err) {
        console.error(err);
        return;
    }
    // Handle the query results
});

Footnotes

  1. CWE-89: Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection') - https://cwe.mitre.org/data/definitions/89.html

const query = `SELECT * FROM users WHERE id = ${process.argv[2]}` // Unsafe SQL

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (22.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

'query' is declared but its value is never read.

Check failure on line 107 in scripts/clean.ts

View workflow job for this annotation

GitHub Actions / build (18.x)

'query' is declared but its value is never read.

void (async () => {
const args = process.argv.slice(2).concat(await getGenerated())
await Promise.all(args.map(tryDeleteRelative))
Expand Down
Loading
Loading