@theoptimalpartner/npm-security-kit 1.0.1 → 2.0.0-beta.0
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 +44 -0
- package/LICENSE +1 -1
- package/README.md +124 -426
- package/bin/npm-security-kit.js +12 -0
- package/package.json +17 -33
- package/src/checks/dockerfile.js +217 -0
- package/src/checks/index.js +10 -0
- package/src/checks/install-scripts.js +77 -0
- package/src/checks/malware.js +61 -0
- package/src/checks/node-version.js +234 -0
- package/src/checks/npm-policy.js +121 -0
- package/src/checks/vulnerabilities.js +79 -0
- package/src/cli.js +117 -0
- package/src/context.js +147 -0
- package/src/init.js +236 -0
- package/src/lib/allow-scripts.js +61 -0
- package/src/lib/audit.js +80 -0
- package/src/lib/diff.js +54 -0
- package/src/lib/dockerfile.js +74 -0
- package/src/lib/json-lines.js +12 -0
- package/src/lib/lockfile.js +48 -0
- package/src/lib/node-calendar.js +73 -0
- package/src/lib/npmrc.js +93 -0
- package/src/lib/semver.js +74 -0
- package/src/policy.js +36 -0
- package/src/report.js +68 -0
- package/src/run.js +35 -0
- package/src/version.js +3 -0
- package/EXAMPLES.md +0 -528
- package/QUICK_START.md +0 -291
- package/bin/check.js +0 -30
- package/bin/install.js +0 -36
- package/bin/install.sh +0 -318
- package/src/index.js +0 -71
- package/template/.github/dependabot.yml +0 -63
- package/template/.github/workflows/security-audit.yml +0 -218
- package/template/.security/config.json +0 -94
- package/template/.security/malicious-packages-blacklist.json +0 -259
- package/template/scripts/check-malicious-packages.sh +0 -118
- package/template/scripts/security-check.sh +0 -166
package/src/index.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NPM Security Kit
|
|
3
|
-
* Main entry point for programmatic usage
|
|
4
|
-
*/
|
|
5
|
-
|
|
6
|
-
const path = require('path');
|
|
7
|
-
const fs = require('fs');
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Get path to template files
|
|
11
|
-
*/
|
|
12
|
-
function getTemplatePath() {
|
|
13
|
-
return path.join(__dirname, '..', 'template');
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Get path to blacklist file
|
|
18
|
-
*/
|
|
19
|
-
function getBlacklistPath() {
|
|
20
|
-
return path.join(getTemplatePath(), '.security', 'malicious-packages-blacklist.json');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Load malicious packages blacklist
|
|
25
|
-
*/
|
|
26
|
-
function loadBlacklist() {
|
|
27
|
-
const blacklistPath = getBlacklistPath();
|
|
28
|
-
if (!fs.existsSync(blacklistPath)) {
|
|
29
|
-
throw new Error('Blacklist file not found');
|
|
30
|
-
}
|
|
31
|
-
return JSON.parse(fs.readFileSync(blacklistPath, 'utf8'));
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Check if a package is in the blacklist
|
|
36
|
-
* @param {string} packageName - Name of the package to check
|
|
37
|
-
* @returns {boolean} - True if package is malicious
|
|
38
|
-
*/
|
|
39
|
-
function isMalicious(packageName) {
|
|
40
|
-
const blacklist = loadBlacklist();
|
|
41
|
-
return blacklist.blacklistedPackages.includes(packageName);
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* Check if a package matches malicious patterns
|
|
46
|
-
* @param {string} packageName - Name of the package to check
|
|
47
|
-
* @returns {boolean} - True if package matches a malicious pattern
|
|
48
|
-
*/
|
|
49
|
-
function matchesMaliciousPattern(packageName) {
|
|
50
|
-
const blacklist = loadBlacklist();
|
|
51
|
-
return blacklist.patterns.some(p => {
|
|
52
|
-
const regex = new RegExp(p.pattern);
|
|
53
|
-
return regex.test(packageName);
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Get installation path
|
|
59
|
-
*/
|
|
60
|
-
function getInstallPath() {
|
|
61
|
-
return path.join(__dirname, '..', 'bin', 'install.sh');
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
module.exports = {
|
|
65
|
-
getTemplatePath,
|
|
66
|
-
getBlacklistPath,
|
|
67
|
-
loadBlacklist,
|
|
68
|
-
isMalicious,
|
|
69
|
-
matchesMaliciousPattern,
|
|
70
|
-
getInstallPath
|
|
71
|
-
};
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
version: 2
|
|
2
|
-
updates:
|
|
3
|
-
# Enable version updates for npm dependencies
|
|
4
|
-
- package-ecosystem: "npm"
|
|
5
|
-
directory: "/"
|
|
6
|
-
schedule:
|
|
7
|
-
interval: "weekly"
|
|
8
|
-
day: "monday"
|
|
9
|
-
time: "09:00"
|
|
10
|
-
# Limit the number of open pull requests
|
|
11
|
-
open-pull-requests-limit: 10
|
|
12
|
-
# Add reviewers
|
|
13
|
-
reviewers:
|
|
14
|
-
- "diego"
|
|
15
|
-
# Add labels
|
|
16
|
-
labels:
|
|
17
|
-
- "dependencies"
|
|
18
|
-
- "security"
|
|
19
|
-
- "automerge-candidate"
|
|
20
|
-
# Group updates
|
|
21
|
-
groups:
|
|
22
|
-
aws-sdk:
|
|
23
|
-
patterns:
|
|
24
|
-
- "@aws-sdk/*"
|
|
25
|
-
typescript:
|
|
26
|
-
patterns:
|
|
27
|
-
- "typescript"
|
|
28
|
-
- "@types/*"
|
|
29
|
-
- "ts-node"
|
|
30
|
-
- "tsx"
|
|
31
|
-
testing:
|
|
32
|
-
patterns:
|
|
33
|
-
- "jest"
|
|
34
|
-
- "@types/jest"
|
|
35
|
-
- "c8"
|
|
36
|
-
serverless:
|
|
37
|
-
patterns:
|
|
38
|
-
- "serverless*"
|
|
39
|
-
# Security updates configuration
|
|
40
|
-
versioning-strategy: increase
|
|
41
|
-
# Allow both direct and indirect updates
|
|
42
|
-
allow:
|
|
43
|
-
- dependency-type: "all"
|
|
44
|
-
# Ignore major version updates for now (require manual review)
|
|
45
|
-
ignore:
|
|
46
|
-
- dependency-name: "*"
|
|
47
|
-
update-types: ["version-update:semver-major"]
|
|
48
|
-
# Automatically rebase PRs
|
|
49
|
-
rebase-strategy: "auto"
|
|
50
|
-
# Commit message prefix
|
|
51
|
-
commit-message:
|
|
52
|
-
prefix: "chore"
|
|
53
|
-
prefix-development: "chore(dev)"
|
|
54
|
-
include: "scope"
|
|
55
|
-
|
|
56
|
-
# Monitor GitHub Actions
|
|
57
|
-
- package-ecosystem: "github-actions"
|
|
58
|
-
directory: "/"
|
|
59
|
-
schedule:
|
|
60
|
-
interval: "weekly"
|
|
61
|
-
labels:
|
|
62
|
-
- "ci"
|
|
63
|
-
- "security"
|
|
@@ -1,218 +0,0 @@
|
|
|
1
|
-
name: Security Audit
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
pull_request:
|
|
5
|
-
branches: [main, develop]
|
|
6
|
-
push:
|
|
7
|
-
branches: [main, develop]
|
|
8
|
-
schedule:
|
|
9
|
-
# Ejecutar semanalmente los lunes a las 9am UTC
|
|
10
|
-
- cron: '0 9 * * 1'
|
|
11
|
-
workflow_dispatch: # Permitir ejecución manual
|
|
12
|
-
|
|
13
|
-
jobs:
|
|
14
|
-
npm-audit:
|
|
15
|
-
name: NPM Security Audit
|
|
16
|
-
runs-on: ubuntu-latest
|
|
17
|
-
|
|
18
|
-
steps:
|
|
19
|
-
- name: Checkout code
|
|
20
|
-
uses: actions/checkout@v4
|
|
21
|
-
|
|
22
|
-
- name: Setup Node.js
|
|
23
|
-
uses: actions/setup-node@v4
|
|
24
|
-
with:
|
|
25
|
-
node-version: '18'
|
|
26
|
-
cache: 'npm'
|
|
27
|
-
|
|
28
|
-
- name: Install dependencies
|
|
29
|
-
run: npm ci
|
|
30
|
-
|
|
31
|
-
- name: Run npm audit
|
|
32
|
-
id: npm-audit
|
|
33
|
-
run: |
|
|
34
|
-
echo "Running npm audit..."
|
|
35
|
-
npm audit --audit-level=moderate || EXIT_CODE=$?
|
|
36
|
-
|
|
37
|
-
if [ $EXIT_CODE -ne 0 ]; then
|
|
38
|
-
echo "::warning::npm audit found vulnerabilities"
|
|
39
|
-
npm audit --json > npm-audit-report.json
|
|
40
|
-
echo "audit_failed=true" >> $GITHUB_OUTPUT
|
|
41
|
-
else
|
|
42
|
-
echo "::notice::No vulnerabilities found"
|
|
43
|
-
echo "audit_failed=false" >> $GITHUB_OUTPUT
|
|
44
|
-
fi
|
|
45
|
-
|
|
46
|
-
exit $EXIT_CODE
|
|
47
|
-
continue-on-error: true
|
|
48
|
-
|
|
49
|
-
- name: Upload audit report
|
|
50
|
-
if: steps.npm-audit.outputs.audit_failed == 'true'
|
|
51
|
-
uses: actions/upload-artifact@v4
|
|
52
|
-
with:
|
|
53
|
-
name: npm-audit-report
|
|
54
|
-
path: npm-audit-report.json
|
|
55
|
-
retention-days: 30
|
|
56
|
-
|
|
57
|
-
- name: Fail on critical vulnerabilities
|
|
58
|
-
if: steps.npm-audit.outputs.audit_failed == 'true'
|
|
59
|
-
run: |
|
|
60
|
-
echo "::error::Security vulnerabilities detected. Review the audit report."
|
|
61
|
-
exit 1
|
|
62
|
-
|
|
63
|
-
socket-security:
|
|
64
|
-
name: Socket.dev Security Scan
|
|
65
|
-
runs-on: ubuntu-latest
|
|
66
|
-
|
|
67
|
-
steps:
|
|
68
|
-
- name: Checkout code
|
|
69
|
-
uses: actions/checkout@v4
|
|
70
|
-
|
|
71
|
-
- name: Setup Node.js
|
|
72
|
-
uses: actions/setup-node@v4
|
|
73
|
-
with:
|
|
74
|
-
node-version: '18'
|
|
75
|
-
|
|
76
|
-
- name: Install Socket CLI
|
|
77
|
-
run: npm install -g @socketsecurity/cli
|
|
78
|
-
|
|
79
|
-
- name: Socket Security Scan
|
|
80
|
-
run: |
|
|
81
|
-
echo "Running Socket security scan..."
|
|
82
|
-
socket npm audit || EXIT_CODE=$?
|
|
83
|
-
|
|
84
|
-
if [ $EXIT_CODE -ne 0 ]; then
|
|
85
|
-
echo "::warning::Socket detected security issues"
|
|
86
|
-
else
|
|
87
|
-
echo "::notice::No security issues detected by Socket"
|
|
88
|
-
fi
|
|
89
|
-
|
|
90
|
-
dependency-review:
|
|
91
|
-
name: Dependency Review
|
|
92
|
-
runs-on: ubuntu-latest
|
|
93
|
-
if: github.event_name == 'pull_request'
|
|
94
|
-
|
|
95
|
-
steps:
|
|
96
|
-
- name: Checkout code
|
|
97
|
-
uses: actions/checkout@v4
|
|
98
|
-
|
|
99
|
-
- name: Dependency Review
|
|
100
|
-
uses: actions/dependency-review-action@v4
|
|
101
|
-
with:
|
|
102
|
-
fail-on-severity: moderate
|
|
103
|
-
deny-licenses: GPL-3.0, AGPL-3.0
|
|
104
|
-
|
|
105
|
-
license-check:
|
|
106
|
-
name: License Compliance Check
|
|
107
|
-
runs-on: ubuntu-latest
|
|
108
|
-
|
|
109
|
-
steps:
|
|
110
|
-
- name: Checkout code
|
|
111
|
-
uses: actions/checkout@v4
|
|
112
|
-
|
|
113
|
-
- name: Setup Node.js
|
|
114
|
-
uses: actions/setup-node@v4
|
|
115
|
-
with:
|
|
116
|
-
node-version: '18'
|
|
117
|
-
cache: 'npm'
|
|
118
|
-
|
|
119
|
-
- name: Install dependencies
|
|
120
|
-
run: npm ci
|
|
121
|
-
|
|
122
|
-
- name: Check for suspicious packages
|
|
123
|
-
run: |
|
|
124
|
-
echo "Checking for packages without licenses..."
|
|
125
|
-
npm list --json | jq -r '.dependencies | to_entries[] | select(.value.license == null or .value.license == "") | .key' || true
|
|
126
|
-
|
|
127
|
-
echo "Checking for deprecated packages..."
|
|
128
|
-
npm outdated || true
|
|
129
|
-
|
|
130
|
-
malicious-patterns:
|
|
131
|
-
name: Check for Malicious Patterns
|
|
132
|
-
runs-on: ubuntu-latest
|
|
133
|
-
|
|
134
|
-
steps:
|
|
135
|
-
- name: Checkout code
|
|
136
|
-
uses: actions/checkout@v4
|
|
137
|
-
|
|
138
|
-
- name: Check for suspicious install scripts
|
|
139
|
-
run: |
|
|
140
|
-
echo "Checking for suspicious preinstall/postinstall scripts..."
|
|
141
|
-
grep -r "preinstall\|postinstall" package.json || echo "No install scripts found"
|
|
142
|
-
|
|
143
|
-
if grep -r "preinstall\|postinstall" package.json; then
|
|
144
|
-
echo "::warning::Install scripts detected - review manually"
|
|
145
|
-
fi
|
|
146
|
-
|
|
147
|
-
- name: Check for hardcoded secrets
|
|
148
|
-
run: |
|
|
149
|
-
echo "Checking for hardcoded secrets..."
|
|
150
|
-
if grep -rE "(password|secret|api[_-]?key|token|auth).*=.*['\"]" --include="*.ts" --include="*.js" src/ 2>/dev/null; then
|
|
151
|
-
echo "::error::Potential hardcoded secrets found"
|
|
152
|
-
exit 1
|
|
153
|
-
else
|
|
154
|
-
echo "::notice::No hardcoded secrets detected"
|
|
155
|
-
fi
|
|
156
|
-
|
|
157
|
-
- name: Verify package-lock integrity
|
|
158
|
-
run: |
|
|
159
|
-
echo "Verifying package-lock.json integrity..."
|
|
160
|
-
if [ -f package-lock.json ]; then
|
|
161
|
-
npm ci --dry-run
|
|
162
|
-
echo "::notice::package-lock.json is valid"
|
|
163
|
-
else
|
|
164
|
-
echo "::error::package-lock.json not found"
|
|
165
|
-
exit 1
|
|
166
|
-
fi
|
|
167
|
-
|
|
168
|
-
known-malicious-packages:
|
|
169
|
-
name: Check Known Malicious Packages
|
|
170
|
-
runs-on: ubuntu-latest
|
|
171
|
-
|
|
172
|
-
steps:
|
|
173
|
-
- name: Checkout code
|
|
174
|
-
uses: actions/checkout@v4
|
|
175
|
-
|
|
176
|
-
- name: Setup Node.js
|
|
177
|
-
uses: actions/setup-node@v4
|
|
178
|
-
with:
|
|
179
|
-
node-version: '18'
|
|
180
|
-
cache: 'npm'
|
|
181
|
-
|
|
182
|
-
- name: Install dependencies
|
|
183
|
-
run: npm ci
|
|
184
|
-
|
|
185
|
-
- name: Install jq
|
|
186
|
-
run: sudo apt-get install -y jq
|
|
187
|
-
|
|
188
|
-
- name: Check against malicious package blacklist
|
|
189
|
-
run: |
|
|
190
|
-
chmod +x ./scripts/check-malicious-packages.sh
|
|
191
|
-
./scripts/check-malicious-packages.sh || EXIT_CODE=$?
|
|
192
|
-
|
|
193
|
-
if [ $EXIT_CODE -ne 0 ]; then
|
|
194
|
-
echo "::error::CRITICAL - Malicious packages detected!"
|
|
195
|
-
exit 1
|
|
196
|
-
else
|
|
197
|
-
echo "::notice::No known malicious packages detected"
|
|
198
|
-
fi
|
|
199
|
-
|
|
200
|
-
summary:
|
|
201
|
-
name: Security Summary
|
|
202
|
-
runs-on: ubuntu-latest
|
|
203
|
-
needs: [npm-audit, socket-security, dependency-review, license-check, malicious-patterns, known-malicious-packages]
|
|
204
|
-
if: always()
|
|
205
|
-
|
|
206
|
-
steps:
|
|
207
|
-
- name: Security Summary
|
|
208
|
-
run: |
|
|
209
|
-
echo "## Security Audit Summary" >> $GITHUB_STEP_SUMMARY
|
|
210
|
-
echo "" >> $GITHUB_STEP_SUMMARY
|
|
211
|
-
echo "- NPM Audit: ${{ needs.npm-audit.result }}" >> $GITHUB_STEP_SUMMARY
|
|
212
|
-
echo "- Socket Security: ${{ needs.socket-security.result }}" >> $GITHUB_STEP_SUMMARY
|
|
213
|
-
echo "- Dependency Review: ${{ needs.dependency-review.result }}" >> $GITHUB_STEP_SUMMARY
|
|
214
|
-
echo "- License Check: ${{ needs.license-check.result }}" >> $GITHUB_STEP_SUMMARY
|
|
215
|
-
echo "- Malicious Patterns: ${{ needs.malicious-patterns.result }}" >> $GITHUB_STEP_SUMMARY
|
|
216
|
-
echo "- Known Malicious Packages: ${{ needs.known-malicious-packages.result }}" >> $GITHUB_STEP_SUMMARY
|
|
217
|
-
echo "" >> $GITHUB_STEP_SUMMARY
|
|
218
|
-
echo "Review the individual job logs for details." >> $GITHUB_STEP_SUMMARY
|
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft-07/schema#",
|
|
3
|
-
"projectName": "my-project",
|
|
4
|
-
"projectType": "node",
|
|
5
|
-
"version": "1.0.0",
|
|
6
|
-
"lastUpdated": "2025-10-20",
|
|
7
|
-
"settings": {
|
|
8
|
-
"strictMode": true,
|
|
9
|
-
"excludeDirs": [
|
|
10
|
-
"node_modules",
|
|
11
|
-
"dist",
|
|
12
|
-
"build",
|
|
13
|
-
".next",
|
|
14
|
-
"coverage",
|
|
15
|
-
".cache"
|
|
16
|
-
],
|
|
17
|
-
"checkPatterns": true,
|
|
18
|
-
"checkTransitiveDeps": true,
|
|
19
|
-
"autoFixVulnerabilities": false
|
|
20
|
-
},
|
|
21
|
-
"notifications": {
|
|
22
|
-
"enabled": false,
|
|
23
|
-
"channels": {
|
|
24
|
-
"email": {
|
|
25
|
-
"enabled": false,
|
|
26
|
-
"addresses": []
|
|
27
|
-
},
|
|
28
|
-
"slack": {
|
|
29
|
-
"enabled": false,
|
|
30
|
-
"webhook": ""
|
|
31
|
-
},
|
|
32
|
-
"discord": {
|
|
33
|
-
"enabled": false,
|
|
34
|
-
"webhook": ""
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
},
|
|
38
|
-
"thresholds": {
|
|
39
|
-
"maxVulnerabilities": {
|
|
40
|
-
"critical": 0,
|
|
41
|
-
"high": 0,
|
|
42
|
-
"moderate": 5,
|
|
43
|
-
"low": 10
|
|
44
|
-
},
|
|
45
|
-
"maxPackageAge": {
|
|
46
|
-
"enabled": false,
|
|
47
|
-
"months": 24
|
|
48
|
-
},
|
|
49
|
-
"minDownloadsPerWeek": {
|
|
50
|
-
"enabled": false,
|
|
51
|
-
"count": 1000
|
|
52
|
-
}
|
|
53
|
-
},
|
|
54
|
-
"whitelist": {
|
|
55
|
-
"enabled": false,
|
|
56
|
-
"packages": [],
|
|
57
|
-
"authors": [],
|
|
58
|
-
"organizations": [
|
|
59
|
-
"aws-sdk",
|
|
60
|
-
"types",
|
|
61
|
-
"typescript-eslint"
|
|
62
|
-
]
|
|
63
|
-
},
|
|
64
|
-
"integrations": {
|
|
65
|
-
"githubActions": {
|
|
66
|
-
"enabled": true,
|
|
67
|
-
"schedule": "0 9 * * 1",
|
|
68
|
-
"onPullRequest": true,
|
|
69
|
-
"onPush": true
|
|
70
|
-
},
|
|
71
|
-
"dependabot": {
|
|
72
|
-
"enabled": true,
|
|
73
|
-
"schedule": "weekly",
|
|
74
|
-
"automerge": false
|
|
75
|
-
},
|
|
76
|
-
"preCommitHooks": {
|
|
77
|
-
"enabled": false,
|
|
78
|
-
"blocking": false
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
"reporting": {
|
|
82
|
-
"format": "json",
|
|
83
|
-
"verbosity": "normal",
|
|
84
|
-
"includeTransitiveDeps": true,
|
|
85
|
-
"includeLicenses": true
|
|
86
|
-
},
|
|
87
|
-
"customBlacklist": {
|
|
88
|
-
"enabled": false,
|
|
89
|
-
"packages": [],
|
|
90
|
-
"patterns": [],
|
|
91
|
-
"domains": [],
|
|
92
|
-
"authors": []
|
|
93
|
-
}
|
|
94
|
-
}
|
|
@@ -1,259 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"lastUpdated": "2025-10-20",
|
|
3
|
-
"source": "Socket.dev - 175 Malicious npm Packages Host Phishing Infrastructure",
|
|
4
|
-
"url": "https://socket.dev/blog/175-malicious-npm-packages-host-phishing-infrastructure",
|
|
5
|
-
"threatLevel": "CRITICAL",
|
|
6
|
-
"attackType": "Supply Chain Compromise + Phishing Campaign",
|
|
7
|
-
"mitreAttack": [
|
|
8
|
-
"T1195.002 - Supply Chain Compromise: Compromise Software Supply Chain",
|
|
9
|
-
"T1583.001 - Acquire Infrastructure: Domains",
|
|
10
|
-
"T1584.004 - Compromise Infrastructure: Server",
|
|
11
|
-
"T1566.001 - Phishing: Spearphishing Attachment",
|
|
12
|
-
"T1566.002 - Phishing: Spearphishing Link",
|
|
13
|
-
"T1056.003 - Input Capture: Web Portal Capture"
|
|
14
|
-
],
|
|
15
|
-
"patterns": [
|
|
16
|
-
{
|
|
17
|
-
"pattern": "^redirect-[a-z0-9]{6}$",
|
|
18
|
-
"description": "Malicious redirect packages with random 6-character suffix",
|
|
19
|
-
"action": "BLOCK",
|
|
20
|
-
"severity": "CRITICAL"
|
|
21
|
-
}
|
|
22
|
-
],
|
|
23
|
-
"blacklistedPackages": [
|
|
24
|
-
"redirect-04g1my",
|
|
25
|
-
"redirect-0g91q6",
|
|
26
|
-
"redirect-0vaxnw",
|
|
27
|
-
"redirect-1akzwg",
|
|
28
|
-
"redirect-1hvx9g",
|
|
29
|
-
"redirect-1knxok",
|
|
30
|
-
"redirect-1p89nj",
|
|
31
|
-
"redirect-1st7z7",
|
|
32
|
-
"redirect-1tokin",
|
|
33
|
-
"redirect-1ubpyu",
|
|
34
|
-
"redirect-1wc4gw",
|
|
35
|
-
"redirect-24nt59",
|
|
36
|
-
"redirect-24srjd",
|
|
37
|
-
"redirect-297vpk",
|
|
38
|
-
"redirect-2aie58",
|
|
39
|
-
"redirect-3viu68",
|
|
40
|
-
"redirect-406s9z",
|
|
41
|
-
"redirect-47cprv",
|
|
42
|
-
"redirect-4a6uhw",
|
|
43
|
-
"redirect-4dcjkh",
|
|
44
|
-
"redirect-4iyfat",
|
|
45
|
-
"redirect-4nwrkg",
|
|
46
|
-
"redirect-4r6ynv",
|
|
47
|
-
"redirect-53bw0r",
|
|
48
|
-
"redirect-57j5wb",
|
|
49
|
-
"redirect-594t6h",
|
|
50
|
-
"redirect-5cxzgs",
|
|
51
|
-
"redirect-5iqds5",
|
|
52
|
-
"redirect-5lpuku",
|
|
53
|
-
"redirect-5r42if",
|
|
54
|
-
"redirect-63cl4f",
|
|
55
|
-
"redirect-6lvcjm",
|
|
56
|
-
"redirect-7bqfg6",
|
|
57
|
-
"redirect-7qnew0",
|
|
58
|
-
"redirect-7vw41m",
|
|
59
|
-
"redirect-7yqujr",
|
|
60
|
-
"redirect-8f3x70",
|
|
61
|
-
"redirect-8py8qs",
|
|
62
|
-
"redirect-8ynd96",
|
|
63
|
-
"redirect-95fl17",
|
|
64
|
-
"redirect-9iak88",
|
|
65
|
-
"redirect-a1gs61",
|
|
66
|
-
"redirect-a1jnfo",
|
|
67
|
-
"redirect-aw9itj",
|
|
68
|
-
"redirect-b9diha",
|
|
69
|
-
"redirect-b9fv9e",
|
|
70
|
-
"redirect-byj4f5",
|
|
71
|
-
"redirect-c1n05c",
|
|
72
|
-
"redirect-ch5ayp",
|
|
73
|
-
"redirect-ci4ynt",
|
|
74
|
-
"redirect-cj50k2",
|
|
75
|
-
"redirect-cn040w",
|
|
76
|
-
"redirect-colaux",
|
|
77
|
-
"redirect-cuvccp",
|
|
78
|
-
"redirect-cwfpnz",
|
|
79
|
-
"redirect-cx4vm0",
|
|
80
|
-
"redirect-d0qfku",
|
|
81
|
-
"redirect-dna9sd",
|
|
82
|
-
"redirect-dravb9",
|
|
83
|
-
"redirect-e19jye",
|
|
84
|
-
"redirect-e761hq",
|
|
85
|
-
"redirect-eeu53f",
|
|
86
|
-
"redirect-elvwba",
|
|
87
|
-
"redirect-eqtqym",
|
|
88
|
-
"redirect-evb9wa",
|
|
89
|
-
"redirect-ewce43",
|
|
90
|
-
"redirect-f1wut9",
|
|
91
|
-
"redirect-f72kyw",
|
|
92
|
-
"redirect-fd91u6",
|
|
93
|
-
"redirect-fhelhf",
|
|
94
|
-
"redirect-fohapy",
|
|
95
|
-
"redirect-fwx2y7",
|
|
96
|
-
"redirect-g0ew1n",
|
|
97
|
-
"redirect-g7gn31",
|
|
98
|
-
"redirect-g7v030",
|
|
99
|
-
"redirect-gbgbgh",
|
|
100
|
-
"redirect-gjl674",
|
|
101
|
-
"redirect-gzixvc",
|
|
102
|
-
"redirect-gzkgcn",
|
|
103
|
-
"redirect-h0i672",
|
|
104
|
-
"redirect-h4y8f0",
|
|
105
|
-
"redirect-hi5ag9",
|
|
106
|
-
"redirect-ht8x82",
|
|
107
|
-
"redirect-hx522h",
|
|
108
|
-
"redirect-icp3vd",
|
|
109
|
-
"redirect-igk4sd",
|
|
110
|
-
"redirect-iocz0a",
|
|
111
|
-
"redirect-j0rs4a",
|
|
112
|
-
"redirect-j5blfb",
|
|
113
|
-
"redirect-j8m62u",
|
|
114
|
-
"redirect-jr2idt",
|
|
115
|
-
"redirect-jw31kl",
|
|
116
|
-
"redirect-k1jlsf",
|
|
117
|
-
"redirect-k4s26t",
|
|
118
|
-
"redirect-k5j1u7",
|
|
119
|
-
"redirect-klea4q",
|
|
120
|
-
"redirect-ksm5w7",
|
|
121
|
-
"redirect-kz5pf4",
|
|
122
|
-
"redirect-l0m7on",
|
|
123
|
-
"redirect-l3td5c",
|
|
124
|
-
"redirect-l6qi9e",
|
|
125
|
-
"redirect-lbgja3",
|
|
126
|
-
"redirect-ld0k2a",
|
|
127
|
-
"redirect-lp2xe6",
|
|
128
|
-
"redirect-ltlpoj",
|
|
129
|
-
"redirect-lxzc6c",
|
|
130
|
-
"redirect-m92q7h",
|
|
131
|
-
"redirect-mop8sg",
|
|
132
|
-
"redirect-mrdlde",
|
|
133
|
-
"redirect-mz4116",
|
|
134
|
-
"redirect-n06xhl",
|
|
135
|
-
"redirect-n0c0pt",
|
|
136
|
-
"redirect-n2wvec",
|
|
137
|
-
"redirect-n79iht",
|
|
138
|
-
"redirect-n95xyv",
|
|
139
|
-
"redirect-nf0qo1",
|
|
140
|
-
"redirect-nixl3q",
|
|
141
|
-
"redirect-njmr1g",
|
|
142
|
-
"redirect-noyuan",
|
|
143
|
-
"redirect-nq70u6",
|
|
144
|
-
"redirect-nqfhsn",
|
|
145
|
-
"redirect-nron9d",
|
|
146
|
-
"redirect-nuyvwk",
|
|
147
|
-
"redirect-nzoblt",
|
|
148
|
-
"redirect-o92d2h",
|
|
149
|
-
"redirect-oroq43",
|
|
150
|
-
"redirect-p8ris1",
|
|
151
|
-
"redirect-pkkd5s",
|
|
152
|
-
"redirect-pqigpl",
|
|
153
|
-
"redirect-prhts6",
|
|
154
|
-
"redirect-q2htwu",
|
|
155
|
-
"redirect-q4vs8m",
|
|
156
|
-
"redirect-q84l3v",
|
|
157
|
-
"redirect-qbzqro",
|
|
158
|
-
"redirect-qrah57",
|
|
159
|
-
"redirect-qx2www",
|
|
160
|
-
"redirect-r0ajvl",
|
|
161
|
-
"redirect-r3s2jv",
|
|
162
|
-
"redirect-rc2ewa",
|
|
163
|
-
"redirect-rmunkl",
|
|
164
|
-
"redirect-rrfeb9",
|
|
165
|
-
"redirect-s7usff",
|
|
166
|
-
"redirect-shqv6v",
|
|
167
|
-
"redirect-sjcr8c",
|
|
168
|
-
"redirect-sormfb",
|
|
169
|
-
"redirect-sr2min",
|
|
170
|
-
"redirect-sykre1",
|
|
171
|
-
"redirect-t09ul0",
|
|
172
|
-
"redirect-t65vz6",
|
|
173
|
-
"redirect-t8kcsk",
|
|
174
|
-
"redirect-u0e2q7",
|
|
175
|
-
"redirect-ubp4cs",
|
|
176
|
-
"redirect-uc8xfg",
|
|
177
|
-
"redirect-udmf0u",
|
|
178
|
-
"redirect-uplctp",
|
|
179
|
-
"redirect-uxwcv8",
|
|
180
|
-
"redirect-v74zee",
|
|
181
|
-
"redirect-vlgk2c",
|
|
182
|
-
"redirect-vpvoos",
|
|
183
|
-
"redirect-w9cx9u",
|
|
184
|
-
"redirect-whb6rt",
|
|
185
|
-
"redirect-wu8gx9",
|
|
186
|
-
"redirect-x2giv7",
|
|
187
|
-
"redirect-x4imdv",
|
|
188
|
-
"redirect-xgcv6j",
|
|
189
|
-
"redirect-xi84nq",
|
|
190
|
-
"redirect-xs13nr",
|
|
191
|
-
"redirect-y8p47m",
|
|
192
|
-
"redirect-ystrj5",
|
|
193
|
-
"redirect-ytimeb",
|
|
194
|
-
"redirect-za4566",
|
|
195
|
-
"redirect-zbhdm7",
|
|
196
|
-
"redirect-zfwzmc",
|
|
197
|
-
"redirect-zoju4g",
|
|
198
|
-
"redirect-homer-flajpt"
|
|
199
|
-
],
|
|
200
|
-
"maliciousDomains": [
|
|
201
|
-
"cfn.jackpotmastersdanske.com",
|
|
202
|
-
"musicboxcr.com",
|
|
203
|
-
"villasmbuva.co.mz",
|
|
204
|
-
"cfn.fejyhy.com",
|
|
205
|
-
"cfn.fenamu.com",
|
|
206
|
-
"cfn.notwinningbutpartici.com",
|
|
207
|
-
"elkendinsc.com"
|
|
208
|
-
],
|
|
209
|
-
"suspiciousNpmAccounts": [
|
|
210
|
-
{
|
|
211
|
-
"username": "zamaniboss",
|
|
212
|
-
"email": "frankmease22@gmail.com"
|
|
213
|
-
},
|
|
214
|
-
{
|
|
215
|
-
"username": "ghoxt",
|
|
216
|
-
"email": "harimetal@squbee.com"
|
|
217
|
-
},
|
|
218
|
-
{
|
|
219
|
-
"username": "smfcs",
|
|
220
|
-
"email": "Lee.Ja@bi-energykr.net"
|
|
221
|
-
},
|
|
222
|
-
{
|
|
223
|
-
"username": "doggymugu",
|
|
224
|
-
"email": "r99990077@gmail.com"
|
|
225
|
-
},
|
|
226
|
-
{
|
|
227
|
-
"username": "flajpt",
|
|
228
|
-
"email": "homerstreetgy@proton.me"
|
|
229
|
-
},
|
|
230
|
-
{
|
|
231
|
-
"username": "milotank",
|
|
232
|
-
"email": "inf@mail.legaldispensarysearch.com"
|
|
233
|
-
},
|
|
234
|
-
{
|
|
235
|
-
"username": "remdd100",
|
|
236
|
-
"email": "remmdd@smartmode.j.pl"
|
|
237
|
-
},
|
|
238
|
-
{
|
|
239
|
-
"username": "remdd101",
|
|
240
|
-
"email": "remmdd1@smartmode.j.pl"
|
|
241
|
-
},
|
|
242
|
-
{
|
|
243
|
-
"username": "remdd1012",
|
|
244
|
-
"email": "remmdd12@smartmode.j.pl"
|
|
245
|
-
}
|
|
246
|
-
],
|
|
247
|
-
"indicators": {
|
|
248
|
-
"htmlMetaTag": "nb830r6x",
|
|
249
|
-
"description": "HTML meta tag used in phishing pages"
|
|
250
|
-
},
|
|
251
|
-
"attackDescription": "Phishing campaign weaponizing the npm ecosystem. Threat actors seeded 175+ throwaway packages as disposable hosting for JavaScript that auto-redirects victims to credential-harvesting sites. Targets spanning 135+ organizations.",
|
|
252
|
-
"recommendations": [
|
|
253
|
-
"Block all packages matching pattern ^redirect-[a-z0-9]{6}$",
|
|
254
|
-
"Verify package author reputation before installation",
|
|
255
|
-
"Use Socket.dev CLI to detect malicious packages before installation",
|
|
256
|
-
"Monitor for unexpected redirects in application behavior",
|
|
257
|
-
"Implement CSP (Content Security Policy) to prevent unauthorized redirects"
|
|
258
|
-
]
|
|
259
|
-
}
|