@q32/signal-scanner 0.1.0 → 0.2.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/COPYING +674 -0
- package/COPYING.LESSER +165 -0
- package/README.md +57 -9
- package/dist/cli.d.ts +26 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +592 -0
- package/dist/cli.js.map +1 -0
- package/dist/dynamic.d.ts +43 -0
- package/dist/dynamic.d.ts.map +1 -0
- package/{src/dynamic.ts → dist/dynamic.js} +133 -156
- package/dist/dynamic.js.map +1 -0
- package/dist/feeds.d.ts +66 -0
- package/dist/feeds.d.ts.map +1 -0
- package/dist/feeds.js +259 -0
- package/dist/feeds.js.map +1 -0
- package/dist/index.d.ts +110 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1251 -0
- package/dist/index.js.map +1 -0
- package/dist/intel.d.ts +72 -0
- package/dist/intel.d.ts.map +1 -0
- package/dist/intel.js +480 -0
- package/dist/intel.js.map +1 -0
- package/dist/node-tls.d.ts +8 -0
- package/dist/node-tls.d.ts.map +1 -0
- package/dist/node-tls.js +48 -0
- package/dist/node-tls.js.map +1 -0
- package/dist/render-isolate/entry.d.ts +2 -0
- package/dist/render-isolate/entry.d.ts.map +1 -0
- package/dist/render-isolate/entry.js +3 -0
- package/dist/render-isolate/entry.js.map +1 -0
- package/dist/render-isolate/polyfills.d.ts +2 -0
- package/dist/render-isolate/polyfills.d.ts.map +1 -0
- package/dist/render-isolate/polyfills.js +41 -0
- package/dist/render-isolate/polyfills.js.map +1 -0
- package/dist/render-isolate/run.d.ts +3 -0
- package/dist/render-isolate/run.d.ts.map +1 -0
- package/dist/render-isolate/run.js +88 -0
- package/dist/render-isolate/run.js.map +1 -0
- package/dist/render.d.ts +26 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js +248 -0
- package/dist/render.js.map +1 -0
- package/dist/rules/packs/binary.d.ts +4 -0
- package/dist/rules/packs/binary.d.ts.map +1 -0
- package/dist/rules/packs/binary.js +101 -0
- package/dist/rules/packs/binary.js.map +1 -0
- package/dist/rules/packs/css.d.ts +3 -0
- package/dist/rules/packs/css.d.ts.map +1 -0
- package/dist/rules/packs/css.js +43 -0
- package/dist/rules/packs/css.js.map +1 -0
- package/dist/rules/packs/decoders.d.ts +3 -0
- package/dist/rules/packs/decoders.d.ts.map +1 -0
- package/dist/rules/packs/decoders.js +46 -0
- package/dist/rules/packs/decoders.js.map +1 -0
- package/dist/rules/packs/html.d.ts +4 -0
- package/dist/rules/packs/html.d.ts.map +1 -0
- package/dist/rules/packs/html.js +227 -0
- package/dist/rules/packs/html.js.map +1 -0
- package/dist/rules/packs/index.d.ts +24 -0
- package/dist/rules/packs/index.d.ts.map +1 -0
- package/dist/rules/packs/index.js +75 -0
- package/dist/rules/packs/index.js.map +1 -0
- package/dist/rules/packs/script-risk.d.ts +4 -0
- package/dist/rules/packs/script-risk.d.ts.map +1 -0
- package/dist/rules/packs/script-risk.js +231 -0
- package/dist/rules/packs/script-risk.js.map +1 -0
- package/dist/rules/packs/source-code.d.ts +3 -0
- package/dist/rules/packs/source-code.d.ts.map +1 -0
- package/dist/rules/packs/source-code.js +179 -0
- package/dist/rules/packs/source-code.js.map +1 -0
- package/dist/rules/packs/urls.d.ts +3 -0
- package/dist/rules/packs/urls.d.ts.map +1 -0
- package/dist/rules/packs/urls.js +123 -0
- package/dist/rules/packs/urls.js.map +1 -0
- package/dist/rules/types.d.ts +34 -0
- package/dist/rules/types.d.ts.map +1 -0
- package/dist/rules/types.js +2 -0
- package/dist/rules/types.js.map +1 -0
- package/package.json +33 -18
- package/scripts/check-coverage.ts +0 -33
- package/scripts/eval.ts +0 -311
- package/scripts/render-isolate/entry.ts +0 -2
- package/scripts/render-isolate/polyfills.ts +0 -33
- package/scripts/render-isolate/run.ts +0 -63
- package/scripts/scan.ts +0 -612
- package/src/feeds.ts +0 -334
- package/src/index.ts +0 -1366
- package/src/intel.ts +0 -561
- package/src/node-tls.ts +0 -55
- package/src/render.ts +0 -233
- package/src/rules/packs/binary.ts +0 -103
- package/src/rules/packs/css.ts +0 -44
- package/src/rules/packs/decoders.ts +0 -47
- package/src/rules/packs/html.ts +0 -255
- package/src/rules/packs/index.ts +0 -76
- package/src/rules/packs/script-risk.ts +0 -236
- package/src/rules/packs/source-code.ts +0 -180
- package/src/rules/packs/urls.ts +0 -138
- package/src/rules/types.ts +0 -56
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
export const htmlRules = {
|
|
2
|
+
external_script_from_unrelated_domain: {
|
|
3
|
+
id: "external_script_from_unrelated_domain",
|
|
4
|
+
pack: "script-risk",
|
|
5
|
+
severity: "medium",
|
|
6
|
+
confidence: "medium",
|
|
7
|
+
title: "External script from unrelated domain",
|
|
8
|
+
description: "HTML loads a script from an off-site domain.",
|
|
9
|
+
locationType: "url",
|
|
10
|
+
score: { base: 8, tags: ["script", "url"], repeatMultiplier: 0.1, maxRepeats: 3 }
|
|
11
|
+
},
|
|
12
|
+
mixed_content_script: {
|
|
13
|
+
id: "mixed_content_script",
|
|
14
|
+
pack: "script-risk",
|
|
15
|
+
severity: "medium",
|
|
16
|
+
confidence: "high",
|
|
17
|
+
title: "Mixed-content script",
|
|
18
|
+
description: "HTTPS page loads a script over HTTP.",
|
|
19
|
+
locationType: "url",
|
|
20
|
+
// A real injection vector, but a hygiene issue on its own (browsers block it)
|
|
21
|
+
// — shouldn't convict a site as malicious without corroborating signal.
|
|
22
|
+
score: { base: 30, tags: ["script", "url"] }
|
|
23
|
+
},
|
|
24
|
+
hidden_iframe_off_origin: {
|
|
25
|
+
id: "hidden_iframe_off_origin",
|
|
26
|
+
pack: "phishing",
|
|
27
|
+
severity: "high",
|
|
28
|
+
confidence: "high",
|
|
29
|
+
title: "Hidden off-origin iframe",
|
|
30
|
+
description: "HTML contains a hidden iframe pointed at an off-origin URL.",
|
|
31
|
+
locationType: "url",
|
|
32
|
+
score: { base: 70, tags: ["phishing", "url"] }
|
|
33
|
+
},
|
|
34
|
+
meta_refresh_external: {
|
|
35
|
+
id: "meta_refresh_external",
|
|
36
|
+
pack: "redirects",
|
|
37
|
+
severity: "medium",
|
|
38
|
+
confidence: "medium",
|
|
39
|
+
title: "Meta refresh to external URL",
|
|
40
|
+
description: "HTML redirects with a meta refresh to an off-site URL.",
|
|
41
|
+
locationType: "url",
|
|
42
|
+
score: { base: 25, tags: ["redirect", "url"] }
|
|
43
|
+
},
|
|
44
|
+
password_form_without_https: {
|
|
45
|
+
id: "password_form_without_https",
|
|
46
|
+
pack: "phishing",
|
|
47
|
+
severity: "high",
|
|
48
|
+
confidence: "high",
|
|
49
|
+
title: "Password form without HTTPS",
|
|
50
|
+
description: "Page contains a password form on an HTTP origin.",
|
|
51
|
+
locationType: "html",
|
|
52
|
+
score: { base: 70, tags: ["credential", "phishing"] }
|
|
53
|
+
},
|
|
54
|
+
credential_form_posts_off_origin: {
|
|
55
|
+
id: "credential_form_posts_off_origin",
|
|
56
|
+
pack: "phishing",
|
|
57
|
+
severity: "high",
|
|
58
|
+
confidence: "high",
|
|
59
|
+
title: "Credential form posts off origin",
|
|
60
|
+
description: "A form with a password field submits to an off-origin URL.",
|
|
61
|
+
locationType: "url",
|
|
62
|
+
score: { base: 82, tags: ["credential", "phishing", "url"] }
|
|
63
|
+
},
|
|
64
|
+
card_fields_plus_external_script: {
|
|
65
|
+
id: "card_fields_plus_external_script",
|
|
66
|
+
pack: "payment",
|
|
67
|
+
severity: "high",
|
|
68
|
+
confidence: "medium",
|
|
69
|
+
title: "Payment fields with external resources",
|
|
70
|
+
description: "Page contains payment fields and off-site resources.",
|
|
71
|
+
locationType: "html",
|
|
72
|
+
score: { base: 72, tags: ["payment", "script", "url"] }
|
|
73
|
+
},
|
|
74
|
+
excessive_external_scripts_on_login_page: {
|
|
75
|
+
id: "excessive_external_scripts_on_login_page",
|
|
76
|
+
pack: "phishing",
|
|
77
|
+
severity: "medium",
|
|
78
|
+
confidence: "medium",
|
|
79
|
+
title: "Excessive external scripts on login/payment page",
|
|
80
|
+
description: "Login or payment page loads many off-site scripts.",
|
|
81
|
+
locationType: "aggregate",
|
|
82
|
+
score: { base: 14, tags: ["phishing", "script"] }
|
|
83
|
+
},
|
|
84
|
+
login_page_with_punycode_links: {
|
|
85
|
+
id: "login_page_with_punycode_links",
|
|
86
|
+
pack: "phishing",
|
|
87
|
+
severity: "high",
|
|
88
|
+
confidence: "high",
|
|
89
|
+
title: "Login page with punycode links",
|
|
90
|
+
description: "Login-like page references punycode URLs.",
|
|
91
|
+
locationType: "aggregate",
|
|
92
|
+
score: { base: 76, tags: ["phishing", "url"] }
|
|
93
|
+
},
|
|
94
|
+
credential_ui_rendered_as_image: {
|
|
95
|
+
id: "credential_ui_rendered_as_image",
|
|
96
|
+
pack: "phishing",
|
|
97
|
+
severity: "medium",
|
|
98
|
+
confidence: "high",
|
|
99
|
+
title: "Credential UI rendered as image",
|
|
100
|
+
description: "Page model or markup references a screenshot/image that appears to contain a login or credential form.",
|
|
101
|
+
locationType: "html",
|
|
102
|
+
score: { base: 34, tags: ["credential", "phishing"] }
|
|
103
|
+
},
|
|
104
|
+
crypto_wallet_login_language: {
|
|
105
|
+
id: "crypto_wallet_login_language",
|
|
106
|
+
pack: "phishing",
|
|
107
|
+
severity: "medium",
|
|
108
|
+
confidence: "high",
|
|
109
|
+
title: "Crypto wallet login language",
|
|
110
|
+
description: "Page model or markup contains crypto/wallet language in login, account, or access context.",
|
|
111
|
+
locationType: "html",
|
|
112
|
+
score: { base: 22, tags: ["phishing", "wallet"] }
|
|
113
|
+
},
|
|
114
|
+
crypto_trading_landing_language: {
|
|
115
|
+
id: "crypto_trading_landing_language",
|
|
116
|
+
pack: "phishing",
|
|
117
|
+
severity: "low",
|
|
118
|
+
confidence: "medium",
|
|
119
|
+
title: "Crypto or DeFi trading landing language",
|
|
120
|
+
description: "Page model or markup contains multiple crypto, DeFi, exchange, swap, trading, or liquidity terms.",
|
|
121
|
+
locationType: "html",
|
|
122
|
+
score: { base: 6, tags: ["phishing", "wallet"] }
|
|
123
|
+
},
|
|
124
|
+
seo_trademark_stuffing: {
|
|
125
|
+
id: "seo_trademark_stuffing",
|
|
126
|
+
pack: "phishing",
|
|
127
|
+
severity: "high",
|
|
128
|
+
confidence: "medium",
|
|
129
|
+
title: "SEO trademark stuffing",
|
|
130
|
+
description: "Page title or SEO model overuses trademark symbols in a way commonly seen on impersonation landing pages.",
|
|
131
|
+
locationType: "html",
|
|
132
|
+
score: { base: 64, tags: ["phishing", "seo"] }
|
|
133
|
+
},
|
|
134
|
+
credential_form_on_suspicious_host: {
|
|
135
|
+
id: "credential_form_on_suspicious_host",
|
|
136
|
+
pack: "phishing",
|
|
137
|
+
severity: "high",
|
|
138
|
+
confidence: "high",
|
|
139
|
+
title: "Credential form on suspicious host",
|
|
140
|
+
description: "Page contains credential fields on a generated, shared-hosting, suspicious-path, or redirected host.",
|
|
141
|
+
locationType: "html",
|
|
142
|
+
score: { base: 72, tags: ["credential", "hosting", "phishing"] }
|
|
143
|
+
},
|
|
144
|
+
brand_impersonation_content: {
|
|
145
|
+
id: "brand_impersonation_content",
|
|
146
|
+
pack: "phishing",
|
|
147
|
+
severity: "high",
|
|
148
|
+
confidence: "high",
|
|
149
|
+
title: "Page mimics a brand and captures credentials",
|
|
150
|
+
description: "Page content prominently references a well-known brand and presents a credential field, but is served from a domain that does not belong to that brand — the core credential-phishing pattern, independent of the URL.",
|
|
151
|
+
locationType: "html",
|
|
152
|
+
score: { base: 68, tags: ["credential", "phishing"] }
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
export const htmlTechnologyRules = {
|
|
156
|
+
legacy_jquery_reference: {
|
|
157
|
+
id: "legacy_jquery_reference",
|
|
158
|
+
pack: "dependency-fingerprint",
|
|
159
|
+
severity: "low",
|
|
160
|
+
confidence: "medium",
|
|
161
|
+
title: "Legacy jQuery reference",
|
|
162
|
+
description: "A script URL or source text references a legacy jQuery major version.",
|
|
163
|
+
locationType: "url",
|
|
164
|
+
score: { base: 4, tags: ["dependency"] }
|
|
165
|
+
},
|
|
166
|
+
legacy_angularjs_reference: {
|
|
167
|
+
id: "legacy_angularjs_reference",
|
|
168
|
+
pack: "dependency-fingerprint",
|
|
169
|
+
severity: "low",
|
|
170
|
+
confidence: "medium",
|
|
171
|
+
title: "Legacy AngularJS reference",
|
|
172
|
+
description: "A script URL or source text references AngularJS 1.x.",
|
|
173
|
+
locationType: "url",
|
|
174
|
+
score: { base: 6, tags: ["dependency"] }
|
|
175
|
+
},
|
|
176
|
+
legacy_bootstrap_reference: {
|
|
177
|
+
id: "legacy_bootstrap_reference",
|
|
178
|
+
pack: "dependency-fingerprint",
|
|
179
|
+
severity: "low",
|
|
180
|
+
confidence: "medium",
|
|
181
|
+
title: "Legacy Bootstrap reference",
|
|
182
|
+
description: "A script URL or source text references Bootstrap 3.x.",
|
|
183
|
+
locationType: "url",
|
|
184
|
+
score: { base: 4, tags: ["dependency"] }
|
|
185
|
+
},
|
|
186
|
+
legacy_lodash_reference: {
|
|
187
|
+
id: "legacy_lodash_reference",
|
|
188
|
+
pack: "dependency-fingerprint",
|
|
189
|
+
severity: "low",
|
|
190
|
+
confidence: "medium",
|
|
191
|
+
title: "Legacy lodash reference",
|
|
192
|
+
description: "A script URL or source text references lodash versions commonly covered by dependency scanners.",
|
|
193
|
+
locationType: "url",
|
|
194
|
+
score: { base: 4, tags: ["dependency"] }
|
|
195
|
+
},
|
|
196
|
+
wordpress_surface_reference: {
|
|
197
|
+
id: "wordpress_surface_reference",
|
|
198
|
+
pack: "technology-fingerprint",
|
|
199
|
+
severity: "info",
|
|
200
|
+
confidence: "medium",
|
|
201
|
+
title: "WordPress surface reference",
|
|
202
|
+
description: "HTML references common WordPress paths or generator metadata.",
|
|
203
|
+
locationType: "html",
|
|
204
|
+
score: { base: 2, tags: ["technology"] }
|
|
205
|
+
},
|
|
206
|
+
drupal_surface_reference: {
|
|
207
|
+
id: "drupal_surface_reference",
|
|
208
|
+
pack: "technology-fingerprint",
|
|
209
|
+
severity: "info",
|
|
210
|
+
confidence: "medium",
|
|
211
|
+
title: "Drupal surface reference",
|
|
212
|
+
description: "HTML or script text references common Drupal surface fingerprints.",
|
|
213
|
+
locationType: "html",
|
|
214
|
+
score: { base: 2, tags: ["technology"] }
|
|
215
|
+
},
|
|
216
|
+
phpmyadmin_surface_reference: {
|
|
217
|
+
id: "phpmyadmin_surface_reference",
|
|
218
|
+
pack: "technology-fingerprint",
|
|
219
|
+
severity: "info",
|
|
220
|
+
confidence: "medium",
|
|
221
|
+
title: "phpMyAdmin surface reference",
|
|
222
|
+
description: "HTML references common phpMyAdmin surface fingerprints.",
|
|
223
|
+
locationType: "html",
|
|
224
|
+
score: { base: 8, tags: ["technology"] }
|
|
225
|
+
}
|
|
226
|
+
};
|
|
227
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../../src/rules/packs/html.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export { binaryRules, binaryStringRules } from "./binary.js";
|
|
2
|
+
export { cssRules } from "./css.js";
|
|
3
|
+
export { decodedArtifactRules } from "./decoders.js";
|
|
4
|
+
export { htmlRules } from "./html.js";
|
|
5
|
+
export { htmlTechnologyRules } from "./html.js";
|
|
6
|
+
export { scriptCompositeRules, scriptRiskRules } from "./script-risk.js";
|
|
7
|
+
export { sourceCodeRules } from "./source-code.js";
|
|
8
|
+
export { urlRules } from "./urls.js";
|
|
9
|
+
export declare const rulePacks: {
|
|
10
|
+
readonly phishing: readonly [import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition];
|
|
11
|
+
readonly redirects: readonly [import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, ...import("../types.js").PatternRule[]];
|
|
12
|
+
readonly "url-risk": readonly [import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition];
|
|
13
|
+
readonly "technology-fingerprint": readonly [import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition];
|
|
14
|
+
readonly "dependency-fingerprint": readonly [import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, import("../types.js").RuleDefinition];
|
|
15
|
+
readonly "script-risk": readonly [import("../types.js").RuleDefinition, import("../types.js").RuleDefinition, ...import("../types.js").PatternRule[]];
|
|
16
|
+
readonly obfuscation: readonly [...(import("../types.js").PatternRule | import("../types.js").RuleDefinition)[], import("../types.js").RuleDefinition, import("../types.js").RuleDefinition];
|
|
17
|
+
readonly exfiltration: readonly [...import("../types.js").PatternRule[], import("../types.js").RuleDefinition];
|
|
18
|
+
readonly wallet: import("../types.js").PatternRule[];
|
|
19
|
+
readonly payment: readonly [import("../types.js").RuleDefinition, import("../types.js").RuleDefinition];
|
|
20
|
+
readonly "seo-spam": readonly [import("../types.js").RuleDefinition];
|
|
21
|
+
readonly "source-code": import("../types.js").PatternRule[];
|
|
22
|
+
readonly "binary-static": readonly (import("../types.js").PatternRule | import("../types.js").RuleDefinition)[];
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/packs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAUrC,eAAO,MAAM,SAAS;;;;;;;;;;;;;;CA0DZ,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export { binaryRules, binaryStringRules } from "./binary.js";
|
|
2
|
+
export { cssRules } from "./css.js";
|
|
3
|
+
export { decodedArtifactRules } from "./decoders.js";
|
|
4
|
+
export { htmlRules } from "./html.js";
|
|
5
|
+
export { htmlTechnologyRules } from "./html.js";
|
|
6
|
+
export { scriptCompositeRules, scriptRiskRules } from "./script-risk.js";
|
|
7
|
+
export { sourceCodeRules } from "./source-code.js";
|
|
8
|
+
export { urlRules } from "./urls.js";
|
|
9
|
+
import { binaryRules, binaryStringRules } from "./binary.js";
|
|
10
|
+
import { cssRules } from "./css.js";
|
|
11
|
+
import { decodedArtifactRules } from "./decoders.js";
|
|
12
|
+
import { htmlRules, htmlTechnologyRules } from "./html.js";
|
|
13
|
+
import { scriptCompositeRules, scriptRiskRules } from "./script-risk.js";
|
|
14
|
+
import { sourceCodeRules } from "./source-code.js";
|
|
15
|
+
import { urlRules } from "./urls.js";
|
|
16
|
+
export const rulePacks = {
|
|
17
|
+
phishing: [
|
|
18
|
+
htmlRules.credential_form_posts_off_origin,
|
|
19
|
+
htmlRules.password_form_without_https,
|
|
20
|
+
htmlRules.hidden_iframe_off_origin,
|
|
21
|
+
htmlRules.excessive_external_scripts_on_login_page,
|
|
22
|
+
htmlRules.login_page_with_punycode_links,
|
|
23
|
+
htmlRules.credential_ui_rendered_as_image,
|
|
24
|
+
htmlRules.crypto_wallet_login_language,
|
|
25
|
+
htmlRules.crypto_trading_landing_language,
|
|
26
|
+
htmlRules.seo_trademark_stuffing,
|
|
27
|
+
htmlRules.credential_form_on_suspicious_host,
|
|
28
|
+
htmlRules.brand_impersonation_content,
|
|
29
|
+
urlRules.punycode_login_url,
|
|
30
|
+
urlRules.brand_impersonation_url
|
|
31
|
+
],
|
|
32
|
+
redirects: [htmlRules.meta_refresh_external, urlRules.redirect_to_url_shortener, urlRules.final_url_offsite_redirect, ...scriptRiskRules.filter((rule) => rule.pack === "redirects")],
|
|
33
|
+
"url-risk": [
|
|
34
|
+
urlRules.private_ip_url,
|
|
35
|
+
urlRules.ip_literal_url,
|
|
36
|
+
urlRules.suspicious_tld_url,
|
|
37
|
+
urlRules.download_like_external_url,
|
|
38
|
+
urlRules.malware_download_like_url,
|
|
39
|
+
urlRules.shared_hosting_subdomain_url,
|
|
40
|
+
urlRules.brand_impersonation_url,
|
|
41
|
+
urlRules.generated_landing_url
|
|
42
|
+
],
|
|
43
|
+
"technology-fingerprint": [
|
|
44
|
+
htmlTechnologyRules.wordpress_surface_reference,
|
|
45
|
+
htmlTechnologyRules.drupal_surface_reference,
|
|
46
|
+
htmlTechnologyRules.phpmyadmin_surface_reference
|
|
47
|
+
],
|
|
48
|
+
"dependency-fingerprint": [
|
|
49
|
+
htmlTechnologyRules.legacy_jquery_reference,
|
|
50
|
+
htmlTechnologyRules.legacy_angularjs_reference,
|
|
51
|
+
htmlTechnologyRules.legacy_bootstrap_reference,
|
|
52
|
+
htmlTechnologyRules.legacy_lodash_reference
|
|
53
|
+
],
|
|
54
|
+
"script-risk": [
|
|
55
|
+
htmlRules.external_script_from_unrelated_domain,
|
|
56
|
+
htmlRules.mixed_content_script,
|
|
57
|
+
...scriptRiskRules.filter((rule) => rule.pack === "script-risk")
|
|
58
|
+
],
|
|
59
|
+
obfuscation: [
|
|
60
|
+
...Object.values(decodedArtifactRules),
|
|
61
|
+
...scriptRiskRules.filter((rule) => rule.pack === "obfuscation"),
|
|
62
|
+
scriptCompositeRules.decoded_dynamic_execution,
|
|
63
|
+
cssRules.unicode_bidi_trick
|
|
64
|
+
],
|
|
65
|
+
exfiltration: [
|
|
66
|
+
...scriptRiskRules.filter((rule) => rule.pack === "exfiltration"),
|
|
67
|
+
scriptCompositeRules.credential_exfil_candidate
|
|
68
|
+
],
|
|
69
|
+
wallet: scriptRiskRules.filter((rule) => rule.pack === "wallet"),
|
|
70
|
+
payment: [htmlRules.card_fields_plus_external_script, scriptCompositeRules.payment_input_event_hooks],
|
|
71
|
+
"seo-spam": [cssRules.hidden_link_cluster],
|
|
72
|
+
"source-code": sourceCodeRules,
|
|
73
|
+
"binary-static": [...Object.values(binaryRules), ...binaryStringRules]
|
|
74
|
+
};
|
|
75
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/packs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE;QACR,SAAS,CAAC,gCAAgC;QAC1C,SAAS,CAAC,2BAA2B;QACrC,SAAS,CAAC,wBAAwB;QAClC,SAAS,CAAC,wCAAwC;QAClD,SAAS,CAAC,8BAA8B;QACxC,SAAS,CAAC,+BAA+B;QACzC,SAAS,CAAC,4BAA4B;QACtC,SAAS,CAAC,+BAA+B;QACzC,SAAS,CAAC,sBAAsB;QAChC,SAAS,CAAC,kCAAkC;QAC5C,SAAS,CAAC,2BAA2B;QACrC,QAAQ,CAAC,kBAAkB;QAC3B,QAAQ,CAAC,uBAAuB;KACjC;IACD,SAAS,EAAE,CAAC,SAAS,CAAC,qBAAqB,EAAE,QAAQ,CAAC,yBAAyB,EAAE,QAAQ,CAAC,0BAA0B,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IACrL,UAAU,EAAE;QACV,QAAQ,CAAC,cAAc;QACvB,QAAQ,CAAC,cAAc;QACvB,QAAQ,CAAC,kBAAkB;QAC3B,QAAQ,CAAC,0BAA0B;QACnC,QAAQ,CAAC,yBAAyB;QAClC,QAAQ,CAAC,4BAA4B;QACrC,QAAQ,CAAC,uBAAuB;QAChC,QAAQ,CAAC,qBAAqB;KAC/B;IACD,wBAAwB,EAAE;QACxB,mBAAmB,CAAC,2BAA2B;QAC/C,mBAAmB,CAAC,wBAAwB;QAC5C,mBAAmB,CAAC,4BAA4B;KACjD;IACD,wBAAwB,EAAE;QACxB,mBAAmB,CAAC,uBAAuB;QAC3C,mBAAmB,CAAC,0BAA0B;QAC9C,mBAAmB,CAAC,0BAA0B;QAC9C,mBAAmB,CAAC,uBAAuB;KAC5C;IACD,aAAa,EAAE;QACb,SAAS,CAAC,qCAAqC;QAC/C,SAAS,CAAC,oBAAoB;QAC9B,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;KACjE;IACD,WAAW,EAAE;QACX,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC;QACtC,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC;QAChE,oBAAoB,CAAC,yBAAyB;QAC9C,QAAQ,CAAC,kBAAkB;KAC5B;IACD,YAAY,EAAE;QACZ,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;QACjE,oBAAoB,CAAC,0BAA0B;KAChD;IACD,MAAM,EAAE,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC;IAChE,OAAO,EAAE,CAAC,SAAS,CAAC,gCAAgC,EAAE,oBAAoB,CAAC,yBAAyB,CAAC;IACrG,UAAU,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC1C,aAAa,EAAE,eAAe;IAC9B,eAAe,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,GAAG,iBAAiB,CAAC;CAC9D,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { PatternRule, RuleDefinition } from "../types.js";
|
|
2
|
+
export declare const scriptRiskRules: PatternRule[];
|
|
3
|
+
export declare const scriptCompositeRules: Record<"credential_exfil_candidate" | "decoded_dynamic_execution" | "form_action_changed_by_javascript" | "wallet_api_plus_external_beacon" | "payment_input_event_hooks", RuleDefinition>;
|
|
4
|
+
//# sourceMappingURL=script-risk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-risk.d.ts","sourceRoot":"","sources":["../../../src/rules/packs/script-risk.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D,eAAO,MAAM,eAAe,EAAE,WAAW,EA4KxC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,MAAM,CACvC,4BAA4B,GAAG,2BAA2B,GAAG,mCAAmC,GAAG,iCAAiC,GAAG,2BAA2B,EAClK,cAAc,CAyDf,CAAC"}
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
export const scriptRiskRules = [
|
|
2
|
+
{
|
|
3
|
+
id: "dynamic_code_execution",
|
|
4
|
+
pack: "script-risk",
|
|
5
|
+
severity: "low",
|
|
6
|
+
confidence: "medium",
|
|
7
|
+
title: "Dynamic code execution",
|
|
8
|
+
description: "JavaScript calls eval().",
|
|
9
|
+
locationType: "javascript",
|
|
10
|
+
pattern: /\beval\s*\(/,
|
|
11
|
+
counter: "dynamic_code_execution",
|
|
12
|
+
// eval() is ubiquitous in legitimate minified bundles; weak signal alone.
|
|
13
|
+
score: { base: 12, tags: ["script"], maxGroup: "dynamic-code" }
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
id: "function_constructor_with_string",
|
|
17
|
+
pack: "script-risk",
|
|
18
|
+
severity: "low",
|
|
19
|
+
confidence: "medium",
|
|
20
|
+
title: "Function constructor with string",
|
|
21
|
+
description: "JavaScript constructs code from a string.",
|
|
22
|
+
locationType: "javascript",
|
|
23
|
+
pattern: /\bnew\s+Function\s*\(/,
|
|
24
|
+
// new Function() is ubiquitous in legitimate minified bundles (framework
|
|
25
|
+
// template compilers, lodash, etc.) — weak signal alone, like eval().
|
|
26
|
+
score: { base: 15, tags: ["script"], maxGroup: "dynamic-code" }
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "string_timer_execution",
|
|
30
|
+
pack: "script-risk",
|
|
31
|
+
severity: "medium",
|
|
32
|
+
confidence: "high",
|
|
33
|
+
title: "String-based timer execution",
|
|
34
|
+
description: "JavaScript passes a string to a timer execution API.",
|
|
35
|
+
locationType: "javascript",
|
|
36
|
+
pattern: /\bset(?:Timeout|Interval)\s*\(\s*['"`]/,
|
|
37
|
+
counter: "dynamic_code_execution",
|
|
38
|
+
score: { base: 24, tags: ["script"], maxGroup: "dynamic-code" }
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
id: "document_write_script",
|
|
42
|
+
pack: "script-risk",
|
|
43
|
+
severity: "low",
|
|
44
|
+
confidence: "high",
|
|
45
|
+
title: "document.write usage",
|
|
46
|
+
description: "JavaScript writes dynamic HTML into the document.",
|
|
47
|
+
locationType: "javascript",
|
|
48
|
+
pattern: /\bdocument\.write\s*\(/,
|
|
49
|
+
score: { base: 8, tags: ["script"] }
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: "innerhtml_script_injection",
|
|
53
|
+
pack: "script-risk",
|
|
54
|
+
severity: "low",
|
|
55
|
+
confidence: "high",
|
|
56
|
+
title: "HTML injection sink",
|
|
57
|
+
description: "JavaScript assigns to an HTML injection sink.",
|
|
58
|
+
locationType: "javascript",
|
|
59
|
+
pattern: /\.(?:innerHTML|outerHTML)\s*=/,
|
|
60
|
+
score: { base: 10, tags: ["script"] }
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
id: "insert_adjacent_html",
|
|
64
|
+
pack: "script-risk",
|
|
65
|
+
severity: "low",
|
|
66
|
+
confidence: "high",
|
|
67
|
+
title: "insertAdjacentHTML usage",
|
|
68
|
+
description: "JavaScript inserts HTML through insertAdjacentHTML().",
|
|
69
|
+
locationType: "javascript",
|
|
70
|
+
pattern: /\.insertAdjacentHTML\s*\(/,
|
|
71
|
+
score: { base: 8, tags: ["script"] }
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: "dynamic_script_src",
|
|
75
|
+
pack: "script-risk",
|
|
76
|
+
severity: "medium",
|
|
77
|
+
confidence: "high",
|
|
78
|
+
title: "Dynamic script creation",
|
|
79
|
+
description: "JavaScript creates a script element dynamically.",
|
|
80
|
+
locationType: "javascript",
|
|
81
|
+
pattern: /\bcreateElement\s*\(\s*['"]script['"]\s*\)/,
|
|
82
|
+
score: { base: 18, tags: ["script"] }
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
id: "script_src_assignment",
|
|
86
|
+
pack: "script-risk",
|
|
87
|
+
severity: "medium",
|
|
88
|
+
confidence: "high",
|
|
89
|
+
title: "Dynamic script src assignment",
|
|
90
|
+
description: "JavaScript assigns to a script source dynamically.",
|
|
91
|
+
locationType: "javascript",
|
|
92
|
+
pattern: /\.src\s*=|setAttribute\s*\(\s*['"]src['"]/,
|
|
93
|
+
score: { base: 18, tags: ["script"] }
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
id: "append_child_script",
|
|
97
|
+
pack: "script-risk",
|
|
98
|
+
severity: "low",
|
|
99
|
+
confidence: "medium",
|
|
100
|
+
title: "Dynamic script append",
|
|
101
|
+
description: "JavaScript appends a dynamically created script element.",
|
|
102
|
+
locationType: "javascript",
|
|
103
|
+
pattern: /\.appendChild\s*\(\s*(?:script|s|el|node)\s*\)/,
|
|
104
|
+
score: { base: 6, tags: ["script"] }
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
id: "external_request_api_seen",
|
|
108
|
+
pack: "script-risk",
|
|
109
|
+
severity: "low",
|
|
110
|
+
confidence: "medium",
|
|
111
|
+
title: "External request API",
|
|
112
|
+
description: "JavaScript references an outbound request API.",
|
|
113
|
+
locationType: "javascript",
|
|
114
|
+
pattern: /\b(?:fetch|XMLHttpRequest|sendBeacon|WebSocket)\b/,
|
|
115
|
+
score: { base: 6, tags: ["script"] }
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
id: "js_location_external",
|
|
119
|
+
pack: "redirects",
|
|
120
|
+
severity: "medium",
|
|
121
|
+
confidence: "high",
|
|
122
|
+
title: "JavaScript redirect logic",
|
|
123
|
+
description: "JavaScript references browser redirect APIs.",
|
|
124
|
+
locationType: "javascript",
|
|
125
|
+
pattern: /\b(?:location\.href|location\.assign|location\.replace|window\.open)\b/,
|
|
126
|
+
score: { base: 20, tags: ["redirect", "script"] }
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
id: "decoder_seen",
|
|
130
|
+
pack: "obfuscation",
|
|
131
|
+
severity: "low",
|
|
132
|
+
confidence: "medium",
|
|
133
|
+
title: "Decoder API seen",
|
|
134
|
+
description: "JavaScript references a common string decoder API.",
|
|
135
|
+
locationType: "javascript",
|
|
136
|
+
pattern: /\b(?:atob|btoa|unescape|String\.fromCharCode)\b/,
|
|
137
|
+
counter: "decoder_seen",
|
|
138
|
+
score: { base: 6, tags: ["decoded", "script"] }
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
id: "charcodeat_decoder_loop",
|
|
142
|
+
pack: "obfuscation",
|
|
143
|
+
severity: "medium",
|
|
144
|
+
confidence: "medium",
|
|
145
|
+
title: "charCodeAt decoder loop",
|
|
146
|
+
description: "JavaScript uses charCodeAt in loop-like code, a common lightweight decoder pattern.",
|
|
147
|
+
locationType: "javascript",
|
|
148
|
+
pattern: /(?:for|while)\s*\([^)]*\)[\s\S]{0,300}\.charCodeAt\s*\(/,
|
|
149
|
+
score: { base: 22, tags: ["decoded", "obfuscation", "script"] }
|
|
150
|
+
},
|
|
151
|
+
{
|
|
152
|
+
id: "browser_storage_or_clipboard_seen",
|
|
153
|
+
pack: "exfiltration",
|
|
154
|
+
severity: "medium",
|
|
155
|
+
confidence: "medium",
|
|
156
|
+
title: "Storage or clipboard access",
|
|
157
|
+
description: "JavaScript references browser storage, cookies, or clipboard APIs.",
|
|
158
|
+
locationType: "javascript",
|
|
159
|
+
pattern: /\b(?:localStorage|sessionStorage|document\.cookie|navigator\.clipboard)\b/,
|
|
160
|
+
score: { base: 14, tags: ["exfiltration", "script"] }
|
|
161
|
+
},
|
|
162
|
+
{
|
|
163
|
+
id: "wallet_interaction_with_obfuscation",
|
|
164
|
+
pack: "wallet",
|
|
165
|
+
severity: "medium",
|
|
166
|
+
confidence: "medium",
|
|
167
|
+
title: "Wallet API reference",
|
|
168
|
+
description: "JavaScript references wallet or approval APIs.",
|
|
169
|
+
locationType: "javascript",
|
|
170
|
+
pattern: /\b(?:window\.ethereum|WalletConnect|ethereum\.request)\b|\.(?:approve|permit)\s*\(|\bmethod\s*:\s*['"]eth_/i,
|
|
171
|
+
score: { base: 20, tags: ["script", "wallet"] }
|
|
172
|
+
}
|
|
173
|
+
];
|
|
174
|
+
export const scriptCompositeRules = {
|
|
175
|
+
credential_exfil_candidate: {
|
|
176
|
+
id: "credential_exfil_candidate",
|
|
177
|
+
pack: "exfiltration",
|
|
178
|
+
severity: "high",
|
|
179
|
+
confidence: "medium",
|
|
180
|
+
title: "Credential or storage exfiltration candidate",
|
|
181
|
+
description: "JavaScript combines credential/storage signals with outbound request APIs.",
|
|
182
|
+
locationType: "javascript",
|
|
183
|
+
score: { base: 72, tags: ["credential", "exfiltration", "script"] }
|
|
184
|
+
},
|
|
185
|
+
decoded_dynamic_execution: {
|
|
186
|
+
id: "decoded_dynamic_execution",
|
|
187
|
+
pack: "obfuscation",
|
|
188
|
+
severity: "high",
|
|
189
|
+
confidence: "high",
|
|
190
|
+
title: "Decoded dynamic execution",
|
|
191
|
+
description: "JavaScript combines decoder APIs with dynamic execution.",
|
|
192
|
+
locationType: "javascript",
|
|
193
|
+
score: { base: 76, tags: ["decoded", "obfuscation", "script"] }
|
|
194
|
+
},
|
|
195
|
+
form_action_changed_by_javascript: {
|
|
196
|
+
id: "form_action_changed_by_javascript",
|
|
197
|
+
pack: "phishing",
|
|
198
|
+
severity: "low",
|
|
199
|
+
confidence: "medium",
|
|
200
|
+
title: "Form action changed by JavaScript",
|
|
201
|
+
description: "JavaScript appears to change a form action target.",
|
|
202
|
+
locationType: "javascript",
|
|
203
|
+
// Legitimate SPAs/SSO flows rewrite form actions; weak on its own, and the
|
|
204
|
+
// "credential"/"phishing" tags were escalating the score multiplier.
|
|
205
|
+
score: { base: 12, tags: ["script"] }
|
|
206
|
+
},
|
|
207
|
+
wallet_api_plus_external_beacon: {
|
|
208
|
+
id: "wallet_api_plus_external_beacon",
|
|
209
|
+
pack: "wallet",
|
|
210
|
+
severity: "high",
|
|
211
|
+
confidence: "medium",
|
|
212
|
+
title: "Wallet API plus external request",
|
|
213
|
+
description: "JavaScript combines wallet APIs with outbound request APIs.",
|
|
214
|
+
locationType: "javascript",
|
|
215
|
+
score: { base: 72, tags: ["exfiltration", "script", "wallet"] }
|
|
216
|
+
},
|
|
217
|
+
payment_input_event_hooks: {
|
|
218
|
+
id: "payment_input_event_hooks",
|
|
219
|
+
pack: "payment",
|
|
220
|
+
severity: "low",
|
|
221
|
+
confidence: "medium",
|
|
222
|
+
title: "Payment input event hooks",
|
|
223
|
+
description: "JavaScript attaches input/change listeners near payment-card fields.",
|
|
224
|
+
locationType: "javascript",
|
|
225
|
+
// Every legitimate checkout/login listens to its own input fields — weak
|
|
226
|
+
// signal alone. The real skimmer pattern is this PLUS off-site exfil of the
|
|
227
|
+
// captured values, which the exfil/credential-form rules score on their own.
|
|
228
|
+
score: { base: 15, tags: ["payment", "script"] }
|
|
229
|
+
}
|
|
230
|
+
};
|
|
231
|
+
//# sourceMappingURL=script-risk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"script-risk.js","sourceRoot":"","sources":["../../../src/rules/packs/script-risk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-code.d.ts","sourceRoot":"","sources":["../../../src/rules/packs/source-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,eAAO,MAAM,eAAe,EAAE,WAAW,EAiLxC,CAAC"}
|