compromising-position 1.0.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/LICENSE +21 -0
- package/README.md +250 -0
- package/bin/compromising-position +29 -0
- package/dist/checks/hibp-email.d.ts +7 -0
- package/dist/checks/hibp-email.d.ts.map +1 -0
- package/dist/checks/hibp-email.js +99 -0
- package/dist/checks/hibp-email.js.map +1 -0
- package/dist/checks/hibp-password.d.ts +13 -0
- package/dist/checks/hibp-password.d.ts.map +1 -0
- package/dist/checks/hibp-password.js +119 -0
- package/dist/checks/hibp-password.js.map +1 -0
- package/dist/checks/local-check.d.ts +9 -0
- package/dist/checks/local-check.d.ts.map +1 -0
- package/dist/checks/local-check.js +36 -0
- package/dist/checks/local-check.js.map +1 -0
- package/dist/checks/plugin.d.ts +29 -0
- package/dist/checks/plugin.d.ts.map +1 -0
- package/dist/checks/plugin.js +2 -0
- package/dist/checks/plugin.js.map +1 -0
- package/dist/checks/plugins/common-secrets-plugin.d.ts +3 -0
- package/dist/checks/plugins/common-secrets-plugin.d.ts.map +1 -0
- package/dist/checks/plugins/common-secrets-plugin.js +130 -0
- package/dist/checks/plugins/common-secrets-plugin.js.map +1 -0
- package/dist/checks/plugins/dehashed-plugin.d.ts +3 -0
- package/dist/checks/plugins/dehashed-plugin.d.ts.map +1 -0
- package/dist/checks/plugins/dehashed-plugin.js +86 -0
- package/dist/checks/plugins/dehashed-plugin.js.map +1 -0
- package/dist/checks/plugins/emailrep-plugin.d.ts +3 -0
- package/dist/checks/plugins/emailrep-plugin.d.ts.map +1 -0
- package/dist/checks/plugins/emailrep-plugin.js +95 -0
- package/dist/checks/plugins/emailrep-plugin.js.map +1 -0
- package/dist/checks/plugins/gitguardian-hsl-plugin.d.ts +3 -0
- package/dist/checks/plugins/gitguardian-hsl-plugin.d.ts.map +1 -0
- package/dist/checks/plugins/gitguardian-hsl-plugin.js +75 -0
- package/dist/checks/plugins/gitguardian-hsl-plugin.js.map +1 -0
- package/dist/checks/plugins/hibp-email-plugin.d.ts +3 -0
- package/dist/checks/plugins/hibp-email-plugin.d.ts.map +1 -0
- package/dist/checks/plugins/hibp-email-plugin.js +73 -0
- package/dist/checks/plugins/hibp-email-plugin.js.map +1 -0
- package/dist/checks/plugins/hibp-password-plugin.d.ts +3 -0
- package/dist/checks/plugins/hibp-password-plugin.d.ts.map +1 -0
- package/dist/checks/plugins/hibp-password-plugin.js +39 -0
- package/dist/checks/plugins/hibp-password-plugin.js.map +1 -0
- package/dist/checks/plugins/intelx-plugin.d.ts +3 -0
- package/dist/checks/plugins/intelx-plugin.d.ts.map +1 -0
- package/dist/checks/plugins/intelx-plugin.js +113 -0
- package/dist/checks/plugins/intelx-plugin.js.map +1 -0
- package/dist/checks/plugins/leakcheck-plugin.d.ts +3 -0
- package/dist/checks/plugins/leakcheck-plugin.d.ts.map +1 -0
- package/dist/checks/plugins/leakcheck-plugin.js +82 -0
- package/dist/checks/plugins/leakcheck-plugin.js.map +1 -0
- package/dist/checks/plugins/local-analysis-plugin.d.ts +3 -0
- package/dist/checks/plugins/local-analysis-plugin.d.ts.map +1 -0
- package/dist/checks/plugins/local-analysis-plugin.js +36 -0
- package/dist/checks/plugins/local-analysis-plugin.js.map +1 -0
- package/dist/checks/registry.d.ts +24 -0
- package/dist/checks/registry.d.ts.map +1 -0
- package/dist/checks/registry.js +53 -0
- package/dist/checks/registry.js.map +1 -0
- package/dist/config/config.d.ts +10 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +56 -0
- package/dist/config/config.js.map +1 -0
- package/dist/core/entropy.d.ts +23 -0
- package/dist/core/entropy.d.ts.map +1 -0
- package/dist/core/entropy.js +180 -0
- package/dist/core/entropy.js.map +1 -0
- package/dist/core/fingerprint.d.ts +7 -0
- package/dist/core/fingerprint.d.ts.map +1 -0
- package/dist/core/fingerprint.js +10 -0
- package/dist/core/fingerprint.js.map +1 -0
- package/dist/core/key-identifier.d.ts +9 -0
- package/dist/core/key-identifier.d.ts.map +1 -0
- package/dist/core/key-identifier.js +310 -0
- package/dist/core/key-identifier.js.map +1 -0
- package/dist/core/sanitize.d.ts +7 -0
- package/dist/core/sanitize.d.ts.map +1 -0
- package/dist/core/sanitize.js +15 -0
- package/dist/core/sanitize.js.map +1 -0
- package/dist/core/secure-buffer.d.ts +61 -0
- package/dist/core/secure-buffer.d.ts.map +1 -0
- package/dist/core/secure-buffer.js +122 -0
- package/dist/core/secure-buffer.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +472 -0
- package/dist/index.js.map +1 -0
- package/dist/input/batch-parser.d.ts +21 -0
- package/dist/input/batch-parser.d.ts.map +1 -0
- package/dist/input/batch-parser.js +65 -0
- package/dist/input/batch-parser.js.map +1 -0
- package/dist/input/secure-prompt.d.ts +11 -0
- package/dist/input/secure-prompt.d.ts.map +1 -0
- package/dist/input/secure-prompt.js +105 -0
- package/dist/input/secure-prompt.js.map +1 -0
- package/dist/output/audit-log.d.ts +11 -0
- package/dist/output/audit-log.d.ts.map +1 -0
- package/dist/output/audit-log.js +50 -0
- package/dist/output/audit-log.js.map +1 -0
- package/dist/output/csv.d.ts +6 -0
- package/dist/output/csv.d.ts.map +1 -0
- package/dist/output/csv.js +28 -0
- package/dist/output/csv.js.map +1 -0
- package/dist/output/formatter.d.ts +12 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +154 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/sarif.d.ts +6 -0
- package/dist/output/sarif.d.ts.map +1 -0
- package/dist/output/sarif.js +52 -0
- package/dist/output/sarif.js.map +1 -0
- package/dist/types/index.d.ts +141 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +45 -0
- package/dist/types/index.js.map +1 -0
- package/dist/verification/anthropic-verifier.d.ts +3 -0
- package/dist/verification/anthropic-verifier.d.ts.map +1 -0
- package/dist/verification/anthropic-verifier.js +56 -0
- package/dist/verification/anthropic-verifier.js.map +1 -0
- package/dist/verification/aws-verifier.d.ts +14 -0
- package/dist/verification/aws-verifier.d.ts.map +1 -0
- package/dist/verification/aws-verifier.js +30 -0
- package/dist/verification/aws-verifier.js.map +1 -0
- package/dist/verification/github-verifier.d.ts +4 -0
- package/dist/verification/github-verifier.d.ts.map +1 -0
- package/dist/verification/github-verifier.js +62 -0
- package/dist/verification/github-verifier.js.map +1 -0
- package/dist/verification/openai-verifier.d.ts +4 -0
- package/dist/verification/openai-verifier.d.ts.map +1 -0
- package/dist/verification/openai-verifier.js +59 -0
- package/dist/verification/openai-verifier.js.map +1 -0
- package/dist/verification/slack-verifier.d.ts +4 -0
- package/dist/verification/slack-verifier.d.ts.map +1 -0
- package/dist/verification/slack-verifier.js +67 -0
- package/dist/verification/slack-verifier.js.map +1 -0
- package/dist/verification/verifier-registry.d.ts +13 -0
- package/dist/verification/verifier-registry.d.ts.map +1 -0
- package/dist/verification/verifier-registry.js +19 -0
- package/dist/verification/verifier-registry.js.map +1 -0
- package/dist/verification/verifier.d.ts +24 -0
- package/dist/verification/verifier.d.ts.map +1 -0
- package/dist/verification/verifier.js +2 -0
- package/dist/verification/verifier.js.map +1 -0
- package/package.json +61 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common-secrets-plugin.d.ts","sourceRoot":"","sources":["../../../src/checks/plugins/common-secrets-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAwEhD,eAAO,MAAM,mBAAmB,EAAE,WA0EjC,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SHA-256 hashes of common passwords, default credentials, and placeholder values.
|
|
3
|
+
* Stored as hashes so the actual secrets never appear in source code.
|
|
4
|
+
* Implements NIST SP 800-63B Rev 4 mandatory blocklist screening.
|
|
5
|
+
*/
|
|
6
|
+
const COMMON_SECRET_HASHES = new Set([
|
|
7
|
+
// Top passwords: password, 123456, 12345678, qwerty, abc123, monkey, 1234567,
|
|
8
|
+
// letmein, trustno1, dragon, baseball, master, etc.
|
|
9
|
+
"5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8", // password
|
|
10
|
+
"8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92", // 123456
|
|
11
|
+
"ef797c8118f02dfb649607dd5d3f8c7623048c9c063d532cc95c5ed7a898a64f", // 12345678
|
|
12
|
+
"65e84be33532fb784c48129675f9eff3a682b27168c0ea744b2cf58ee02337c5", // qwerty
|
|
13
|
+
"6ca13d52ca70c883e0f0bb101e425a89e8624de51db2d2392593af6a84118090", // abc123
|
|
14
|
+
"ab56b4d92b40713acc5af89985d4b786c2f8fcc30898a36a2c8e3b3b3cdd7460", // 1234567
|
|
15
|
+
"a665a45920422f9d417e4867efdc4fb8a04a1f3fff1fa07e998e86f7f7a27ae3", // 123456789
|
|
16
|
+
"03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4", // 1234
|
|
17
|
+
"5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5", // 12345
|
|
18
|
+
"20f3765880a5c269b747e1e906054a4b4a3a991259f1e16b5dde4742cec2319a", // 1234567890
|
|
19
|
+
"b822f1cd2dcfc685b47e83e3980289fd5d8e3ff3a82def24d7d1d68bb272eb32", // letmein
|
|
20
|
+
"fcab0453879a2b2281bc5073e3f5f93b2aee8f41109fbc3983180bfbf6ce8ade", // trustno1
|
|
21
|
+
"8621ffdbc5698829397d97767ac13db3f084e3e8d68e506c9cf5658c9e89b1c8", // dragon
|
|
22
|
+
"5906ac361a137e2d286465cd6588ebb5ac3f5ae955001100bc41577c3d751764", // baseball
|
|
23
|
+
"a8cfcd74832004951b4408cdb0a5dbcd8c7e52d43f7fe244bf720582e05241da", // iloveyou
|
|
24
|
+
"0ffe1abd1a08215353c233d6e009613e95eec4253832a761af28ff37ac5a150c", // master
|
|
25
|
+
"b7e94be513e96e8c45cd23f162275e5a12ebde9100a425c4ebcdd7fa4dcd897c", // sunshine
|
|
26
|
+
"f2d81a260dea8a100dd517984e53c56a7523d96942a834b9cdc249bd4e8c7aa9", // ashley
|
|
27
|
+
"b4b147bc522828731f1a016bfa72c073571be76ab0adb1a841c5eb4b79a56271", // michael
|
|
28
|
+
"2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824", // hello
|
|
29
|
+
// Common placeholder/test values
|
|
30
|
+
"057ba03d6c44104863dc7361fe4578965d1887360f90a0895882e58a6248fc86", // changeme
|
|
31
|
+
"8bb0cf6eb9b17d0f7d22b456f121257dc1254e1f01665370476383ea776df414", // password1
|
|
32
|
+
"b03ddf3ca2e714a6548e7495e2a03f5e824eaac9837cd7f159c67b90fb4b7342", // Password1
|
|
33
|
+
"a075d17f3d453073853f813838c15b8023b8c487038436354fe599c3942e1f95", // admin
|
|
34
|
+
"f0e4c2f76c58916ec258f246851bea091d14d4247a2fc3e18694461b1816e13b", // test
|
|
35
|
+
"e3b98a4da31a127d4bde6e43033f66ba274cab0eb7eb1c70ec41402bf6273dd8", // default
|
|
36
|
+
"4fc82b26aecb47d2868c4efbe3581732a3e7cbcc6c2efb32062c08170a05eeb8", // secret
|
|
37
|
+
"2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b", // secret
|
|
38
|
+
]);
|
|
39
|
+
/** Known placeholder patterns that indicate test/dummy values. */
|
|
40
|
+
const PLACEHOLDER_PATTERNS = [
|
|
41
|
+
/^your[-_]?api[-_]?key[-_]?here$/i,
|
|
42
|
+
/^insert[-_]?api[-_]?key$/i,
|
|
43
|
+
/^replace[-_]?me$/i,
|
|
44
|
+
/^xxx+$/i,
|
|
45
|
+
/^todo$/i,
|
|
46
|
+
/^fixme$/i,
|
|
47
|
+
/^example$/i,
|
|
48
|
+
/^test[-_]?key$/i,
|
|
49
|
+
/^dummy$/i,
|
|
50
|
+
/^fake[-_]?key$/i,
|
|
51
|
+
/^placeholder$/i,
|
|
52
|
+
/^changeme$/i,
|
|
53
|
+
/^your[-_]?token[-_]?here$/i,
|
|
54
|
+
/^sk[-_]test[-_]xxx+$/i,
|
|
55
|
+
];
|
|
56
|
+
/** Sequential and keyboard patterns. */
|
|
57
|
+
const SEQUENTIAL_PATTERNS = [
|
|
58
|
+
/^(.)\1{7,}$/, // aaaaaaaa
|
|
59
|
+
/^0123456789/,
|
|
60
|
+
/^abcdefgh/i,
|
|
61
|
+
/^qwerty/i,
|
|
62
|
+
/^asdfgh/i,
|
|
63
|
+
/^zxcvbn/i,
|
|
64
|
+
];
|
|
65
|
+
export const commonSecretsPlugin = {
|
|
66
|
+
id: "common-secrets",
|
|
67
|
+
name: "Common/Weak Secret Detection",
|
|
68
|
+
inputKind: "secret",
|
|
69
|
+
requiresNetwork: false,
|
|
70
|
+
requiredConfigKeys: [],
|
|
71
|
+
isFree: true,
|
|
72
|
+
privacySummary: "No data sent (local only)",
|
|
73
|
+
async check(input, _config) {
|
|
74
|
+
const secret = input;
|
|
75
|
+
// Check against hashed blocklist
|
|
76
|
+
const hash = secret.sha256Hex();
|
|
77
|
+
if (COMMON_SECRET_HASHES.has(hash)) {
|
|
78
|
+
return {
|
|
79
|
+
pluginId: "common-secrets",
|
|
80
|
+
pluginName: "Common/Weak Secret Detection",
|
|
81
|
+
found: true,
|
|
82
|
+
details: "Matches a commonly used password or default credential",
|
|
83
|
+
severity: "critical",
|
|
84
|
+
error: null,
|
|
85
|
+
metadata: { matchType: "blocklist" },
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
// Check placeholder patterns
|
|
89
|
+
const matchesPlaceholder = secret.withString((raw) => {
|
|
90
|
+
const trimmed = raw.trim();
|
|
91
|
+
return PLACEHOLDER_PATTERNS.some((p) => p.test(trimmed));
|
|
92
|
+
});
|
|
93
|
+
if (matchesPlaceholder) {
|
|
94
|
+
return {
|
|
95
|
+
pluginId: "common-secrets",
|
|
96
|
+
pluginName: "Common/Weak Secret Detection",
|
|
97
|
+
found: true,
|
|
98
|
+
details: "Matches a known placeholder or test value pattern",
|
|
99
|
+
severity: "medium",
|
|
100
|
+
error: null,
|
|
101
|
+
metadata: { matchType: "placeholder" },
|
|
102
|
+
};
|
|
103
|
+
}
|
|
104
|
+
// Check sequential/keyboard patterns
|
|
105
|
+
const matchesSequential = secret.withString((raw) => {
|
|
106
|
+
const trimmed = raw.trim();
|
|
107
|
+
return SEQUENTIAL_PATTERNS.some((p) => p.test(trimmed));
|
|
108
|
+
});
|
|
109
|
+
if (matchesSequential) {
|
|
110
|
+
return {
|
|
111
|
+
pluginId: "common-secrets",
|
|
112
|
+
pluginName: "Common/Weak Secret Detection",
|
|
113
|
+
found: true,
|
|
114
|
+
details: "Contains a sequential or keyboard pattern",
|
|
115
|
+
severity: "high",
|
|
116
|
+
error: null,
|
|
117
|
+
metadata: { matchType: "sequential" },
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
return {
|
|
121
|
+
pluginId: "common-secrets",
|
|
122
|
+
pluginName: "Common/Weak Secret Detection",
|
|
123
|
+
found: false,
|
|
124
|
+
details: "Not found in common secrets blocklist",
|
|
125
|
+
severity: "low",
|
|
126
|
+
error: null,
|
|
127
|
+
};
|
|
128
|
+
},
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=common-secrets-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"common-secrets-plugin.js","sourceRoot":"","sources":["../../../src/checks/plugins/common-secrets-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dehashed-plugin.d.ts","sourceRoot":"","sources":["../../../src/checks/plugins/dehashed-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AA4BhD,eAAO,MAAM,cAAc,EAAE,WA+F5B,CAAC"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { sanitizeForTerminal } from "../../core/sanitize.js";
|
|
2
|
+
const DEHASHED_BASE = "https://api.dehashed.com/search";
|
|
3
|
+
const USER_AGENT = "compromising-position/1.0.0";
|
|
4
|
+
export const dehashedPlugin = {
|
|
5
|
+
id: "dehashed",
|
|
6
|
+
name: "DeHashed",
|
|
7
|
+
inputKind: "email",
|
|
8
|
+
requiresNetwork: true,
|
|
9
|
+
requiredConfigKeys: ["DEHASHED_EMAIL", "DEHASHED_API_KEY"],
|
|
10
|
+
isFree: false,
|
|
11
|
+
privacySummary: "Full email -> api.dehashed.com (requires paid API key)",
|
|
12
|
+
async check(input, config) {
|
|
13
|
+
const email = input;
|
|
14
|
+
const dehashedEmail = config.pluginApiKeys["DEHASHED_EMAIL"];
|
|
15
|
+
const apiKey = config.pluginApiKeys["DEHASHED_API_KEY"];
|
|
16
|
+
if (!dehashedEmail || !apiKey) {
|
|
17
|
+
return {
|
|
18
|
+
pluginId: "dehashed",
|
|
19
|
+
pluginName: "DeHashed",
|
|
20
|
+
found: false,
|
|
21
|
+
details: "DeHashed credentials not configured",
|
|
22
|
+
severity: "info",
|
|
23
|
+
error: "Missing DEHASHED_EMAIL and/or DEHASHED_API_KEY",
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
try {
|
|
27
|
+
const credentials = Buffer.from(`${dehashedEmail}:${apiKey}`).toString("base64");
|
|
28
|
+
const response = await fetch(`${DEHASHED_BASE}?query=email:${encodeURIComponent(email)}&size=10`, {
|
|
29
|
+
headers: {
|
|
30
|
+
Accept: "application/json",
|
|
31
|
+
Authorization: `Basic ${credentials}`,
|
|
32
|
+
"User-Agent": USER_AGENT,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
if (!response.ok) {
|
|
36
|
+
const statusText = sanitizeForTerminal(response.statusText);
|
|
37
|
+
return {
|
|
38
|
+
pluginId: "dehashed",
|
|
39
|
+
pluginName: "DeHashed",
|
|
40
|
+
found: false,
|
|
41
|
+
details: `API error: ${response.status} ${statusText}`,
|
|
42
|
+
severity: "info",
|
|
43
|
+
error: `DeHashed API returned ${response.status}: ${statusText}`,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const data = (await response.json());
|
|
47
|
+
const found = data.total > 0;
|
|
48
|
+
// Count unique databases
|
|
49
|
+
const databases = new Set((data.entries ?? []).map((e) => e.database_name).filter(Boolean));
|
|
50
|
+
let severity = "low";
|
|
51
|
+
if (data.total > 10) {
|
|
52
|
+
severity = "critical";
|
|
53
|
+
}
|
|
54
|
+
else if (data.total > 0) {
|
|
55
|
+
severity = "high";
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
pluginId: "dehashed",
|
|
59
|
+
pluginName: "DeHashed",
|
|
60
|
+
found,
|
|
61
|
+
details: found
|
|
62
|
+
? `Found ${data.total} record(s) across ${databases.size} database(s)`
|
|
63
|
+
: "Not found in DeHashed database",
|
|
64
|
+
severity,
|
|
65
|
+
error: null,
|
|
66
|
+
metadata: {
|
|
67
|
+
total: data.total,
|
|
68
|
+
uniqueDatabases: databases.size,
|
|
69
|
+
balance: data.balance,
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (err) {
|
|
74
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
75
|
+
return {
|
|
76
|
+
pluginId: "dehashed",
|
|
77
|
+
pluginName: "DeHashed",
|
|
78
|
+
found: false,
|
|
79
|
+
details: `Network error: ${sanitizeForTerminal(message)}`,
|
|
80
|
+
severity: "info",
|
|
81
|
+
error: sanitizeForTerminal(message),
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
};
|
|
86
|
+
//# sourceMappingURL=dehashed-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dehashed-plugin.js","sourceRoot":"","sources":["../../../src/checks/plugins/dehashed-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailrep-plugin.d.ts","sourceRoot":"","sources":["../../../src/checks/plugins/emailrep-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAsChD,eAAO,MAAM,cAAc,EAAE,WAoG5B,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { sanitizeForTerminal } from "../../core/sanitize.js";
|
|
2
|
+
const EMAILREP_BASE = "https://emailrep.io";
|
|
3
|
+
const USER_AGENT = "compromising-position/1.0.0";
|
|
4
|
+
export const emailRepPlugin = {
|
|
5
|
+
id: "emailrep",
|
|
6
|
+
name: "EmailRep.io",
|
|
7
|
+
inputKind: "email",
|
|
8
|
+
requiresNetwork: true,
|
|
9
|
+
requiredConfigKeys: [],
|
|
10
|
+
isFree: true,
|
|
11
|
+
privacySummary: "Full email -> emailrep.io (free, 100/day)",
|
|
12
|
+
async check(input, config) {
|
|
13
|
+
const email = input;
|
|
14
|
+
const apiKey = config.pluginApiKeys["EMAILREP_API_KEY"];
|
|
15
|
+
try {
|
|
16
|
+
const headers = {
|
|
17
|
+
"User-Agent": USER_AGENT,
|
|
18
|
+
Accept: "application/json",
|
|
19
|
+
};
|
|
20
|
+
if (apiKey) {
|
|
21
|
+
headers["Key"] = apiKey;
|
|
22
|
+
}
|
|
23
|
+
const response = await fetch(`${EMAILREP_BASE}/${encodeURIComponent(email)}`, {
|
|
24
|
+
headers,
|
|
25
|
+
});
|
|
26
|
+
if (!response.ok) {
|
|
27
|
+
const statusText = sanitizeForTerminal(response.statusText);
|
|
28
|
+
return {
|
|
29
|
+
pluginId: "emailrep",
|
|
30
|
+
pluginName: "EmailRep.io",
|
|
31
|
+
found: false,
|
|
32
|
+
details: `API error: ${response.status} ${statusText}`,
|
|
33
|
+
severity: "info",
|
|
34
|
+
error: `EmailRep API returned ${response.status}: ${statusText}`,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const data = (await response.json());
|
|
38
|
+
const findings = [];
|
|
39
|
+
if (data.details.credentials_leaked) {
|
|
40
|
+
findings.push("credentials leaked");
|
|
41
|
+
}
|
|
42
|
+
if (data.details.data_breach) {
|
|
43
|
+
findings.push("found in data breach");
|
|
44
|
+
}
|
|
45
|
+
if (data.details.dark_web_appearance) {
|
|
46
|
+
findings.push("dark web appearance");
|
|
47
|
+
}
|
|
48
|
+
if (data.details.malicious_activity) {
|
|
49
|
+
findings.push("malicious activity detected");
|
|
50
|
+
}
|
|
51
|
+
const found = findings.length > 0;
|
|
52
|
+
let severity = "low";
|
|
53
|
+
if (data.details.credentials_leaked_recent || data.details.malicious_activity_recent) {
|
|
54
|
+
severity = "critical";
|
|
55
|
+
}
|
|
56
|
+
else if (data.details.credentials_leaked || data.details.dark_web_appearance) {
|
|
57
|
+
severity = "high";
|
|
58
|
+
}
|
|
59
|
+
else if (data.details.data_breach || data.suspicious) {
|
|
60
|
+
severity = "medium";
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
pluginId: "emailrep",
|
|
64
|
+
pluginName: "EmailRep.io",
|
|
65
|
+
found,
|
|
66
|
+
details: found
|
|
67
|
+
? `Reputation: ${data.reputation} — ${findings.join(", ")}`
|
|
68
|
+
: `Reputation: ${data.reputation} — no exposure found`,
|
|
69
|
+
severity,
|
|
70
|
+
error: null,
|
|
71
|
+
metadata: {
|
|
72
|
+
reputation: data.reputation,
|
|
73
|
+
suspicious: data.suspicious,
|
|
74
|
+
references: data.references,
|
|
75
|
+
credentialsLeaked: data.details.credentials_leaked,
|
|
76
|
+
darkWebAppearance: data.details.dark_web_appearance,
|
|
77
|
+
dataBreach: data.details.data_breach,
|
|
78
|
+
profiles: data.details.profiles,
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
catch (err) {
|
|
83
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
84
|
+
return {
|
|
85
|
+
pluginId: "emailrep",
|
|
86
|
+
pluginName: "EmailRep.io",
|
|
87
|
+
found: false,
|
|
88
|
+
details: `Network error: ${sanitizeForTerminal(message)}`,
|
|
89
|
+
severity: "info",
|
|
90
|
+
error: sanitizeForTerminal(message),
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
//# sourceMappingURL=emailrep-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emailrep-plugin.js","sourceRoot":"","sources":["../../../src/checks/plugins/emailrep-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitguardian-hsl-plugin.d.ts","sourceRoot":"","sources":["../../../src/checks/plugins/gitguardian-hsl-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAYhD,eAAO,MAAM,oBAAoB,EAAE,WAkFlC,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { sanitizeForTerminal } from "../../core/sanitize.js";
|
|
2
|
+
const GITGUARDIAN_BASE = "https://api.gitguardian.com/v1";
|
|
3
|
+
const USER_AGENT = "compromising-position/1.0.0";
|
|
4
|
+
export const gitGuardianHslPlugin = {
|
|
5
|
+
id: "gitguardian-hsl",
|
|
6
|
+
name: "GitGuardian HasMySecretLeaked",
|
|
7
|
+
inputKind: "secret",
|
|
8
|
+
requiresNetwork: true,
|
|
9
|
+
requiredConfigKeys: ["GITGUARDIAN_API_TOKEN"],
|
|
10
|
+
isFree: false,
|
|
11
|
+
privacySummary: "SHA-256 hash -> api.gitguardian.com (requires API token)",
|
|
12
|
+
async check(input, config) {
|
|
13
|
+
const secret = input;
|
|
14
|
+
const apiToken = config.pluginApiKeys["GITGUARDIAN_API_TOKEN"];
|
|
15
|
+
if (!apiToken) {
|
|
16
|
+
return {
|
|
17
|
+
pluginId: "gitguardian-hsl",
|
|
18
|
+
pluginName: "GitGuardian HasMySecretLeaked",
|
|
19
|
+
found: false,
|
|
20
|
+
details: "GitGuardian API token not configured",
|
|
21
|
+
severity: "info",
|
|
22
|
+
error: "Missing GITGUARDIAN_API_TOKEN",
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
// Only send the SHA-256 hash, not the actual secret
|
|
26
|
+
const hash = secret.sha256Hex();
|
|
27
|
+
try {
|
|
28
|
+
const response = await fetch(`${GITGUARDIAN_BASE}/secret/has_secret_leaked`, {
|
|
29
|
+
method: "POST",
|
|
30
|
+
headers: {
|
|
31
|
+
"Content-Type": "application/json",
|
|
32
|
+
Authorization: `Token ${apiToken}`,
|
|
33
|
+
"User-Agent": USER_AGENT,
|
|
34
|
+
},
|
|
35
|
+
body: JSON.stringify({ hash }),
|
|
36
|
+
});
|
|
37
|
+
if (!response.ok) {
|
|
38
|
+
const statusText = sanitizeForTerminal(response.statusText);
|
|
39
|
+
return {
|
|
40
|
+
pluginId: "gitguardian-hsl",
|
|
41
|
+
pluginName: "GitGuardian HasMySecretLeaked",
|
|
42
|
+
found: false,
|
|
43
|
+
details: `API error: ${response.status} ${statusText}`,
|
|
44
|
+
severity: "info",
|
|
45
|
+
error: `GitGuardian API returned ${response.status}: ${statusText}`,
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
const data = (await response.json());
|
|
49
|
+
const found = data.matches > 0;
|
|
50
|
+
return {
|
|
51
|
+
pluginId: "gitguardian-hsl",
|
|
52
|
+
pluginName: "GitGuardian HasMySecretLeaked",
|
|
53
|
+
found,
|
|
54
|
+
details: found
|
|
55
|
+
? `Found in ${data.matches} public GitHub repo(s)`
|
|
56
|
+
: "Not found in public GitHub repos",
|
|
57
|
+
severity: found ? "critical" : "low",
|
|
58
|
+
error: null,
|
|
59
|
+
metadata: { matches: data.matches },
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
64
|
+
return {
|
|
65
|
+
pluginId: "gitguardian-hsl",
|
|
66
|
+
pluginName: "GitGuardian HasMySecretLeaked",
|
|
67
|
+
found: false,
|
|
68
|
+
details: `Network error: ${sanitizeForTerminal(message)}`,
|
|
69
|
+
severity: "info",
|
|
70
|
+
error: sanitizeForTerminal(message),
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=gitguardian-hsl-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitguardian-hsl-plugin.js","sourceRoot":"","sources":["../../../src/checks/plugins/gitguardian-hsl-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hibp-email-plugin.d.ts","sourceRoot":"","sources":["../../../src/checks/plugins/hibp-email-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAIhD,eAAO,MAAM,eAAe,EAAE,WAgF7B,CAAC"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { checkHibpEmail } from "../hibp-email.js";
|
|
2
|
+
export const hibpEmailPlugin = {
|
|
3
|
+
id: "hibp-email",
|
|
4
|
+
name: "HIBP Email Breach Check",
|
|
5
|
+
inputKind: "email",
|
|
6
|
+
requiresNetwork: true,
|
|
7
|
+
requiredConfigKeys: ["HIBP_API_KEY"],
|
|
8
|
+
isFree: false,
|
|
9
|
+
privacySummary: "Full email -> haveibeenpwned.com (requires paid API key)",
|
|
10
|
+
async check(input, config) {
|
|
11
|
+
const email = input;
|
|
12
|
+
const apiKey = config.pluginApiKeys["HIBP_API_KEY"] ?? config.hibpApiKey;
|
|
13
|
+
if (!apiKey) {
|
|
14
|
+
return {
|
|
15
|
+
pluginId: "hibp-email",
|
|
16
|
+
pluginName: "HIBP Email Breach Check",
|
|
17
|
+
found: false,
|
|
18
|
+
details: "HIBP API key not configured",
|
|
19
|
+
severity: "info",
|
|
20
|
+
error: "Missing HIBP_API_KEY",
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
const result = await checkHibpEmail(email, apiKey);
|
|
24
|
+
if (result.error) {
|
|
25
|
+
return {
|
|
26
|
+
pluginId: "hibp-email",
|
|
27
|
+
pluginName: "HIBP Email Breach Check",
|
|
28
|
+
found: false,
|
|
29
|
+
details: result.error,
|
|
30
|
+
severity: "info",
|
|
31
|
+
error: result.error,
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
const totalFindings = result.breaches.length +
|
|
35
|
+
result.stealerLogs.length +
|
|
36
|
+
result.pastes.length;
|
|
37
|
+
const found = totalFindings > 0;
|
|
38
|
+
const parts = [];
|
|
39
|
+
if (result.breaches.length > 0) {
|
|
40
|
+
parts.push(`${result.breaches.length} breach(es)`);
|
|
41
|
+
}
|
|
42
|
+
if (result.stealerLogs.length > 0) {
|
|
43
|
+
parts.push(`${result.stealerLogs.length} stealer log(s)`);
|
|
44
|
+
}
|
|
45
|
+
if (result.pastes.length > 0) {
|
|
46
|
+
parts.push(`${result.pastes.length} paste(s)`);
|
|
47
|
+
}
|
|
48
|
+
let severity = "low";
|
|
49
|
+
if (result.stealerLogs.length > 0 || result.breaches.length > 10) {
|
|
50
|
+
severity = "critical";
|
|
51
|
+
}
|
|
52
|
+
else if (result.breaches.length > 0) {
|
|
53
|
+
severity = "high";
|
|
54
|
+
}
|
|
55
|
+
else if (result.pastes.length > 0) {
|
|
56
|
+
severity = "medium";
|
|
57
|
+
}
|
|
58
|
+
return {
|
|
59
|
+
pluginId: "hibp-email",
|
|
60
|
+
pluginName: "HIBP Email Breach Check",
|
|
61
|
+
found,
|
|
62
|
+
details: found ? `Found in: ${parts.join(", ")}` : "No breaches found",
|
|
63
|
+
severity,
|
|
64
|
+
error: null,
|
|
65
|
+
metadata: {
|
|
66
|
+
breachCount: result.breaches.length,
|
|
67
|
+
stealerLogCount: result.stealerLogs.length,
|
|
68
|
+
pasteCount: result.pastes.length,
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
},
|
|
72
|
+
};
|
|
73
|
+
//# sourceMappingURL=hibp-email-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hibp-email-plugin.js","sourceRoot":"","sources":["../../../src/checks/plugins/hibp-email-plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hibp-password-plugin.d.ts","sourceRoot":"","sources":["../../../src/checks/plugins/hibp-password-plugin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAKhD,eAAO,MAAM,kBAAkB,EAAE,WA0ChC,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { checkHibpPassword } from "../hibp-password.js";
|
|
2
|
+
export const hibpPasswordPlugin = {
|
|
3
|
+
id: "hibp-password",
|
|
4
|
+
name: "HIBP Password Check",
|
|
5
|
+
inputKind: "secret",
|
|
6
|
+
requiresNetwork: true,
|
|
7
|
+
requiredConfigKeys: [],
|
|
8
|
+
isFree: true,
|
|
9
|
+
privacySummary: "SHA-1 prefix (5 hex chars) -> api.pwnedpasswords.com",
|
|
10
|
+
async check(input, _config) {
|
|
11
|
+
const secret = input;
|
|
12
|
+
const result = await checkHibpPassword(secret);
|
|
13
|
+
if (result.error) {
|
|
14
|
+
return {
|
|
15
|
+
pluginId: "hibp-password",
|
|
16
|
+
pluginName: "HIBP Password Check",
|
|
17
|
+
found: false,
|
|
18
|
+
details: result.error,
|
|
19
|
+
severity: "info",
|
|
20
|
+
error: result.error,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
return {
|
|
24
|
+
pluginId: "hibp-password",
|
|
25
|
+
pluginName: "HIBP Password Check",
|
|
26
|
+
found: result.found,
|
|
27
|
+
details: result.found
|
|
28
|
+
? `Found in ${result.occurrences.toLocaleString()} breach(es)`
|
|
29
|
+
: "Not found in breach data",
|
|
30
|
+
severity: result.found ? "critical" : "low",
|
|
31
|
+
error: null,
|
|
32
|
+
metadata: {
|
|
33
|
+
occurrences: result.occurrences,
|
|
34
|
+
hashPrefix: result.hashPrefix,
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
//# sourceMappingURL=hibp-password-plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hibp-password-plugin.js","sourceRoot":"","sources":["../../../src/checks/plugins/hibp-password-plugin.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,MAAM,CAAC,MAAM,kBAAkB,GAAgB;IAC7C,EAAE,EAAE,eAAe;IACnB,IAAI,EAAE,qBAAqB;IAC3B,SAAS,EAAE,QAAQ;IACnB,eAAe,EAAE,IAAI;IACrB,kBAAkB,EAAE,EAAE;IACtB,MAAM,EAAE,IAAI;IACZ,cAAc,EAAE,sDAAsD;IAEtE,KAAK,CAAC,KAAK,CACT,KAA4B,EAC5B,OAAkB;QAElB,MAAM,MAAM,GAAG,KAAqB,CAAC;QACrC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,MAAM,CAAC,CAAC;QAE/C,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO;gBACL,QAAQ,EAAE,eAAe;gBACzB,UAAU,EAAE,qBAAqB;gBACjC,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,MAAM,CAAC,KAAK;gBACrB,QAAQ,EAAE,MAAM;gBAChB,KAAK,EAAE,MAAM,CAAC,KAAK;aACpB,CAAC;QACJ,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,eAAe;YACzB,UAAU,EAAE,qBAAqB;YACjC,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,OAAO,EAAE,MAAM,CAAC,KAAK;gBACnB,CAAC,CAAC,YAAY,MAAM,CAAC,WAAW,CAAC,cAAc,EAAE,aAAa;gBAC9D,CAAC,CAAC,0BAA0B;YAC9B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK;YAC3C,KAAK,EAAE,IAAI;YACX,QAAQ,EAAE;gBACR,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,UAAU,EAAE,MAAM,CAAC,UAAU;aAC9B;SACF,CAAC;IACJ,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intelx-plugin.d.ts","sourceRoot":"","sources":["../../../src/checks/plugins/intelx-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAyBhD,eAAO,MAAM,YAAY,EAAE,WA8H1B,CAAC"}
|