A modular tool to search for known vulnerabilities, exploits and more across various data sources.
About · Quick Links · Modules · Installation · Usage · Wiki · License
About
search_vulns can be used to search for known vulnerabilities in software. To achieve this, it utilizes a locally built database containing various data sources about products, vulnerabilities, exploits, software recency and more. Since search_vulns is designed in a modular fashion, new data sources and extensions can be integrated easily. A complete list of all current modules and included data sources is provided in the Modules section.
You can either provide product titles like Apache 2.4.39 or a CPE 2.3 string like cpe:2.3:a:sudo_project:sudo:1.8.2:*:*:*:*:*:*:* as input. In addition, you can directly search for vulnerabilities like CVE-2023-1234 or GHSA-xx68-jfcg-xmmf by using a comma-separated list of IDs.
search_vulns can either be used as a CLI tool or via a web server. It is recommended to use the CLI tool for automated workflows that might be resource-constrained. Otherwise, using the web server is recommended, because it offers more features and flexibility. A public instance of the web server is available at https://search-vulns.com.
Quick Links
- Public instance of the web server: https://search-vulns.com
- Recorded Demo for Black Hat Arsenal 2025
- Our Talk at the German OWASP Day 2025
- The Surprising Complexity of Finding Known Vulnerabilities - A blog post detailing the challenges and motivations behind search_vulns.
- search_vulns: Simplifying the Surprising Complexity of Finding Known Vulnerabilities - A blog post introducing search_vulns and describing its features.
- search_vulns: A Deep Dive into its Technologies and Approaches - A blog post detailing how search_vulns works on a technical level, including its novel approaches.
Modules
search_vulns' search engine is designed in a modular fashion. Therefore, new data sources can be integrated easily. The currently available modules and data sources are the following:
As this overview shows, modules can help in finding product IDs, vulnerabilities, extra information about vulnerabilities and extra information about the queried product. Examples of the latter two are exploits, CVSS or EPSS scores, or software recency information. Furthermore, modules can classify identified vulnerabilities as patched if they store and utilize special information related to the query, for example.
Have a look at the template module to get started with writing your own modules: src/search_vulns/modules/template/search_vulns_template.py.
Installation
The core of search_vulns can be installed as the lightweight Python package (search_vulns), optionally with a web server component. An extended installation can be performed, which enables you to build the local databases yourself instead of pulling them from the latest release on GitHub and to use MariaDB as database backend. As of now, there are no other functional differences.
Have a look at detailed instructions in the Wiki.
Usage
search_vulns's usage information is shown in the following:
usage: search_vulns [-h] [-u] [--full-update] [--full-update-module MODULE_ID [MODULE_ID ...]]
[--full-install] [-a] [-f {txt,md,ansi,json}] [-o OUTPUT] [-q QUERY]
[-c CONFIG] [-V] [--list-modules]
[--cpe-search-threshold CPE_SEARCH_THRESHOLD]
[--ignore-general-product-vulns] [--include-single-version-vulns]
[--use-created-product-ids]
[--created-product-ids-threshold CREATED_PRODUCT_IDS_THRESHOLD]
[--include-patched] [--api-key API_KEY] [--api-url API_URL]
[--query-file QUERY_FILE] [-i] [--vuln-count VULN_COUNT] [--md-cols MD_COLS]
Search for known vulnerabilities in software -- Created by Dustin Born (ra1nb0rn)
options:
-h, --help show this help message and exit
-u, --update Download the latest version of the the local vulnerability and software
database from GitHub repo
--full-update Fully (re)build the local vulnerability and software database
--full-update-module MODULE_ID [MODULE_ID ...]
Fully (re)build the local database for the given module(s) in-place
--full-install Fully install search_vulns, including all dependencies (python packages,
system packages etc.)
-a, --artifacts Print JSON list of artifacts created during full update
-f {txt,md,ansi,json}, --format {txt,md,ansi,json}
Output format: txt, json, ansi, or md (default: ansi (interactive), txt
(otherwise))
-o OUTPUT, --output OUTPUT
File to write found vulnerabilities to
-q QUERY, --query QUERY
A query, either a software title like 'Apache 2.4.39', a product ID
string (e.g. CPE 2.3) or a list of vuln IDs
-c CONFIG, --config CONFIG
A config file to use (default: config.json)
-V, --version Print the version of search_vulns
--list-modules Print all available modules
--cpe-search-threshold CPE_SEARCH_THRESHOLD
Similarity threshold used for matching a CPE to a query via the
cpe_search module
--ignore-general-product-vulns
Ignore vulnerabilities that only affect a general product (i.e. without
version)
--include-single-version-vulns
Include vulnerabilities that only affect one specific version of a
product when querying a lower version
--use-created-product-ids
If no matching product ID exists in the software database, automatically
use matching ones created by search_vulns
--created-product-ids-threshold CREATED_PRODUCT_IDS_THRESHOLD
Required similarity/match threshold to actually use a created product ID
(default: 0.5)
--include-patched Include vulnerabilities reported as (back)patched, e.g. by Debian
Security Tracker, in results
--api-key API_KEY API key for remote search (overrides SV_API_KEY env var)
--api-url API_URL API base URL (default: https://search-vulns.com/api/)
--query-file QUERY_FILE
File with queries, one per line (# comments and blank lines skipped)
-i, --interactive Interactive mode: suggest product IDs, pick, then search
--vuln-count VULN_COUNT
Max number of vulnerabilities per query (sorted by criticality)
--md-cols MD_COLS Columns for markdown format (default: id,cvss,description)
Note that when querying software with -q you have to put the software information in quotes if it contains any spaces. Also, to make multiple queries at once, you can use -q multiple times or use the interactive mode (-i). For one, a query can be a software name / title like 'Apache 2.4.39' or 'Wordpress 5.7.2'. Furthermore, a query can also be a CPE 2.3 string.
Here are some examples:
- Query Sudo 1.8.2 for known vulnerabilities:
$ search_vulns -q 'Sudo 1.8.2' [+] Sudo 1.8.2 (cpe:2.3:a:sudo_project:sudo:1.8.2:*:*:*:*:*:*:*/cpe:2.3:a:todd_miller:sudo:1.8.2:*:*:*:*:*:*:*) CVE-2019-14287 (CVSSv3.1/8.8): In Sudo before 1.8.28, an attacker with access to a Runas ALL sudoer account can bypass certain policy blacklists and session PAM modules, and can cause incorrect logging, by invoking sudo with a crafted user ID. For example, this allows bypass of !root configuration, and USER= logging, for a "sudo -u \#$((0xffffffff))" command. Exploits: https://www.exploit-db.com/exploits/47502 [...] Reference: https://nvd.nist.gov/vuln/detail/CVE-2019-14287, 2019-10-17 CVE-2017-1000368 (CVSSv3.0/8.2): Todd Miller's sudo version 1.8.20p1 and earlier is vulnerable to an input validation (embedded newlines) in the get_process_ttyname() function resulting in information disclosure and command execution. Reference: https://nvd.nist.gov/vuln/detail/CVE-2017-1000368, 2017-06-05 [...]
- Query Moodle 3.4.0 for known vulnerabilities:
$ search_vulns -q 'Moodle 3.4.0' [+] Moodle 3.4.0 (cpe:2.3:a:moodle:moodle:3.4.0:*:*:*:*:*:*:*) CVE-2018-14630 (CVSSv3.0/8.8): moodle before versions 3.5.2, 3.4.5, 3.3.8, 3.1.14 is vulnerable to an XML import of ddwtos could lead to intentional remote code execution. When importing legacy 'drag and drop into text' (ddwtos) type quiz questions, it was possible to inject and execute PHP code from within the imported questions, either intentionally or by importing questions from an untrusted source. Reference: https://nvd.nist.gov/vuln/detail/CVE-2018-14630, 2018-09-17 CVE-2018-1133 (CVSSv3.0/8.8): An issue was discovered in Moodle 3.x. A Teacher creating a Calculated question can intentionally cause remote code execution on the server, aka eval injection. Exploits: https://www.exploit-db.com/exploits/46551 Reference: https://nvd.nist.gov/vuln/detail/CVE-2018-1133, 2018-05-25 [...]
- Explicitly retrieve information about
CVE-2024-24824andGHSA-q9q2-3ppx-mwqf:$ search_vulns -q 'CVE-2024-24824 GHSA-q9q2-3ppx-mwqf' [+] CVE-2024-24824 GHSA-q9q2-3ppx-mwqf () CVE-2024-24824 (CVSSv3.1/8.8): Graylog is a free and open log management platform. Starting in version 2.0.0 and prior to versions 5.1.11 and 5.2.4, arbitrary classes can be loaded and instantiated using a HTTP PUT request to the `/api/system/cluster_config/` endpoint. Graylog's cluster config system uses fully qualified class names as config keys. To validate the existence of the requested class before using them, Graylog loads the class using the class loader. [...] Exploits: https://github.com/Graylog2/graylog2-server/security/advisories/GHSA-p6gg-5hf4-4rgj Reference: https://nvd.nist.gov/vuln/detail/CVE-2024-24824, 2024-02-07 GHSA-q9q2-3ppx-mwqf (CVSSv3.1/7.3): Graylog Allows Stored Cross-Site Scripting via Files Plugin and API Browser Reference: https://github.com/advisories/GHSA-q9q2-3ppx-mwqf, 2025-05-07
- Retrieve open vulnerabilities for
Squid 5.7-2onDebian 12:$ search_vulns -q 'Squid 5.7-2 Debian 12' [...]
- Retrieve open vulnerabilities for
Apache Tomcat 9.0.70-2onUbuntu Plucky$ search_vulns -q 'Apache Tomcat 9.0.70-2 Ubuntu Plucky' [...]
- Retrieve vulnerabilities, including backpatched ones, for
Nginx 1.20.1-22onRHEL 9.2in JSON format:$ search_vulns -q 'Nginx 1.20.1-22 RHEL 9.2' -f json --include-patched [...]
License
The code of search_vulns in this repository is licensed under the MIT license, see here.
The data produced by search_vulns is licensed under the CC BY 4.0 license, see here.
View the licenses of the included data sources here.
Metadata
Release files for search-vulns 1.2.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| search_vulns-1.2.7.tar.gz | 855.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| search_vulns-1.2.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 1.7 MB
Release files / search_vulns-1.2.7.tar.gz
| Download URL | search_vulns-1.2.7.tar.gz |
|---|---|
| Size | 855.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
6a8172846ddafdfba72f678de62b830e0a3d57d6b0cee5d0cf56ff84c59de766
|
|
BLAKE2b-256 checksum How to use checksums |
e30facb951dbd8668279f79f408fb0e2b091ca0036a1a4610789c8239b7e8482
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency logRelease files / search_vulns-1.2.7-py3-none-any.whl
| Download URL | search_vulns-1.2.7-py3-none-any.whl |
|---|---|
| Size | 877.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
4bad91d6be40717920f5f0e48a9903300092521225d9314d487f2fcfe6089bde
|
|
BLAKE2b-256 checksum How to use checksums |
b231c9334d6cef86257784b8e77ada83f16f8dd19bc54c14de24308009675b2f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 8, 2026.
Transparency log