Skip to content

z0rats/corvid

 
 

Repository files navigation

Corvid

CI codecov OpenSSF Scorecard

One search bar for everything you look up today

If your daily routine is a wall of browser tabs — VirusTotal in one, Shodan in another, three more for a username or a phishing domain — Corvid replaces that wall with a single keyboard-first search bar. Paste an IP, domain, hash, email, or username and it's routed to the right tools automatically; type a tool name to jump straight to it.

Corvid is self-hostable and built for single-user operation: it runs in one Docker container on your own infrastructure, so investigation data and API keys never pass through a third-party SaaS. It's a workbench, not a data warehouse — no long-term case management, just fast, on-demand IOC lookups, email/image forensics, phishing-domain discovery, identity correlation (Reddit, GitHub, usernames), and detection-rule authoring, with generative AI wired in to speed up analysis and write-ups along the way.

curl -fsSL https://raw.githubusercontent.com/z0rats/corvid/main/install.sh | bash

Pulls pre-built images and starts the app at http://localhost:4000 — no auto-update, see Deploy with docker for details and the build-from-source alternative.

Contents

Integrated services

IOC lookups auto-route to the right services based on the type you paste in:

  • IPs — AbuseIPDB, AlienVault, CheckPhish.ai, CrowdSec, GitHub, IPQualityScore, Maltiverse, Pulsedive, Reddit, Shodan, ThreatFox, Twitter/X, VirusTotal
  • Domains — AlienVault, CheckPhish.ai, GitHub, Maltiverse, Pulsedive, Reddit, Shodan, ThreatFox, Twitter/X, URLScan, VirusTotal
  • URLs — AlienVault, CheckPhish.ai, GitHub, Google Safe Browsing, Maltiverse, Pulsedive, Reddit, Shodan, ThreatFox, Twitter/X, URLScan, VirusTotal
  • Emails — Emailrep.io, GitHub, Have I Been Pwned, Hunter.io, Reddit, Twitter/X
  • Hashes — AlienVault, GitHub, Maltiverse, Pulsedive, Reddit, ThreatFox, Twitter/X, VirusTotal
  • CVEs — GitHub, NIST NVD
  • Crypto addresses (EVM & Bitcoin) — screened against a self-hosted blacklist built from the OFAC SDN sanctions list and ScamSniffer's open phishing-address dataset, refreshed daily in the background; no API key or third-party calls required

Features

Newsfeed

The Newsfeed module keeps you up to date about the latest cybersecurity news by aggregating articles from trusted sources such as Wired, The Hacker News, Security Magazine, Threatpost, TechCrunch Security, and Dark Reading. Stay up-to-date with industry trends and potential threats without having to visit multiple websites or subscribe to numerous newsletters. The module extracts IOCs automatically from the news articles and lets you analyze news in no time using AI. newsfeed

IOC Tools

The IOC Tools module helps you analyze different types of indicators of compromise (IOCs) such as IP addresses, hashes, email addresses, domains, URLs, and crypto addresses (EVM and Bitcoin). It leverages services like VirusTotal, AlienVault, AbuseIPDB, and social media platforms like Reddit and Twitter to gather information about the IOCs. Crypto addresses are screened against a self-hosted reputation blacklist built from the OFAC SDN sanctions list and ScamSniffer's open phishing-address dataset, refreshed daily — no API key or third-party calls needed for this check. The module automatically detects the type of IOC being analyzed and utilizes the appropriate services to provide relevant information, enabling you to identify potential threats and take necessary actions to protect your organization. Analysis can be done individual per IOC or in bulk. Also fanging and defanging is possible for sharing IOCs safely. ioc_lookup

Email Analyzer

The Email Analyzer module allows you to analyze .eml files for potential threats. Simply drag and drop an .eml file into the module, and it will parse the file, perform basic security checks, extract indicators of compromise (IOCs), and analyze messages with the help of AI. Analyze the IOCs using various open-source intelligence (OSINT) services, and enhance your organization's email security.

Image Tools

The Image Tools module lets you inspect an image file for OSINT purposes. Upload a picture to see every piece of metadata it carries — EXIF camera/device info, capture timestamp, GPS location with a map link, embedded thumbnail, file properties, and MD5/SHA1/SHA256 hashes. You can also kick off a reverse image search without any API keys: provide the image's URL to get deep links straight into Google Lens, Yandex, Bing, and TinEye, or use the same buttons to open each engine for a manual upload.

Domain Finder

The Domain Finder module helps you to protect your organization from phishing attacks by searching for recently registered domains that match specific patterns. By utilizing the URLScan.io API, you can view screenshots of websites associated with domains without visiting them directly. Additionally, you can check each domain and its resolved IP against multiple threat intelligence services, further enhancing your organization's security.

