@slicedearth/whoisleuth-cli 2.4.0 → 2.6.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/DISCLOSURE +1 -1
- package/NOTICE +2 -2
- package/cli/argument-values.mjs +55 -0
- package/cli/arguments.mjs +24 -470
- package/cli/artifact-validation/case-response.mjs +67 -9
- package/cli/artifact-validation/lookup-evidence.mjs +18 -4
- package/cli/artifact-validation/signed-review.mjs +61 -64
- package/cli/artifact-verify.mjs +11 -2
- package/cli/assurance-arguments.mjs +56 -0
- package/cli/assurance-command-definitions.mjs +179 -0
- package/cli/assurance-command-runner.mjs +1 -1
- package/cli/bounded-json.mjs +1 -1
- package/cli/bulk-checkpoint.mjs +1 -1
- package/cli/bulk-command-runner.mjs +6 -8
- package/cli/bulk.mjs +2 -3
- package/cli/case-command.mjs +99 -6
- package/cli/case-pack.mjs +19 -4
- package/cli/ci-report.mjs +6 -3
- package/cli/collection-arguments.mjs +123 -0
- package/cli/collection-command-definitions.mjs +330 -0
- package/cli/collection-preflight.mjs +8 -1
- package/cli/command-argument-grammar.mjs +8 -210
- package/cli/command-definition.mjs +330 -0
- package/cli/command-reference.mjs +55 -1388
- package/cli/command-seeds.mjs +18 -0
- package/cli/compare.mjs +1 -1
- package/cli/config-profile.mjs +1 -1
- package/cli/ct-event-intake.mjs +4 -4
- package/cli/discover.mjs +2 -2
- package/cli/discovery-observation-snapshot.mjs +2 -2
- package/cli/discovery-scan-command-runner.mjs +7 -9
- package/cli/discovery-scan.mjs +1 -1
- package/cli/discovery-snapshot.mjs +2 -2
- package/cli/discovery-workflow.mjs +4 -4
- package/cli/domain-control-monitor.mjs +6 -6
- package/cli/domain-control-observations.mjs +2 -1
- package/cli/domain-feed.mjs +61 -0
- package/cli/errors.mjs +5 -6
- package/cli/evidence-arguments.mjs +46 -0
- package/cli/evidence-command-definitions.mjs +69 -0
- package/cli/evidence-command-runner.mjs +2 -3
- package/cli/evidence-signing.mjs +3 -2
- package/cli/external-observation-mapping.mjs +2 -2
- package/cli/formatters/json.mjs +1 -13
- package/cli/formatters/terminal-command-formats.mjs +6 -0
- package/cli/formatters/terminal-lookup.mjs +6 -0
- package/cli/history-arguments.mjs +39 -0
- package/cli/history-command-definitions.mjs +88 -0
- package/cli/indicator-set-command.mjs +32 -0
- package/cli/inline-command-families.mjs +6 -47
- package/cli/inline-command-runner.mjs +4 -31
- package/cli/input.mjs +2 -2
- package/cli/intake-command.mjs +147 -0
- package/cli/interchange-report.mjs +4 -2
- package/cli/investigation-artifacts.mjs +3 -4
- package/cli/investigation-package-review.mjs +2 -0
- package/cli/investigation-plan.mjs +32 -154
- package/cli/investigation-recipes.mjs +177 -0
- package/cli/investigation-run.mjs +78 -12
- package/cli/local-mmdb-review.mjs +220 -17
- package/cli/lookalike-calibration.mjs +1 -1
- package/cli/lookup-brief.mjs +2 -2
- package/cli/lookup-command-runner.mjs +19 -35
- package/cli/lookup-diff.mjs +10 -9
- package/cli/lookup-plan.mjs +10 -14
- package/cli/lookup-reconcile.mjs +6 -5
- package/cli/lookup-timeline.mjs +7 -6
- package/cli/mail-header-review.mjs +24 -247
- package/cli/mail-review.mjs +9 -7
- package/cli/network-arguments.mjs +51 -0
- package/cli/network-command-definitions.mjs +130 -0
- package/cli/network-command-runner.mjs +43 -31
- package/cli/offline-evidence-review.mjs +85 -6
- package/cli/posture.mjs +1 -1
- package/cli/registry-fixture-scaffold.mjs +1 -1
- package/cli/retained-artifact-diff.mjs +8 -7
- package/cli/review-arguments.mjs +132 -0
- package/cli/review-command-definitions.mjs +279 -0
- package/cli/review-command-runner.mjs +72 -159
- package/cli/risk-calibration.mjs +14 -12
- package/cli/runner.mjs +20 -32
- package/cli/saved-lookup.mjs +2 -2
- package/cli/selected-input-worker.mjs +73 -0
- package/cli/sharing-review.mjs +5 -64
- package/cli/source-reliability.mjs +2 -2
- package/cli/support-arguments.mjs +49 -0
- package/cli/support-command-definitions.mjs +209 -0
- package/cli/support-command-runner.mjs +4 -4
- package/cli/watchlist-review.mjs +43 -0
- package/cli/workflow-arguments.mjs +100 -0
- package/cli/workflow-command-definitions.mjs +103 -0
- package/cli/workflow-command-runner.mjs +40 -1
- package/docs/cli-reference.md +27 -0
- package/docs/cli.md +322 -4
- package/docs/contextual-reviews.md +178 -0
- package/docs/infrastructure-observations.md +126 -0
- package/docs/offline-intake-context.md +213 -0
- package/lib/analyst-taxonomy.mjs +2 -40
- package/lib/application-version.mjs +1 -1
- package/lib/availability.mjs +13 -789
- package/lib/bounded-contract-normalizers.mjs +4 -0
- package/lib/bounded-json.mjs +2 -330
- package/lib/browser-library-profile.mjs +62 -84
- package/lib/candidate-provenance-bounds.mjs +2 -0
- package/lib/classify.mjs +1 -1
- package/lib/credential-form-attribution.mjs +136 -0
- package/lib/credential-surface-profile.mjs +6 -2
- package/lib/ct-query.mjs +2 -27
- package/lib/ct-response-bounds.mjs +2 -9
- package/lib/ct-search.mjs +83 -47
- package/lib/dmarc-discovery.mjs +62 -0
- package/lib/dns-convergence-review.mjs +21 -8
- package/lib/dns-delegation-health.mjs +35 -15
- package/lib/dns-inheritance-review.mjs +53 -63
- package/lib/dns-intelligence.mjs +27 -11
- package/lib/dns-query-coverage.mjs +40 -0
- package/lib/domain-assurance.mjs +1 -1
- package/lib/domain-change-packet.mjs +12 -13
- package/lib/domain-change-review.mjs +32 -14
- package/lib/domain-control-flight-recorder.mjs +103 -27
- package/lib/domain-control-manifest.mjs +25 -17
- package/lib/domain-posture-analysis.mjs +75 -7
- package/lib/domain-posture-parsers.mjs +9 -0
- package/lib/domain-posture.mjs +45 -25
- package/lib/domain-registration.mjs +392 -0
- package/lib/evidence-export-privacy.mjs +27 -17
- package/lib/evidence-export.mjs +3 -3
- package/lib/evidence-report.mjs +5 -1
- package/lib/external-intelligence-risk.mjs +2 -124
- package/lib/favicon.mjs +13 -4
- package/lib/generated/cisa-kev-catalog.mjs +41 -3
- package/lib/generated/registrar-standing-catalogue.mjs +18 -10
- package/lib/generated/retire-browser-catalog.mjs +332 -19
- package/lib/generated/{unicode-confusables-17.mjs → unicode-confusables.mjs} +33 -33
- package/lib/html-signals.mjs +13 -2
- package/lib/http-evidence-bounds.mjs +2 -8
- package/lib/http-intelligence.mjs +13 -1
- package/lib/idn-confusable-policy.mjs +6 -4
- package/lib/idn-confusables.mjs +1 -1
- package/lib/interchange-fidelity-registry.mjs +10 -0
- package/lib/lookup-child-profile-contract.mjs +28 -11
- package/lib/lookup-contract-primitives.mjs +1 -1
- package/lib/lookup-diagnostics.mjs +1 -23
- package/lib/lookup-network-evidence-bounds.mjs +1 -10
- package/lib/lookup-progress.mjs +50 -1
- package/lib/lookup-response-contract.mjs +70 -40
- package/lib/lookup-response.mjs +5 -15
- package/lib/lookup-source-progress.mjs +8 -22
- package/lib/lookup.mjs +1 -1
- package/lib/operation-budget.mjs +4 -0
- package/lib/opportunity-scoring.mjs +2 -107
- package/lib/outbound-identity.mjs +1 -1
- package/lib/page-fingerprints.mjs +18 -1
- package/lib/perceptual-hash-comparison.mjs +2 -34
- package/lib/perceptual-hash.mjs +36 -10
- package/lib/portable-generator.mjs +2 -29
- package/lib/project-metadata.mjs +2 -8
- package/lib/rdap-client.mjs +11 -7
- package/lib/registrable-domain.mjs +2 -56
- package/lib/registrar-standing-contract.mjs +1 -1
- package/lib/registrar-standing.mjs +9 -13
- package/lib/registry-capabilities.mjs +2 -2
- package/lib/registry-capability-catalogue.mjs +27 -19
- package/lib/risk-calibration-summary.mjs +2 -352
- package/lib/risk-scoring.mjs +2 -345
- package/lib/scoring-evidence-quality.mjs +2 -107
- package/lib/semantic-version.mjs +2 -54
- package/lib/service-binding-dns.mjs +46 -2
- package/lib/smtp-transport-review.mjs +48 -19
- package/lib/sslbl-certificates.generated.mjs +142 -139
- package/lib/static-html-analysis.mjs +32 -4
- package/lib/structured-data-identity.mjs +1 -1
- package/lib/technology-evidence-role.mjs +1 -51
- package/lib/threat-intelligence-manifests.mjs +1 -1
- package/lib/threat-intelligence-runtime.mjs +1 -1
- package/lib/threat-intelligence-targets.mjs +1 -1
- package/lib/threat-intelligence-types.mjs +2 -75
- package/lib/tls-intelligence.mjs +30 -5
- package/lib/typosquat-generator.mjs +11 -2
- package/lib/website-enrichment.mjs +404 -0
- package/lib/whois-authority.mjs +43 -5
- package/lib/whois-chain.mjs +12 -3
- package/lib/whois-common-formats.mjs +3 -1
- package/lib/whois-contacts.mjs +13 -2
- package/lib/whois-normalization.mjs +3 -1
- package/lib/whois-parser.mjs +5 -3
- package/package.json +15 -14
- package/packages/analysis/analyst-taxonomy.mjs +40 -0
- package/packages/analysis/bounded-json.mjs +330 -0
- package/packages/analysis/candidate-provenance-bounds.mjs +4 -0
- package/packages/analysis/cli-argument-grammar.mjs +216 -0
- package/packages/analysis/ct-query.mjs +27 -0
- package/packages/analysis/ct-response-bounds.mjs +9 -0
- package/packages/analysis/external-intelligence-risk.mjs +124 -0
- package/packages/analysis/http-evidence-bounds.mjs +8 -0
- package/packages/analysis/lookup-network-evidence-bounds.mjs +10 -0
- package/packages/analysis/opportunity-scoring.mjs +107 -0
- package/packages/analysis/perceptual-hash-comparison.mjs +34 -0
- package/packages/analysis/portable-generator.mjs +29 -0
- package/packages/analysis/project-metadata.mjs +8 -0
- package/packages/analysis/registrable-domain.mjs +56 -0
- package/packages/analysis/risk-calibration-summary.mjs +352 -0
- package/packages/analysis/risk-scoring.mjs +348 -0
- package/packages/analysis/scoring-evidence-quality.mjs +107 -0
- package/packages/analysis/semantic-version.mjs +54 -0
- package/packages/analysis/threat-intelligence-types.mjs +75 -0
- package/packages/cases/case-containment-handoff.mjs +195 -0
- package/packages/cases/case-evidence-links.mjs +151 -0
- package/packages/cases/case-evidence-model.mjs +89 -12
- package/packages/cases/case-evidence-quality.mjs +5 -0
- package/packages/cases/case-export-input.mjs +7 -5
- package/packages/cases/case-incident-context.mjs +52 -0
- package/packages/cases/case-markdown.mjs +11 -0
- package/packages/cases/case-migration-model.mjs +40 -24
- package/packages/cases/case-object-coverage.mjs +33 -0
- package/packages/cases/case-packet-correction.mjs +106 -0
- package/packages/cases/case-recheck-model.mjs +124 -36
- package/packages/cases/case-record-contracts.mjs +1 -1
- package/packages/cases/case-record-core.mjs +1 -1
- package/packages/cases/case-record-operations.mjs +111 -118
- package/packages/cases/case-record-projection.mjs +23 -4
- package/packages/cases/case-record-version-input.mjs +41 -0
- package/packages/cases/case-report.mjs +93 -27
- package/packages/cases/case-requested-evidence.mjs +146 -0
- package/packages/cases/case-response-actions.mjs +159 -1
- package/packages/cases/case-response-model.mjs +16 -1
- package/packages/cases/case-response-object.mjs +119 -0
- package/packages/cases/case-response-outcomes.mjs +108 -20
- package/packages/cases/case-response-packet-render.mjs +35 -12
- package/packages/cases/case-response-packet.mjs +55 -13
- package/packages/cases/case-response-records.mjs +0 -1
- package/packages/cases/case-response-review-inputs.mjs +60 -8
- package/packages/cases/case-storage-model.mjs +1 -1
- package/packages/cases/case-workflow-metadata.mjs +217 -0
- package/packages/cases/case-workflow-migration.mjs +43 -0
- package/packages/cases/http-summary.mjs +6 -1
- package/packages/comparison/favicon-similarity.mjs +1 -1
- package/packages/comparison/page-similarity.mjs +1 -1
- package/packages/comparison/relationship-evidence.mjs +21 -9
- package/packages/comparison/relationship-provenance.mjs +7 -1
- package/packages/contracts/analyst-interchange.mjs +35 -15
- package/packages/contracts/candidate-watch-review.mjs +54 -0
- package/packages/contracts/case-portability.mjs +360 -49
- package/packages/contracts/cli-command-semantics.mjs +5 -0
- package/packages/contracts/cli-grammar.mjs +6 -0
- package/packages/contracts/cli-lookup-brief.mjs +2 -0
- package/packages/contracts/context-review.mjs +25 -0
- package/packages/contracts/document-intake.mjs +11 -0
- package/packages/contracts/domain-control-flight-recorder.mjs +30 -14
- package/packages/contracts/domain-control-manifest.mjs +1 -1
- package/packages/contracts/domain-control-monitor.mjs +13 -2
- package/packages/contracts/domain-control-review.mjs +36 -15
- package/packages/contracts/external-observation-interchange.mjs +96 -28
- package/packages/contracts/har-review.mjs +2 -0
- package/packages/contracts/identity-events.mjs +4 -0
- package/packages/contracts/investigation-run.mjs +2 -0
- package/packages/contracts/ip-address.mjs +10 -0
- package/packages/contracts/lookup-evidence.mjs +3 -2
- package/packages/contracts/mail-authentication.mjs +5 -0
- package/packages/contracts/message-intake.mjs +37 -0
- package/packages/contracts/offline-comparison.mjs +4 -1
- package/packages/contracts/passive-mail.mjs +10 -0
- package/packages/contracts/risk-calibration.mjs +44 -29
- package/packages/contracts/schema-lifecycle.mjs +3 -1
- package/packages/contracts/web-capture.mjs +2 -2
- package/packages/contracts/workspace-portability.mjs +144 -28
- package/packages/evidence/collection-quality.mjs +67 -0
- package/packages/evidence/credential-form-attribution.mjs +60 -0
- package/packages/evidence/dns-query-outcome.mjs +72 -0
- package/packages/evidence/email-recipient.mjs +18 -0
- package/packages/evidence/image-regions.mjs +15 -0
- package/packages/evidence/lookup-target.mjs +5 -1
- package/packages/evidence/observation.mjs +2 -0
- package/packages/evidence/png-pixels.mjs +117 -0
- package/packages/evidence/public-address-policy.mjs +83 -0
- package/packages/evidence/record-identity.mjs +60 -16
- package/packages/evidence/technology-evidence-role.mjs +51 -0
- package/packages/interchange/defensive-indicator-export.mjs +264 -0
- package/packages/interchange/external-findings-import.mjs +36 -29
- package/packages/interchange/json-output.mjs +14 -0
- package/packages/interchange/managed-indicator-export.mjs +36 -0
- package/packages/interchange/managed-indicator-set.mjs +223 -0
- package/packages/interchange/misp-indicator-export.mjs +93 -0
- package/packages/interchange/sharing-policy.mjs +56 -0
- package/packages/interchange/stix-indicator-export.mjs +129 -0
- package/packages/interchange/web-capture-import.mjs +22 -15
- package/packages/investigation/acquisition-decision-packet.mjs +79 -1
- package/packages/investigation/bulk-mail-exposure.mjs +7 -13
- package/packages/investigation/capture-coverage.mjs +57 -0
- package/packages/investigation/connector-provenance-review.mjs +100 -0
- package/packages/investigation/context-review.mjs +35 -0
- package/packages/investigation/document-intake.mjs +87 -0
- package/packages/investigation/docx-intake.mjs +133 -0
- package/packages/investigation/domain-history-review.mjs +132 -0
- package/packages/investigation/domain-transition-review.mjs +49 -0
- package/packages/investigation/evidence-coverage-ledger.mjs +9 -1
- package/packages/investigation/har-intake.mjs +68 -0
- package/packages/investigation/identity-event-intake.mjs +131 -0
- package/packages/investigation/identity-incident-review.mjs +39 -0
- package/packages/investigation/incident-sequence-review.mjs +58 -0
- package/packages/investigation/infrastructure-observation.mjs +234 -0
- package/packages/investigation/intake-context.mjs +284 -0
- package/packages/investigation/intake-indicators.mjs +116 -0
- package/packages/investigation/intake-phones.mjs +155 -0
- package/packages/investigation/intake-report.mjs +20 -0
- package/packages/investigation/investigation-manifest.mjs +35 -9
- package/packages/investigation/link-intake.mjs +209 -0
- package/packages/investigation/lookup-asset-graph.mjs +1 -1
- package/packages/investigation/mail-authentication-review.mjs +222 -0
- package/packages/investigation/mail-header-identity.mjs +209 -0
- package/packages/investigation/message-intake.mjs +235 -0
- package/packages/investigation/page-behaviour.mjs +113 -0
- package/packages/investigation/pdf-intake.mjs +155 -0
- package/packages/investigation/platform-continuity-review.mjs +60 -0
- package/packages/investigation/qr-intake.mjs +56 -0
- package/packages/investigation/requested-action-hints.mjs +11 -0
- package/packages/investigation/selected-input-review.mjs +17 -0
- package/packages/investigation/storefront-review.mjs +70 -0
- package/packages/monitoring/domain-feed.mjs +321 -0
- package/packages/workspace/brand-candidate-workflow.mjs +351 -0
- package/packages/workspace/brand-keyword-campaign.mjs +231 -0
- package/packages/workspace/brand-profile-model.mjs +48 -4
- package/packages/workspace/bulk-review-model.mjs +28 -26
- package/packages/workspace/bulk-session-model.mjs +27 -13
- package/packages/workspace/campaign-model.mjs +1 -1
- package/packages/workspace/candidate-watch-handoff.mjs +195 -0
- package/packages/workspace/detection-rule-model.mjs +11 -3
- package/packages/workspace/hostile-input.mjs +1 -1
- package/packages/workspace/investigation-guide.mjs +2 -2
- package/packages/workspace/investigation-template-model.mjs +26 -2
- package/packages/workspace/page-baseline.mjs +2 -2
- package/packages/workspace/relationship-observation-model.mjs +17 -13
- package/packages/workspace/shortlist-model.mjs +24 -7
- package/packages/workspace/watchlist-history.mjs +59 -16
- package/packages/workspace/watchlist-store.mjs +152 -11
- package/packages/workspace/website-snapshot-model.mjs +28 -3
- package/packages/workspace/workspace-archive-crypto.mjs +1 -1
- package/packages/workspace/workspace-archive.mjs +5 -4
- package/third-party-notices.txt +549 -16
- package/lib/hostname.mjs +0 -2
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
// Generated by tools/retire-browser-catalog.mts from the pinned Retire.js
|
|
2
2
|
// browser-library catalogue. Apache-2.0 licensed source; do not edit by hand.
|
|
3
3
|
const RETIRE_BROWSER_CATALOG = Object.freeze({
|
|
4
|
-
catalogVersion: "retire.js-
|
|
5
|
-
sourceRevision: "
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
catalogVersion: "retire.js-2026.10.02",
|
|
5
|
+
sourceRevision: "305423aa277cd6aa55c75c37c51090eb98e72e62",
|
|
6
|
+
sourceUpdatedAt: "2026-10-02T11:46:05.000Z",
|
|
7
|
+
sourceSha256: "3b444e8cec14dfb4c77f519db559a6c03d626b4c5730cd062b07ca4395c96ad7",
|
|
8
|
+
sourceUrl: "https://github.com/RetireJS/retire.js/blob/305423aa277cd6aa55c75c37c51090eb98e72e62/repository/jsrepository.json",
|
|
8
9
|
components: {
|
|
9
10
|
"jquery": {
|
|
10
11
|
"extractors": {
|
|
@@ -3545,6 +3546,17 @@ const RETIRE_BROWSER_CATALOG = Object.freeze({
|
|
|
3545
3546
|
],
|
|
3546
3547
|
"githubID": "GHSA-55Q2-FJHQ-7XH7"
|
|
3547
3548
|
}
|
|
3549
|
+
},
|
|
3550
|
+
{
|
|
3551
|
+
"below": "3.4.16",
|
|
3552
|
+
"severity": "low",
|
|
3553
|
+
"atOrAbove": "3.4.13",
|
|
3554
|
+
"cwe": [
|
|
3555
|
+
"CWE-79"
|
|
3556
|
+
],
|
|
3557
|
+
"identifiers": {
|
|
3558
|
+
"githubID": "GHSA-P98J-92PF-MC4P"
|
|
3559
|
+
}
|
|
3548
3560
|
}
|
|
3549
3561
|
]
|
|
3550
3562
|
},
|
|
@@ -3911,6 +3923,20 @@ const RETIRE_BROWSER_CATALOG = Object.freeze({
|
|
|
3911
3923
|
],
|
|
3912
3924
|
"githubID": "GHSA-WC69-RHJR-HC9G"
|
|
3913
3925
|
}
|
|
3926
|
+
},
|
|
3927
|
+
{
|
|
3928
|
+
"below": "2.31.0",
|
|
3929
|
+
"severity": "medium",
|
|
3930
|
+
"atOrAbove": "2.29.2",
|
|
3931
|
+
"cwe": [
|
|
3932
|
+
"CWE-27"
|
|
3933
|
+
],
|
|
3934
|
+
"identifiers": {
|
|
3935
|
+
"CVE": [
|
|
3936
|
+
"CVE-2026-17495"
|
|
3937
|
+
],
|
|
3938
|
+
"githubID": "GHSA-4P3W-J4W9-5JQW"
|
|
3939
|
+
}
|
|
3914
3940
|
}
|
|
3915
3941
|
]
|
|
3916
3942
|
},
|
|
@@ -5222,21 +5248,6 @@ const RETIRE_BROWSER_CATALOG = Object.freeze({
|
|
|
5222
5248
|
"githubID": "GHSA-42H9-826W-CGV3"
|
|
5223
5249
|
}
|
|
5224
5250
|
},
|
|
5225
|
-
{
|
|
5226
|
-
"below": "0.33.0",
|
|
5227
|
-
"severity": "medium",
|
|
5228
|
-
"atOrAbove": "0.28.0",
|
|
5229
|
-
"cwe": [
|
|
5230
|
-
"CWE-400",
|
|
5231
|
-
"CWE-770"
|
|
5232
|
-
],
|
|
5233
|
-
"identifiers": {
|
|
5234
|
-
"CVE": [
|
|
5235
|
-
"CVE-2026-67312"
|
|
5236
|
-
],
|
|
5237
|
-
"githubID": "GHSA-PMV8-RQ9R-6J72"
|
|
5238
|
-
}
|
|
5239
|
-
},
|
|
5240
5251
|
{
|
|
5241
5252
|
"below": "0.33.0",
|
|
5242
5253
|
"severity": "medium",
|
|
@@ -5295,6 +5306,49 @@ const RETIRE_BROWSER_CATALOG = Object.freeze({
|
|
|
5295
5306
|
"githubID": "GHSA-MMX7-HFXF-JPPX"
|
|
5296
5307
|
}
|
|
5297
5308
|
},
|
|
5309
|
+
{
|
|
5310
|
+
"below": "0.33.0",
|
|
5311
|
+
"severity": "medium",
|
|
5312
|
+
"atOrAbove": "0.28.0",
|
|
5313
|
+
"cwe": [
|
|
5314
|
+
"CWE-400",
|
|
5315
|
+
"CWE-770"
|
|
5316
|
+
],
|
|
5317
|
+
"identifiers": {
|
|
5318
|
+
"CVE": [
|
|
5319
|
+
"CVE-2026-67312"
|
|
5320
|
+
],
|
|
5321
|
+
"githubID": "GHSA-PMV8-RQ9R-6J72"
|
|
5322
|
+
}
|
|
5323
|
+
},
|
|
5324
|
+
{
|
|
5325
|
+
"below": "0.34.0",
|
|
5326
|
+
"severity": "medium",
|
|
5327
|
+
"atOrAbove": "0.27.2",
|
|
5328
|
+
"cwe": [
|
|
5329
|
+
"CWE-1321"
|
|
5330
|
+
],
|
|
5331
|
+
"identifiers": {
|
|
5332
|
+
"CVE": [
|
|
5333
|
+
"CVE-2026-101902"
|
|
5334
|
+
],
|
|
5335
|
+
"githubID": "GHSA-9FR6-4GFG-395G"
|
|
5336
|
+
}
|
|
5337
|
+
},
|
|
5338
|
+
{
|
|
5339
|
+
"below": "0.34.0",
|
|
5340
|
+
"severity": "high",
|
|
5341
|
+
"atOrAbove": "0.28.0",
|
|
5342
|
+
"cwe": [
|
|
5343
|
+
"CWE-1321"
|
|
5344
|
+
],
|
|
5345
|
+
"identifiers": {
|
|
5346
|
+
"CVE": [
|
|
5347
|
+
"CVE-2026-101909"
|
|
5348
|
+
],
|
|
5349
|
+
"githubID": "GHSA-X97P-JQ2G-JP4F"
|
|
5350
|
+
}
|
|
5351
|
+
},
|
|
5298
5352
|
{
|
|
5299
5353
|
"below": "1.6.0",
|
|
5300
5354
|
"severity": "medium",
|
|
@@ -5881,6 +5935,180 @@ const RETIRE_BROWSER_CATALOG = Object.freeze({
|
|
|
5881
5935
|
],
|
|
5882
5936
|
"githubID": "GHSA-XJ6Q-8X83-JV6G"
|
|
5883
5937
|
}
|
|
5938
|
+
},
|
|
5939
|
+
{
|
|
5940
|
+
"below": "1.20.0",
|
|
5941
|
+
"severity": "medium",
|
|
5942
|
+
"atOrAbove": "1.0.0",
|
|
5943
|
+
"cwe": [
|
|
5944
|
+
"CWE-1321"
|
|
5945
|
+
],
|
|
5946
|
+
"identifiers": {
|
|
5947
|
+
"CVE": [
|
|
5948
|
+
"CVE-2026-101902"
|
|
5949
|
+
],
|
|
5950
|
+
"githubID": "GHSA-9FR6-4GFG-395G"
|
|
5951
|
+
}
|
|
5952
|
+
},
|
|
5953
|
+
{
|
|
5954
|
+
"below": "1.20.0",
|
|
5955
|
+
"severity": "medium",
|
|
5956
|
+
"atOrAbove": "1.0.0",
|
|
5957
|
+
"cwe": [
|
|
5958
|
+
"CWE-1321",
|
|
5959
|
+
"CWE-74"
|
|
5960
|
+
],
|
|
5961
|
+
"identifiers": {
|
|
5962
|
+
"CVE": [
|
|
5963
|
+
"CVE-2026-101904"
|
|
5964
|
+
],
|
|
5965
|
+
"githubID": "GHSA-J8RH-479H-CP32"
|
|
5966
|
+
}
|
|
5967
|
+
},
|
|
5968
|
+
{
|
|
5969
|
+
"below": "1.20.0",
|
|
5970
|
+
"severity": "medium",
|
|
5971
|
+
"atOrAbove": "1.7.0",
|
|
5972
|
+
"cwe": [
|
|
5973
|
+
"CWE-1321"
|
|
5974
|
+
],
|
|
5975
|
+
"identifiers": {
|
|
5976
|
+
"CVE": [
|
|
5977
|
+
"CVE-2026-101908"
|
|
5978
|
+
],
|
|
5979
|
+
"githubID": "GHSA-VH66-26GQ-Q6X8"
|
|
5980
|
+
}
|
|
5981
|
+
},
|
|
5982
|
+
{
|
|
5983
|
+
"below": "1.20.0",
|
|
5984
|
+
"severity": "medium",
|
|
5985
|
+
"atOrAbove": "1.12.0",
|
|
5986
|
+
"cwe": [
|
|
5987
|
+
"CWE-1321",
|
|
5988
|
+
"CWE-693",
|
|
5989
|
+
"CWE-74"
|
|
5990
|
+
],
|
|
5991
|
+
"identifiers": {
|
|
5992
|
+
"CVE": [
|
|
5993
|
+
"CVE-2026-101900"
|
|
5994
|
+
],
|
|
5995
|
+
"githubID": "GHSA-4HQW-QXG8-JXX2"
|
|
5996
|
+
}
|
|
5997
|
+
},
|
|
5998
|
+
{
|
|
5999
|
+
"below": "1.20.0",
|
|
6000
|
+
"severity": "high",
|
|
6001
|
+
"atOrAbove": "1.13.0",
|
|
6002
|
+
"cwe": [
|
|
6003
|
+
"CWE-918"
|
|
6004
|
+
],
|
|
6005
|
+
"identifiers": {
|
|
6006
|
+
"CVE": [
|
|
6007
|
+
"CVE-2026-101898"
|
|
6008
|
+
],
|
|
6009
|
+
"githubID": "GHSA-3PQ3-5FJ3-CG6V"
|
|
6010
|
+
}
|
|
6011
|
+
},
|
|
6012
|
+
{
|
|
6013
|
+
"below": "1.20.0",
|
|
6014
|
+
"severity": "high",
|
|
6015
|
+
"atOrAbove": "1.13.0",
|
|
6016
|
+
"cwe": [
|
|
6017
|
+
"CWE-400"
|
|
6018
|
+
],
|
|
6019
|
+
"identifiers": {
|
|
6020
|
+
"CVE": [
|
|
6021
|
+
"CVE-2026-101901"
|
|
6022
|
+
],
|
|
6023
|
+
"githubID": "GHSA-542G-H47M-68V8"
|
|
6024
|
+
}
|
|
6025
|
+
},
|
|
6026
|
+
{
|
|
6027
|
+
"below": "1.20.0",
|
|
6028
|
+
"severity": "medium",
|
|
6029
|
+
"atOrAbove": "1.15.0",
|
|
6030
|
+
"cwe": [
|
|
6031
|
+
"CWE-693"
|
|
6032
|
+
],
|
|
6033
|
+
"identifiers": {
|
|
6034
|
+
"CVE": [
|
|
6035
|
+
"CVE-2026-101899"
|
|
6036
|
+
],
|
|
6037
|
+
"githubID": "GHSA-44G4-M2MJ-WPVX"
|
|
6038
|
+
}
|
|
6039
|
+
},
|
|
6040
|
+
{
|
|
6041
|
+
"below": "1.20.0",
|
|
6042
|
+
"severity": "high",
|
|
6043
|
+
"atOrAbove": "1.15.0",
|
|
6044
|
+
"cwe": [
|
|
6045
|
+
"CWE-1333",
|
|
6046
|
+
"CWE-400"
|
|
6047
|
+
],
|
|
6048
|
+
"identifiers": {
|
|
6049
|
+
"CVE": [
|
|
6050
|
+
"CVE-2026-101906"
|
|
6051
|
+
],
|
|
6052
|
+
"githubID": "GHSA-MGHH-PGCX-3JJJ"
|
|
6053
|
+
}
|
|
6054
|
+
},
|
|
6055
|
+
{
|
|
6056
|
+
"below": "1.20.0",
|
|
6057
|
+
"severity": "high",
|
|
6058
|
+
"atOrAbove": "1.15.1",
|
|
6059
|
+
"cwe": [
|
|
6060
|
+
"CWE-1321"
|
|
6061
|
+
],
|
|
6062
|
+
"identifiers": {
|
|
6063
|
+
"CVE": [
|
|
6064
|
+
"CVE-2026-101909"
|
|
6065
|
+
],
|
|
6066
|
+
"githubID": "GHSA-X97P-JQ2G-JP4F"
|
|
6067
|
+
}
|
|
6068
|
+
},
|
|
6069
|
+
{
|
|
6070
|
+
"below": "1.20.0",
|
|
6071
|
+
"severity": "high",
|
|
6072
|
+
"atOrAbove": "1.15.2",
|
|
6073
|
+
"cwe": [
|
|
6074
|
+
"CWE-1321",
|
|
6075
|
+
"CWE-441"
|
|
6076
|
+
],
|
|
6077
|
+
"identifiers": {
|
|
6078
|
+
"CVE": [
|
|
6079
|
+
"CVE-2026-101905"
|
|
6080
|
+
],
|
|
6081
|
+
"githubID": "GHSA-M8M8-QJ5V-23W3"
|
|
6082
|
+
}
|
|
6083
|
+
},
|
|
6084
|
+
{
|
|
6085
|
+
"below": "1.20.0",
|
|
6086
|
+
"severity": "high",
|
|
6087
|
+
"atOrAbove": "1.16.1",
|
|
6088
|
+
"cwe": [
|
|
6089
|
+
"CWE-1333"
|
|
6090
|
+
],
|
|
6091
|
+
"identifiers": {
|
|
6092
|
+
"CVE": [
|
|
6093
|
+
"CVE-2026-101903"
|
|
6094
|
+
],
|
|
6095
|
+
"githubID": "GHSA-C29M-XWM3-CM6R"
|
|
6096
|
+
}
|
|
6097
|
+
},
|
|
6098
|
+
{
|
|
6099
|
+
"below": "1.20.0",
|
|
6100
|
+
"severity": "high",
|
|
6101
|
+
"atOrAbove": "1.17.0",
|
|
6102
|
+
"cwe": [
|
|
6103
|
+
"CWE-441",
|
|
6104
|
+
"CWE-601"
|
|
6105
|
+
],
|
|
6106
|
+
"identifiers": {
|
|
6107
|
+
"CVE": [
|
|
6108
|
+
"CVE-2026-101907"
|
|
6109
|
+
],
|
|
6110
|
+
"githubID": "GHSA-R4GJ-5M52-G5WH"
|
|
6111
|
+
}
|
|
5884
6112
|
}
|
|
5885
6113
|
]
|
|
5886
6114
|
},
|
|
@@ -5986,6 +6214,30 @@ const RETIRE_BROWSER_CATALOG = Object.freeze({
|
|
|
5986
6214
|
],
|
|
5987
6215
|
"githubID": "GHSA-6V5V-WF23-FMFQ"
|
|
5988
6216
|
}
|
|
6217
|
+
},
|
|
6218
|
+
{
|
|
6219
|
+
"below": "14.3.1",
|
|
6220
|
+
"severity": "medium",
|
|
6221
|
+
"atOrAbove": "0",
|
|
6222
|
+
"cwe": [
|
|
6223
|
+
"CWE-400",
|
|
6224
|
+
"CWE-407"
|
|
6225
|
+
],
|
|
6226
|
+
"identifiers": {
|
|
6227
|
+
"githubID": "GHSA-253C-MCHW-3W2R"
|
|
6228
|
+
}
|
|
6229
|
+
},
|
|
6230
|
+
{
|
|
6231
|
+
"below": "15.0.1",
|
|
6232
|
+
"severity": "medium",
|
|
6233
|
+
"atOrAbove": "15.0.0",
|
|
6234
|
+
"cwe": [
|
|
6235
|
+
"CWE-400",
|
|
6236
|
+
"CWE-407"
|
|
6237
|
+
],
|
|
6238
|
+
"identifiers": {
|
|
6239
|
+
"githubID": "GHSA-253C-MCHW-3W2R"
|
|
6240
|
+
}
|
|
5989
6241
|
}
|
|
5990
6242
|
]
|
|
5991
6243
|
},
|
|
@@ -7740,6 +7992,31 @@ const RETIRE_BROWSER_CATALOG = Object.freeze({
|
|
|
7740
7992
|
"githubID": "GHSA-Q8WF-6R8G-63CH"
|
|
7741
7993
|
}
|
|
7742
7994
|
},
|
|
7995
|
+
{
|
|
7996
|
+
"below": "15.5.24",
|
|
7997
|
+
"severity": "critical",
|
|
7998
|
+
"atOrAbove": "10.0.0",
|
|
7999
|
+
"cwe": [
|
|
8000
|
+
"CWE-1395"
|
|
8001
|
+
],
|
|
8002
|
+
"identifiers": {
|
|
8003
|
+
"githubID": "GHSA-2XP9-VWFH-VXW4"
|
|
8004
|
+
}
|
|
8005
|
+
},
|
|
8006
|
+
{
|
|
8007
|
+
"below": "15.5.24",
|
|
8008
|
+
"severity": "critical",
|
|
8009
|
+
"atOrAbove": "13.4.0",
|
|
8010
|
+
"cwe": [
|
|
8011
|
+
"CWE-22"
|
|
8012
|
+
],
|
|
8013
|
+
"identifiers": {
|
|
8014
|
+
"CVE": [
|
|
8015
|
+
"CVE-2026-75604"
|
|
8016
|
+
],
|
|
8017
|
+
"githubID": "GHSA-P293-QW3H-JR36"
|
|
8018
|
+
}
|
|
8019
|
+
},
|
|
7743
8020
|
{
|
|
7744
8021
|
"below": "15.6.0-canary.59",
|
|
7745
8022
|
"severity": "high",
|
|
@@ -8336,6 +8613,42 @@ const RETIRE_BROWSER_CATALOG = Object.freeze({
|
|
|
8336
8613
|
],
|
|
8337
8614
|
"githubID": "GHSA-Q8WF-6R8G-63CH"
|
|
8338
8615
|
}
|
|
8616
|
+
},
|
|
8617
|
+
{
|
|
8618
|
+
"below": "16.3.3",
|
|
8619
|
+
"severity": "critical",
|
|
8620
|
+
"atOrAbove": "16.0.0",
|
|
8621
|
+
"cwe": [
|
|
8622
|
+
"CWE-1395"
|
|
8623
|
+
],
|
|
8624
|
+
"identifiers": {
|
|
8625
|
+
"githubID": "GHSA-2XP9-VWFH-VXW4"
|
|
8626
|
+
}
|
|
8627
|
+
},
|
|
8628
|
+
{
|
|
8629
|
+
"below": "16.3.3",
|
|
8630
|
+
"severity": "critical",
|
|
8631
|
+
"atOrAbove": "16.0.0",
|
|
8632
|
+
"cwe": [
|
|
8633
|
+
"CWE-22"
|
|
8634
|
+
],
|
|
8635
|
+
"identifiers": {
|
|
8636
|
+
"CVE": [
|
|
8637
|
+
"CVE-2026-75604"
|
|
8638
|
+
],
|
|
8639
|
+
"githubID": "GHSA-P293-QW3H-JR36"
|
|
8640
|
+
}
|
|
8641
|
+
},
|
|
8642
|
+
{
|
|
8643
|
+
"below": "16.3.6",
|
|
8644
|
+
"severity": "critical",
|
|
8645
|
+
"atOrAbove": "16.2.0",
|
|
8646
|
+
"cwe": [
|
|
8647
|
+
"CWE-1395"
|
|
8648
|
+
],
|
|
8649
|
+
"identifiers": {
|
|
8650
|
+
"githubID": "GHSA-VCVR-R3JV-PC5J"
|
|
8651
|
+
}
|
|
8339
8652
|
}
|
|
8340
8653
|
]
|
|
8341
8654
|
},
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// Generated by tools/unicode-confusable-audit.mts from the pinned Unicode
|
|
2
2
|
// UTS #39 data file. Do not edit this projection by hand.
|
|
3
|
-
export const GENERATED_CONFUSABLE_MAPPING_VERSION = "tr39-
|
|
3
|
+
export const GENERATED_CONFUSABLE_MAPPING_VERSION = "tr39-18.0.0-bounded-ascii-v3";
|
|
4
4
|
export const GENERATED_CONFUSABLE_SOURCE = Object.freeze({
|
|
5
5
|
"standard": "Unicode UTS #39",
|
|
6
|
-
"unicodeVersion": "
|
|
7
|
-
"url": "https://www.unicode.org/Public/
|
|
8
|
-
"sha256": "
|
|
6
|
+
"unicodeVersion": "18.0.0",
|
|
7
|
+
"url": "https://www.unicode.org/Public/18.0.0/security/confusables.txt",
|
|
8
|
+
"sha256": "6ed3ee967c9dfdf6677d563c9985182fbc50a2efb7d6059cd57b2e2ce18f5b92",
|
|
9
9
|
"license": "Unicode-3.0"
|
|
10
10
|
});
|
|
11
11
|
export const GENERATED_CONFUSABLE_POLICY = Object.freeze({
|
|
@@ -24,33 +24,33 @@ export const GENERATED_CONFUSABLE_POLICY = Object.freeze({
|
|
|
24
24
|
"totalMappings": 312
|
|
25
25
|
});
|
|
26
26
|
export const GENERATED_CONFUSABLE_STATS = Object.freeze({
|
|
27
|
-
"sourceBytes":
|
|
28
|
-
"sourceLines":
|
|
29
|
-
"parsedMappings":
|
|
30
|
-
"eligibleMappings":
|
|
31
|
-
"projectedMappings":
|
|
32
|
-
"generationMappings":
|
|
27
|
+
"sourceBytes": 763128,
|
|
28
|
+
"sourceLines": 9863,
|
|
29
|
+
"parsedMappings": 6712,
|
|
30
|
+
"eligibleMappings": 255,
|
|
31
|
+
"projectedMappings": 126,
|
|
32
|
+
"generationMappings": 115,
|
|
33
33
|
"rejectedMalformedLines": 0,
|
|
34
|
-
"rejectedOutsidePolicy":
|
|
34
|
+
"rejectedOutsidePolicy": 5780,
|
|
35
35
|
"skeletonCapHits": 0,
|
|
36
|
-
"generationCapHits":
|
|
36
|
+
"generationCapHits": 4
|
|
37
37
|
});
|
|
38
38
|
export const GENERATED_CONFUSABLE_GROUPS = Object.freeze({
|
|
39
|
-
a: "
|
|
40
|
-
b: "
|
|
41
|
-
c: "
|
|
42
|
-
d: "
|
|
39
|
+
a: "аαɑꭤ",
|
|
40
|
+
b: "ьƄ𝈇",
|
|
41
|
+
c: "сϲⅽᴄⲥ𐐽ᲃ",
|
|
42
|
+
d: "ԁⅾꓒ𐆋",
|
|
43
43
|
e: "еεҽꬲ",
|
|
44
|
-
f: "
|
|
44
|
+
f: "ϝꞙƒʄẝꬵ𐅾ք",
|
|
45
45
|
g: "ɡƍᶃց",
|
|
46
46
|
h: "һհ",
|
|
47
47
|
i: "іιıɪɩⲓꙇւ",
|
|
48
|
-
j: "
|
|
48
|
+
j: "јϳȷյ",
|
|
49
49
|
k: "κк",
|
|
50
|
-
l: "
|
|
51
|
-
m: "
|
|
50
|
+
l: "ӏⅼǀꓲꞁꟾ",
|
|
51
|
+
m: "мⅿՠ",
|
|
52
52
|
n: "ոռ",
|
|
53
|
-
o: "
|
|
53
|
+
o: "оοօᴏⲟᴑꬽᲂσϭ𐐬",
|
|
54
54
|
p: "рρϱⲣþƿϸⳏ",
|
|
55
55
|
q: "ԛգզ",
|
|
56
56
|
r: "гꭇꭈᴦⲅ",
|
|
@@ -58,25 +58,25 @@ export const GENERATED_CONFUSABLE_GROUPS = Object.freeze({
|
|
|
58
58
|
t: "тτ",
|
|
59
59
|
u: "υսᴜꭎʋꞟꭒ",
|
|
60
60
|
v: "ѵνᴠ",
|
|
61
|
-
w: "
|
|
61
|
+
w: "ԝաᴡшɯꟺѡⲽ",
|
|
62
62
|
x: "хχ",
|
|
63
63
|
y: "уүʏγⲩɣᶌỿꭚ",
|
|
64
|
-
z: "
|
|
64
|
+
z: "ᴢⱬⲍ",
|
|
65
65
|
});
|
|
66
66
|
export const GENERATED_GENERATION_CONFUSABLE_GROUPS = Object.freeze({
|
|
67
|
-
a: "
|
|
68
|
-
b: "
|
|
69
|
-
c: "
|
|
70
|
-
d: "
|
|
67
|
+
a: "аαɑꭤ",
|
|
68
|
+
b: "ь𝈇",
|
|
69
|
+
c: "сᴄⲥ𐐽ᲃ",
|
|
70
|
+
d: "ԁꓒ𐆋",
|
|
71
71
|
e: "еεҽꬲ",
|
|
72
|
-
f: "
|
|
72
|
+
f: "ϝꞙƒʄẝꬵ𐅾ք",
|
|
73
73
|
g: "ɡƍᶃց",
|
|
74
74
|
h: "һհ",
|
|
75
75
|
i: "іιıɪɩⲓꙇւ",
|
|
76
|
-
j: "
|
|
76
|
+
j: "јϳȷյ",
|
|
77
77
|
k: "κк",
|
|
78
|
-
l: "
|
|
79
|
-
m: "
|
|
78
|
+
l: "ӏǀꓲꞁꟾ",
|
|
79
|
+
m: "мՠ",
|
|
80
80
|
n: "ոռ",
|
|
81
81
|
o: "оοօᴏⲟᴑꬽσ",
|
|
82
82
|
p: "рρⲣþƿϸⳏ",
|
|
@@ -86,8 +86,8 @@ export const GENERATED_GENERATION_CONFUSABLE_GROUPS = Object.freeze({
|
|
|
86
86
|
t: "тτ",
|
|
87
87
|
u: "υսᴜꭎʋꞟꭒ",
|
|
88
88
|
v: "ѵνᴠ",
|
|
89
|
-
w: "
|
|
89
|
+
w: "ԝաᴡшɯꟺѡⲽ",
|
|
90
90
|
x: "хχ",
|
|
91
91
|
y: "уүʏγⲩɣᶌỿ",
|
|
92
|
-
z: "
|
|
92
|
+
z: "ᴢⱬⲍ",
|
|
93
93
|
});
|
package/lib/html-signals.mjs
CHANGED
|
@@ -6,6 +6,8 @@
|
|
|
6
6
|
import { isIP } from 'node:net';
|
|
7
7
|
import { domainToASCII } from 'node:url';
|
|
8
8
|
import { analyzeCredentialSurfaceProfile } from "./credential-surface-profile.mjs";
|
|
9
|
+
import { attributeCredentialForms } from "./credential-form-attribution.mjs";
|
|
10
|
+
import { externalPasswordFormObservation } from "../packages/evidence/credential-form-attribution.mjs";
|
|
9
11
|
import { analyzeClientBehavior } from "./client-behavior-profile.mjs";
|
|
10
12
|
import { createObservation } from "../packages/evidence/observation.mjs";
|
|
11
13
|
import { createPageFingerprints } from "./page-fingerprints.mjs";
|
|
@@ -280,6 +282,7 @@ function extractPageRelationships(analysis, domain, options = {}) {
|
|
|
280
282
|
let downloadFileTypeLimitReached = false;
|
|
281
283
|
let perTagLimitReached = false;
|
|
282
284
|
let resourceCountLimitReached = false;
|
|
285
|
+
let resourceIdentityTruncated = false;
|
|
283
286
|
for (const element of analysis.elements) {
|
|
284
287
|
if (!element.html || !RELATIONSHIP_TAGS.has(element.name))
|
|
285
288
|
continue;
|
|
@@ -337,6 +340,8 @@ function extractPageRelationships(analysis, domain, options = {}) {
|
|
|
337
340
|
discardedUrls += 1;
|
|
338
341
|
continue;
|
|
339
342
|
}
|
|
343
|
+
if (normalized.pathTruncated)
|
|
344
|
+
resourceIdentityTruncated = true;
|
|
340
345
|
const key = `${reference.type}:${normalized.url}`;
|
|
341
346
|
if (!resourceKeys.has(key)) {
|
|
342
347
|
if (resourceKeys.size >= MAX_RESOURCE_TAGS) {
|
|
@@ -362,7 +367,7 @@ function extractPageRelationships(analysis, domain, options = {}) {
|
|
|
362
367
|
tracking.truncated = true;
|
|
363
368
|
const truncated = tagLimitReached || resourceOriginLimitReached || embeddedOriginLimitReached
|
|
364
369
|
|| contactDomainLimitReached || downloadOriginLimitReached || downloadFileTypeLimitReached
|
|
365
|
-
|| perTagLimitReached || resourceCountLimitReached || tracking.truncated;
|
|
370
|
+
|| perTagLimitReached || resourceCountLimitReached || resourceIdentityTruncated || tracking.truncated;
|
|
366
371
|
const limitations = [];
|
|
367
372
|
if (tagLimitReached)
|
|
368
373
|
limitations.push(`Resource parsing reached the ${MAX_RESOURCE_TAGS}-tag or ${MAX_IDENTITY_TAG_LENGTH}-character tag limit.`);
|
|
@@ -380,6 +385,8 @@ function extractPageRelationships(analysis, domain, options = {}) {
|
|
|
380
385
|
limitations.push(`Some srcset URL candidates could not be safely enumerated within the ${MAX_URLS_PER_TAG}-candidate per-tag boundary.`);
|
|
381
386
|
if (resourceCountLimitReached)
|
|
382
387
|
limitations.push(`Only the first ${MAX_RESOURCE_TAGS} distinct resource references were examined.`);
|
|
388
|
+
if (resourceIdentityTruncated)
|
|
389
|
+
limitations.push('Overlong resource paths were reduced to origins; distinct resource counts may be incomplete.');
|
|
383
390
|
if (tracking.truncated)
|
|
384
391
|
limitations.push(`Only the first ${MAX_TRACKING_IDENTIFIERS} tracking identifiers were retained.`);
|
|
385
392
|
return {
|
|
@@ -387,7 +394,7 @@ function extractPageRelationships(analysis, domain, options = {}) {
|
|
|
387
394
|
count: resourceKeys.size,
|
|
388
395
|
byType,
|
|
389
396
|
externalOrigins: [...resourceOrigins].sort(),
|
|
390
|
-
truncated: tagLimitReached || resourceOriginLimitReached || perTagLimitReached || resourceCountLimitReached,
|
|
397
|
+
truncated: tagLimitReached || resourceOriginLimitReached || perTagLimitReached || resourceCountLimitReached || resourceIdentityTruncated,
|
|
391
398
|
},
|
|
392
399
|
embeddedOrigins: [...embeddedOrigins].sort(),
|
|
393
400
|
contactDomains: [...contactDomains].sort(),
|
|
@@ -714,10 +721,12 @@ async function extractHtmlSignals(html, domain, options = {}) {
|
|
|
714
721
|
const pageLanguageSignal = detectPageLanguageSignal(html, pageIdentity?.documentLanguage, htmlAnalysis);
|
|
715
722
|
const domainSaleSignal = options.sourceTruncated !== true && domainSaleLandingPage(htmlAnalysis, domain)
|
|
716
723
|
? 'explicit domain-sale landing-page content' : null;
|
|
724
|
+
const formAttribution = attributeCredentialForms(htmlAnalysis, documentUrl, options.sourceTruncated);
|
|
717
725
|
return {
|
|
718
726
|
domainSaleSignal,
|
|
719
727
|
pageTitle: htmlAnalysis.title,
|
|
720
728
|
hasPasswordField: htmlAnalysis.forms.categories.password > 0,
|
|
729
|
+
hasExternalPasswordForm: externalPasswordFormObservation(formAttribution),
|
|
721
730
|
phishingLanguageMatch: pageLanguageSignal?.label ?? null,
|
|
722
731
|
hasExternalFormAction: pageIdentity
|
|
723
732
|
? pageIdentity.forms.externalActionOrigins.length > 0
|
|
@@ -727,6 +736,8 @@ async function extractHtmlSignals(html, domain, options = {}) {
|
|
|
727
736
|
pageIdentity: pageIdentityOutput,
|
|
728
737
|
credentialSurfaceProfile: includeCredentialSurfaceProfile && htmlAnalysis ? analyzeCredentialSurfaceProfile({
|
|
729
738
|
htmlAnalysis,
|
|
739
|
+
formAttribution,
|
|
740
|
+
baseUrl: documentUrl,
|
|
730
741
|
observedAt: options.observedAt,
|
|
731
742
|
sourceTruncated: options.sourceTruncated,
|
|
732
743
|
}) : null,
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
//
|
|
2
|
-
|
|
3
|
-
// so valid retained evidence is not rejected by a stale projection.
|
|
4
|
-
import { MAX_OUTBOUND_HTTP_URL_CHARACTERS } from "../packages/contracts/http-url.mjs";
|
|
5
|
-
export const MAX_HTTP_EVIDENCE_REDIRECTS = 5;
|
|
6
|
-
export const MAX_HTTP_ATTEMPTS = 2;
|
|
7
|
-
export const MAX_HTTP_PROVENANCE_URL = MAX_OUTBOUND_HTTP_URL_CHARACTERS;
|
|
8
|
-
export const MAX_HTTP_ERROR_LENGTH = 180;
|
|
1
|
+
// Retained public import; the runtime-neutral implementation lives in the domain layer.
|
|
2
|
+
export * from "../packages/analysis/http-evidence-bounds.mjs";
|
|
@@ -4,8 +4,20 @@
|
|
|
4
4
|
// additive evidence object suitable for API responses and exports.
|
|
5
5
|
import { createObservation } from "../packages/evidence/observation.mjs";
|
|
6
6
|
import { MAX_OUTBOUND_HTTP_URL_CHARACTERS } from "../packages/contracts/http-url.mjs";
|
|
7
|
-
import { MAX_HTTP_ATTEMPTS, MAX_HTTP_ERROR_LENGTH, MAX_HTTP_EVIDENCE_REDIRECTS, MAX_HTTP_PROVENANCE_URL, } from "
|
|
7
|
+
import { MAX_HTTP_ATTEMPTS, MAX_HTTP_ERROR_LENGTH, MAX_HTTP_EVIDENCE_REDIRECTS, MAX_HTTP_PROVENANCE_URL, } from "../packages/analysis/http-evidence-bounds.mjs";
|
|
8
8
|
import { HTTP_DELIVERY_LIMITATIONS, HTTP_DELIVERY_METADATA_VERSION, MAX_HTTP_CACHE_SECONDS, MAX_HTTP_DELIVERY_HEADER_BYTES, MAX_HTTP_DELIVERY_TOKENS, } from "./homepage-metadata-contract.mjs";
|
|
9
|
+
/** Publish delivery metadata only at its owning response boundary. */
|
|
10
|
+
export function withoutHttpDeliveryMetadata(value) {
|
|
11
|
+
if (!value || typeof value !== 'object' || Array.isArray(value))
|
|
12
|
+
return value;
|
|
13
|
+
const output = { ...value };
|
|
14
|
+
if (output.response && typeof output.response === 'object' && !Array.isArray(output.response)) {
|
|
15
|
+
const response = { ...output.response };
|
|
16
|
+
delete response.deliveryMetadata;
|
|
17
|
+
output.response = response;
|
|
18
|
+
}
|
|
19
|
+
return output;
|
|
20
|
+
}
|
|
9
21
|
const MAX_HTTP_REDIRECTS = MAX_HTTP_EVIDENCE_REDIRECTS;
|
|
10
22
|
const MAX_HTTP_HEADER_LENGTH = 1024;
|
|
11
23
|
const MAX_HTTP_DELIVERY_HEADER_LENGTH = MAX_HTTP_DELIVERY_HEADER_BYTES;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
// Versioned policy for projecting the Unicode UTS #39 confusables data into
|
|
2
2
|
// WHOISleuth's intentionally small domain-label mapping. The full upstream
|
|
3
3
|
// table is never shipped to browsers or consulted at runtime.
|
|
4
|
-
export const UNICODE_CONFUSABLE_DATA_VERSION = '
|
|
5
|
-
export const UNICODE_CONFUSABLE_SOURCE_URL =
|
|
6
|
-
export const UNICODE_CONFUSABLE_SOURCE_SHA256 = '
|
|
4
|
+
export const UNICODE_CONFUSABLE_DATA_VERSION = '18.0.0';
|
|
5
|
+
export const UNICODE_CONFUSABLE_SOURCE_URL = `https://www.unicode.org/Public/${UNICODE_CONFUSABLE_DATA_VERSION}/security/confusables.txt`;
|
|
6
|
+
export const UNICODE_CONFUSABLE_SOURCE_SHA256 = '6ed3ee967c9dfdf6677d563c9985182fbc50a2efb7d6059cd57b2e2ce18f5b92';
|
|
7
7
|
export const UNICODE_CONFUSABLE_LICENSE = 'Unicode-3.0';
|
|
8
8
|
export const CONFUSABLE_PROJECTION_SCHEMA = 'whoisleuth.unicode-confusable-projection';
|
|
9
9
|
export const CONFUSABLE_PROJECTION_VERSION = 1;
|
|
@@ -71,7 +71,9 @@ export const REVIEWED_GENERATION_CONFUSABLES = Object.freeze({
|
|
|
71
71
|
l: 'ӏǀꓲ',
|
|
72
72
|
m: 'м',
|
|
73
73
|
n: 'ոռ',
|
|
74
|
-
o
|
|
74
|
+
// Keep the complete previously generated o-set when newer source mappings
|
|
75
|
+
// compete for the same bounded generation slots.
|
|
76
|
+
o: 'оοօᴏⲟᴑꬽσ',
|
|
75
77
|
p: 'рρⲣ',
|
|
76
78
|
q: 'ԛգզ',
|
|
77
79
|
r: 'гꭇ',
|
package/lib/idn-confusables.mjs
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
// bounded projection of Unicode Technical Standard #39 data plus the existing
|
|
5
5
|
// reviewed compatibility set. It focuses on characters that visually collapse
|
|
6
6
|
// to common ASCII domain-label characters.
|
|
7
|
-
import { GENERATED_CONFUSABLE_GROUPS, GENERATED_CONFUSABLE_MAPPING_VERSION, GENERATED_GENERATION_CONFUSABLE_GROUPS, } from "./generated/unicode-confusables
|
|
7
|
+
import { GENERATED_CONFUSABLE_GROUPS, GENERATED_CONFUSABLE_MAPPING_VERSION, GENERATED_GENERATION_CONFUSABLE_GROUPS, } from "./generated/unicode-confusables.mjs";
|
|
8
8
|
import { MAX_GENERATION_CONFUSABLES_PER_ASCII, REVIEWED_GENERATION_CONFUSABLES, } from "./idn-confusable-policy.mjs";
|
|
9
9
|
export const IDN_ANALYSIS_VERSION = 1;
|
|
10
10
|
export const CONFUSABLE_MAPPING_VERSION = GENERATED_CONFUSABLE_MAPPING_VERSION;
|