T08 · Insecure Dependencies
- Location
- scripts/init-artifact.sh:34
- Finding
- Unpinned third-party packages are downloaded and executed during project initialization## Vulnerability Details **File Location**: `scripts/init-artifact.sh:34-74`, with additional dependency installation at `scripts/init-artifact.sh:260-261` **Vulnerability Type**: T08: Insecure Dependencies **Risk Level**: Medium ### Vulnerable Code ```bash # Check if pnpm is installed if ! command -v pnpm &> /dev/null; then echo "📦 pnpm not found. Installing pnpm..." npm install -g pnpm fi # Create new Vite project (always use latest create-vite, pin vite version later) pnpm create vite "$PROJECT_NAME" --template react-ts # Navigate into project directory cd "$PROJECT_NAME" echo "📦 Installing base dependencies..." pnpm install # Pin Vite version for Node 18 if [ "$NODE_VERSION" -lt 20 ]; then echo "📌 Pinning Vite to $VITE_VERSION for Node 18 compatibility..." pnpm add -D vite@$VITE_VERSION fi echo "📦 Installing Tailwind CSS and dependencies..." pnpm install -D tailwindcss@3.4.1 postcss autoprefixer @types/node tailwindcss-animate pnpm install class-variance-authority clsx tailwind-merge lucide-react next-themes ``` Additional unpinned packages are installed later: ```bash pnpm install @radix-ui/react-accordion @radix-ui/react-aspect-ratio @radix-ui/react-avatar @radix-ui/react-checkbox @radix-ui/react-collapsible @radix-ui/react-context-menu @radix-ui/react-dialog @radix-ui/react-dropdown-menu @radix-ui/react-hover-card @radix-ui/react-label @radix-ui/react-menubar @radix-ui/react-navigation-menu @radix-ui/react-popover @radix-ui/react-progress @radix-ui/react-radio-group @radix-ui/react-scroll-area @radix-ui/react-select @radix-ui/react-separator @radix-ui/react-slider @radix-ui/react-slot @radix-ui/react-switch @radix-ui/react-tabs @radix-ui/react-toast @radix-ui/react-toggle @radix-ui/react-toggle-group @radix-ui/react-tooltip pnpm install sonner cmdk vaul embla-carousel-react react-day-picker react-resizable-panels date-fns react-hook-form @hookform/resolvers zod ``` ### ...[truncated 1938 chars]
- Remediation
- ## Remediation Suggestions 1. Pin every direct dependency and executable package to an exact, reviewed version rather than using `latest` or implicit version ranges. 2. Commit a reviewed `pnpm-lock.yaml` and install with: ```bash pnpm install --frozen-lockfile ``` 3. Avoid automatically installing a global package manager. Require a documented, preinstalled version or use Corepack with a pinned `packageManager` declaration. 4. Replace `pnpm create vite` with a pinned invocation, such as a reviewed exact `create-vite` version. 5. Where operationally feasible, disable lifecycle scripts during installation and explicitly allow only packages that require reviewed installation scripts. 6. Configure an approved registry and use package integrity verification, dependency scanning, and periodic lockfile review. 7. Run initialization without administrative privileges and in an isolated workspace or container.