AI Templates

The AI Templates module provides powerful AI-based solutions for log data analysis, email text analysis, and source code explanation. It lets you create templates for AI tasks and supports you in the prompt engineering process. ai_templates

CVSS Calculator

The CVSS Calculator module allows you to calculate the CVSS 3.1 score of a vulnerability and export the calculation as a markdown or JSON file.

Detection Rules

The Detection Rules module is a GUI for creating Sigma, Yara and Snort/Suricate rules.

Reddit Search

The Reddit Search module finds a Reddit user's full post and comment history, including content removed by moderators or deleted by its author, by querying the public Arctic Shift and PullPush archive APIs in parallel — no API key required. Filter by subreddit, date range, or NSFW status, and page through results by post or comment. Each search is saved to history so you can revisit it later.

Git Recon

The Git Recon module correlates names, emails, and GitHub logins from git commit history using gitcolombo. Search mode queries GitHub's API only (PGP-key UIDs + public commit search) for a username, no cloning required. Repo/user modes clone one repository or every public repository of a GitHub user/org and cross-reference author vs. committer identities to surface aliases and shared-identity clusters. A GitHub personal access token (configured under Settings > API Keys) is optional but recommended to avoid unauthenticated GitHub rate limits.

Keyboard-first navigation

Corvid is built around a single search bar instead of hunting through menus. Press / or ⌘K/Ctrl+K from anywhere to open it, then:

  • Type a tool's name — reddit, git recon, whois — to jump straight to it.
  • Paste a raw value — an IP, domain, e-mail, hash, CVE ID, or crypto address — and Corvid suggests which tools can look it up.
  • Add a tool name after a value (john_doe reddit) to open that tool with the value already filled in.
  • Filter with #tag (#recon, #ioc) or type:kind (type:email).
  • Prefix > for quick actions (>settings, >theme).
  • defang <value> / fang <value> copies a de-fanged/re-fanged IOC straight to your clipboard — nothing to open.
  • Paste an image (⌘V/Ctrl+V) to jump into Image Tools with it already loaded.

No keyboard handy? The panel on the left lists every tool, grouped the same way the search tags do — click through instead of typing.

Press ? any time for the full shortcut list.

Deploy with docker

System requirements

  • Docker Engine 24+ with the Docker Compose v2 plugin (the docker compose command, not the legacy standalone docker-compose binary)
  • Linux, macOS, or Windows (via Docker Desktop/WSL2)
  • At least ~1 GB free disk for the app itself; more if you enable email_search's optional headless checkers, which lazily download a Chromium binary (~150-300 MB) on first use — see Disk usage below
  • Outbound HTTPS access for the third-party services you configure (VirusTotal, Shodan, etc.) — no inbound ports need to be exposed
  • No GPU or special hardware needed. CPU/RAM haven't been formally benchmarked, but as a single-user tool with no background crawling by default, it's light — a small VM (1-2 vCPU, 2 GB RAM) is comfortable for typical use

Install

Option A — one-line install (pre-built images). Pulls ready-made images from GHCR instead of building from source. Installs into ~/corvid by default (override with CORVID_DIR):

curl -fsSL https://raw.githubusercontent.com/z0rats/corvid/main/install.sh | bash

Once it's running, open http://localhost:4000. There's no auto-update — new versions aren't pulled without your say-so. To update later, run ./update.sh from the install directory (it pulls the latest images and recreates the containers).

Option B — build from source. Gives you a local build instead of pulling from a registry, and lets you review the Dockerfiles before anything runs:

  1. Download the repository and extract the files
  2. Navigate to the directory where the docker-compose.yaml file is located
  3. Start the application:
    • make up — start backend and frontend without rebuilding
    • make rebuild — rebuild images (e.g. after dependency or Dockerfile changes) and start
    • make up-backend / make up-frontend — start a single service without rebuilding
    • make rebuild-backend / make rebuild-frontend — rebuild and start a single service
  4. Once the container is running, you can access the application in your browser at http://localhost:4000

Database migrations run automatically on container startup — no manual step needed after make rebuild. If you need to run one by hand (e.g. to check for pending migrations without starting the app), you can still run: docker compose run --rm backend alembic upgrade head

Access token

The app has no user accounts, so it's protected by a single access token instead of a login form. On first startup, a token is generated automatically and printed to the backend logs (docker compose logs backend) and saved to data/.access_token on the host. Open http://localhost:4000, and you'll be asked to paste that token once — it's then remembered in the browser.

To set your own fixed token instead of the auto-generated one, set API_ACCESS_TOKEN in .env before starting the container.

Configuration

Copy .env.example to .env to override any setting (all of them have working defaults, so this is optional). .env is read automatically by docker compose up.

