feat(tools): add scanmalware_search (keyless ScanMalware scan archive lookup) - #325
Open
jonaslejon wants to merge 1 commit into
Open
jonaslejon wants to merge 1 commit into
jonaslejon wants to merge 1 commit into
Conversation
Keyless lookups against the public ScanMalware API: verdicts for a domain or exact URL, passive subdomains, IP context and SMQL search. Disabled by default like the other search tools, since lookups are sent to a third party.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
摘要
新增
tools/scanmalware_search.yaml:查询 ScanMalware 公开扫描归档,无需 API Key。支持 5 种模式:domain、url、ip、subdomains、smql。与其他*_search工具一致,默认enabled: false。披露:我是 ScanMalware(瑞典 Triop AB)的开发者。
Summary
Adds one file,
tools/scanmalware_search.yaml, a read-only lookup tool for the public ScanMalware scan archive (https://scanmalware.com). ScanMalware renders submitted URLs in a sandboxed browser and indexes each scan (phishing and malware verdicts, network requests, TLS/JARM, favicon hash, technologies, screenshots) for search. The tool only reads the archive; it never submits a scan.Disclosure: I run ScanMalware (Triop AB, Sweden).
No API key. Unlike the other
*_searchtools (fofa_search,zoomeye_search,quake_search,shodan_search,virustotal_search), it works on a fresh install with nothing to configure. The anonymous rate limit is 600 requests/minute. To check:domainurlipsubdomainssmqljarm:,favicon_hash:,asn:,technology:,ocr:Design notes
matched_onincludesurl). Scans that merely redirected to the host are listed separately with no verdict, andurlmode never applies another page's verdict from the same host.lowis reported asno_findings, never as safe.malicious,highandcriticalmap tomalicious. If the newest scan was not assessed (for example the page never loaded) it is skipped in favour of an older assessed one, and an unrecognised risk level is returned as-is rather than guessed.enabled: falseby default, like the other search tools. Since this one needs no key, the reason is privacy rather than configuration: lookups send the queried domain, URL or IP to scanmalware.com. The API's own/hostsresponse documents astreamsource for hostnames that were queried against it and resolve in public DNS, so the tool description tells users not to look up targets that must stay private.flagformat parsed with argparse, ashttp-framework-test.yamldoes, andtargetusescombined(--target=...) so an SMQL query that starts with-is not read as an option.scanmalware-cyberstrikeai/1.0. The only dependency isrequests, already inrequirements.txt.Testing
config.LoadToolsFromDir("tools")(91 tools, no warnings) and called throughmcp.Server.CallToolandExecutor.ExecuteToolwith the tool enabled, against the live API, for all five modes, plus an input the API rejects (localhost, returned asisError) and a call missing the requiredmode(the executor's own error).go build ./...,go vet ./internal/config ./internal/security,go test ./internal/config ./internal/security ./internal/handler ./internal/mcpandgo test -race ./internal/processguard ./internal/runleasepass on Go 1.25.0. The repository's workflow path filter does not includetools/, so no CI runs on this PR.I left
README.mdandREADME_CN.mdunchanged to keep this to one file. Happy to addscanmalware_searchto the tool list there, or to the threat-intelligence group ininternal/workflow/draft_generator.go, if you would like.