--- name: fix-dependabot-alerts description: Fix Dependabot security alerts by updating vulnerable npm dependencies. Use when the user mentions "dependabot", "security alerts", "vulnerability", "CVE", or wants to update packages with security issues. argument-hint: "[alert-number or package-name]" --- # Fix Dependabot Security Alerts You are tasked with fixing Dependabot security alerts for this repository. Follow these steps carefully to resolve vulnerabilities while minimizing risk. ## Step 1: Identify the Vulnerability If a specific alert number or package name was provided, focus on that. Otherwise, check for open alerts: ```bash gh api repos/microsoft/powerplatform-vscode/dependabot/alerts --jq '.[] | select(.state=="open") | {number, package: .security_vulnerability.package.name, severity: .security_vulnerability.severity, vulnerable_versions: .security_vulnerability.vulnerable_version_range, patched_versions: .security_vulnerability.first_patched_version.identifier, summary: .security_advisory.summary}' ``` To get details on a specific alert: ```bash gh api repos/microsoft/powerplatform-vscode/dependabot/alerts/ ``` ## Step 2: Analyze the Dependency Determine if the vulnerable package is: - A **direct dependency** (listed in `package.json`) - A **transitive dependency** (dependency of a dependency) Check where the package appears: ```bash npm ls ``` ## Step 3: Choose the Fix Strategy ### For Direct Dependencies 1. Check the current version in `package.json` 2. Review the changelog/release notes for breaking changes between versions 3. Update using: ```bash npm install @ --save ``` ### For Transitive Dependencies 1. Identify which direct dependency brings in the vulnerable package 2. Check if the direct dependency has a newer version that uses the patched transitive dependency 3. If yes, update the direct dependency 4. If no, add a resolution/override in `package.json`: ```json { "overrides": { "": "" } } ``` ## Step 4: Verify the Fix 1. Run `npm ls ` to confirm the new version 2. Run the build to ensure no breaking changes: ```bash npm run build ``` 3. Run the test suite: ```bash npm test ``` ## Step 5: Handle Common Issues ### Version Conflicts If npm reports peer dependency conflicts: - Check if `--legacy-peer-deps` or `--force` resolves it (use cautiously) - Consider if the conflicting package needs updating first ### Breaking Changes If the update introduces breaking changes: 1. Read the migration guide from the package 2. Update code to accommodate API changes 3. Update tests if needed ### Multiple Vulnerabilities in Same Package If multiple CVEs affect the same package, ensure the patched version addresses all of them before updating. ## Step 6: Commit the Changes After verification passes, commit with a descriptive message: ``` Fix Dependabot security vulnerability in - Updated from to - Addresses CVE-XXXX-XXXXX () - ``` ## Important Notes - **Never skip tests** - security fixes should not break functionality - **Review changelogs** - understand what changed between versions - **Check for multiple alerts** - sometimes one update fixes multiple vulnerabilities - **Document workarounds** - if you use overrides, add a comment explaining why - For this codebase, run `npm run build` which uses gulp to build the extension ## Critical: Never Manually Edit package-lock.json Integrity Hashes **Never manually edit integrity hashes in `package-lock.json`.** These are SHA-512 checksums of the actual tarball content from the npm registry. If you manually change them, CI builds will fail with `EINTEGRITY` errors. ### Why This Happens When npm resolves a cached version that satisfies the constraint, it won't automatically update to a newer version even after changing `package.json`. Manually editing the lock file with an incorrect hash causes: ``` npm error code EINTEGRITY npm error sha512-== integrity checksum failed when using sha512: wanted sha512-== but got sha512-== ``` ### Correct Approach to Force Version Updates Instead of manual edits, use one of these methods: ```bash # Option 1: Clean install (recommended) rm -rf node_modules rm package-lock.json npm install # Option 2: Update specific package npm update # Option 3: Force reinstall specific package npm install @ --save ``` These commands let npm fetch the tarball and compute the correct integrity hash automatically.