Backup

Show details

Everything Corvid needs to keep running lives under the host-mounted data/ directory — back it up as a whole (stop the container first for a consistent SQLite snapshot, or use sqlite3 .backup for a live one):

  • data/corvid.db — the SQLite database: investigation history, settings, and encrypted API keys.
  • data/.encryption_key — decrypts the API keys stored in the database. Losing this file makes stored keys unrecoverable even though the database itself is intact; re-entering the keys is the only fix.
  • data/.access_token — the bearer token protecting the app. Losing it isn't a data-loss risk — a new one is generated on next startup and you just re-enter it in the browser.
  • data/logs/ — optional, rotated application logs.

Losing data/ entirely means starting over from a blank instance; there is no other durable state.

Permissions travel with the backup. .encryption_key and .access_token are written 0600 on the host, but that only protects them in place. A backup method that doesn't preserve file modes/ownership (a permissive tar extraction, copying into a world-readable cloud-sync folder, chmod -R during restore) — or that lands the backup somewhere with broader access than the source host — defeats the encryption-at-rest story: the key ends up sitting right next to the ciphertext it decrypts. Preserve permissions in transit (tar --preserve-permissions, rsync -a) and restrict access to the backup destination at least as tightly as data/ itself.

Disk usage

Show details

data/ has no total-size guard, so keep an eye on the host mount over time. Rough steady-state contributors: the SQLite database and rotated logs stay small (tens of MB); maigret's site database and its own image-hash cache add tens of MB; email_search's headless checkers (if enabled) lazily download a Chromium binary the first time they run (~150-300 MB, plus its own runtime footprint); exported reports accumulate if you generate a lot of them and never clean up. The backend logs a warning at startup (and the disk field in GET /api/healthcheck/detailed reports "status": "low") once free space on the data/ mount drops below 1 GB, but nothing actively stops writes past that point — treat it as an early signal, not a hard limit.

Operational security notes

Show details

This tool talks to third-party services (VirusTotal, Shodan, target mail servers via email_search's SMTP checks, etc.) using your own infrastructure's IP, and stores investigation history in a local database. Some practices worth following, especially for sensitive engagements:

  • Isolate the instance. Run it on a dedicated VM/VPS or an isolated host, not your daily-driver machine — a target under investigation can potentially see inbound lookups against them.
  • Route sensitive lookups through Tor/a proxy. email_search supports use_tor/proxy_url, and username_search's maigret source has its own proxy setting, for when a target could plausibly monitor who's probing them.
  • Never enable SECURITY_ALLOW_PRIVATE_NETWORK_TARGETS outside dev/testing — it's a direct SSRF opt-out.
  • Segment and rotate API keys per engagement where the provider supports multiple keys, so a compromised key from one case doesn't expose others.
  • Don't cross-contaminate identities. Some features (e.g. Image Tools' reverse-search deep-links) open external services directly in your browser — use a separate, logged-out browser profile for sensitive lookups so they don't tie back to your personal accounts.

Disclaimer

Corvid is a tool, not a policy — how you point it is on you. It's built for legitimate use cases: internal security teams triaging IOCs, threat intel analysts enriching indicators, researchers investigating abuse, and similar authorized work. It is not built for stalking, harassment, unauthorized surveillance, or investigating people without a lawful basis for doing so.

Several modules (Reddit Search, Git Recon, Image Tools' reverse-search, email/username lookups) pull together data that's technically public but can still identify or locate a real person when combined. Before running them against an individual rather than an IOC or organization, make sure you have a legitimate basis to do so and that it complies with the laws of your jurisdiction and the target's (data protection/privacy law, computer-misuse law, and your organization's own policies, at minimum). Some integrated services carry their own terms of use and rate limits that are yours to respect — Corvid doesn't police that for you.

None of this constitutes legal advice, and the author takes no responsibility for how the tool ends up being used. When in doubt, check with your legal/compliance function before running an investigation, not after.

License

Corvid is licensed under the GNU Affero General Public License v3.0.

You are free to use, modify, and distribute this software, provided that any modified versions or services built on it are also made available under AGPL-3.0, including when offered as a network service.

Commercial Licensing

If AGPL-3.0 doesn't fit your use case — for example, if you want to integrate Corvid into a proprietary product or offer it as a managed service without open-sourcing your modifications — a commercial license is available.

Contact: [z0rats.alex@gmail.com]

Prior Versions

Versions up to and including v0.1.0 were released under the MIT License and remain available under those terms.

About

Self-hosted OSINT workbench with one keyboard-first search bar for IOC, email, domain, and identity lookups — single Docker container, your own API keys.

Topics

Resources

Security policy

Stars

Watchers

Forks

Releases

Sponsor this project

Packages

Contributors

Languages