Get desktop application:
View/edit binary Protocol Buffers messages
Represents the plugin service, two RPCs for running plugins and listing plugins, respectively.
Performs a run request to run all language plugins specified by the request.
Represents a run request with all matched plugins that will need to run as well as the target to run against.
Target of the plugins.
All matched plugins that will need to run.
Performs a run request to run all language plugins specified by the compact representation of the request. This is useful, when hundreds of plugins are to be run against many different NetworkServices. The language server must set `want_compact_run_request` so that the Tsunami CLI knows to invoke this method instead of `Run`.
Compact representation of RunRequest.
Target of the plugins.
All network services that are targeted by some of the plugins.
All plugins that should be executed during the run.
The concrete map of plugin/network service pairs that should be scanned.
Sends a request to list all plugins from the respective language server.
Represents a request to list all plugins from the requested server.
(message has no fields)
Represents a response containing a list of all plugins from the requested server.
Plugin service can indicate here that it RunRequest should be compact (compact_targets should be populated instead of MatchedPlugin plugins).
Additional details regarding a vulnerability can be stored here. Prefers to use the existing structured data when possible, otherwise store the raw data as a blob.
Used in:
The address family of an IP address.
Used in:
A piece of arbitrary binary data.
Used in:
Next ID: 7
Starting points of a web crawl. Required.
The maximum depth of a web crawl. Required.
Allowed crawling scopes. Optional. When empty, scopes are autogenerated from seeding_urls.
Whether crawling scope check should be enforced. Optional.
The network endpoint to be crawled. Required.
The crawler should only interact with web resources under certain scopes.
Used in:
The domain of the scope, only URLs that are on the same domain or a subdomain will be admitted for crawling. Domain might include a port. Required.
The path of the scope, only URLs that are under the same path will be admitted for crawling. Optional. When empty, all URLs under the same domain are allowed, regardless of the paths.
Used in:
The target visited by the crawler.
Depth at which the target was visited.
Response code from the crawled target.
Content type of the resource served at the crawl target.
The content of the resource served at the crawl target.
Http headers of the response
Used in:
The URL pointing to the document.
HTTP method to reach the url. Value must be in all upper case, like "GET".
An optional HTTP request body sent to the crawl URL.
Credential for a vulnerable network service.
Used in:
,A set of credentials for a vulnerable network service.
Used in:
Full report about a detected vulnerability.
Used in:
,Information about the scanned target.
Information about the scanned network service.
Time when the vulnerability was detected.
Status of the detection result.
Full details about the detected vulnerability.
Used in:
Status of the vulnerability detection result.
Used in:
Unspecified status.
Target is not vulnerable.
Target appears to be vulnerable (e.g. because running version is vulnerable), but couldn't be verified.
Target is vulnerable and the detector successfully verified the vulnerability.
Report from a service fingerprinter.
List of all the identified network services after fingerprinting.
Full detection reports from all triggered Tsunami detection plugins.
Used in:
The hostname of a networking device.
Used in:
Represents an HTTP header.
Used in:
The IP address of a networking device.
Used in:
The family of the IP address.
A human-readable representation of the IP address, e.g. 127.0.0.1 for IPV4 and 2001:db8:0:1234:0:567:8:1 for IPV6.
Represents the plugin needed to run by the language-specific server as well as all the matched network services for the plugin.
Used in:
All matched network services from the reconnaissance report.
Plugin to run.
A classification of an endpoint for a network device.
Used in:
, , ,Type of the network endpoint.
Optional IP address of a network endpoint. Must be specified when Type is IP or IP_PORT.
Optional port of a network endpoint. Must be specified when Type is IP_PORT or HOSTNAME_PORT.
Optional hostname of a network endpoint. Must be specified when Type is HOSTNAME or HOSTNAME_PORT.
Used in:
The network endpoint is represented by an IP address.
The network endpoint is represented by IP address and port pair.
The network endpoint is represented by a hostname.
The network endpoint is represented by a hostname and port pair.
The network endpoint is represented by an IP address and hostname.
The network endpoint is represented by an IP address, hostname and port.
General information about a network service running on a target.
Used in:
, , , , , , ,The network endpoint where this network service is served.
The transport layer protocol used by the service.
The name of the network service, following convention in RFC6335. Examples are like http, telnet, ssh, etc.
The software that provides the service behind the port.
The complete set of versions of the software.
Banners generated by the service.
Context information about this network service.
The detected Common Platform Enumeration (CPE) name for service, in the uri binding representation, like: cpe:/a:openbsd:openssh:8.4p1
List of supported SSL versions (e.g. TLSv1, SSLv3, ...) on the service.
List of supported HTTP methods (e.g. POST, GET, ...) on the service.
Represents a ForOperatingSystem annotation placeholder used by the PluginDefinition proto above. For possible values, consult the following database: https://raw.githubusercontent.com/nmap/nmap/master/nmap-os-db
Used in:
The type of the target operating system, e.g. "general purpose"
The vendor of the target operating system, e.g. "Linux"
The family of the target operating system, e.g. "Linux"
The generation of the target operating system, e.g. "2.6.X"
The estimated accuracy of the target operating system, e.g. 90
Attributes of a payload. A detector can check these attributes to change its logic based on the payload type.
Whether the payload uses the callback server
Schema for each entry in payload_definitions.yaml Note: this message uses StringValue and BoolValue because we validate whether each payload definition in the yaml file has the correct fields present. Since empty proto fields are given default values (proto fields are not nullable), we use the wrapped types to check for actual presence.
Used in:
The human-readable string to identify the payload
All vulnerability types this payload can be used for
If true, payload_string must contain the $TSUNAMI_PAYLOAD_TOKEN_URL token. Validation will automatically check against the callback server, so the validation* fields do not need to be set.
The actual payload command string. The following special tokens can be used which will cause the framework to inject dynamic content into the command: - $TSUNAMI_PAYLOAD_TOKEN_URL: url for the callback server - a random string, used to reduce false positives.
The type of validation function for determining if the payload was executed. Currently, only REGEX is supported.
Required if validation_type == REGEX. Must be compatible with java.util.regex.Pattern. The string will first be preprocessed before applied as a regex, replacing any of the following tokens with the corresponding values supplied by the framework: - $TSUNAMI_PAYLOAD_TOKEN_RANDOM: a random string, used to reduce false positives. The value is guaranteed to be the same as the value supplied to payload_string.
Attributes utilized by the PayloadGenerator to select a payload
The actual runtime environment when the payload is run e.g. while a PHP-based target wants a PHP-interpretation environment, the actual code execution may happen via the Linux shell: exec(“echo \”this is running in the system.\””).
Used in:
,Unspecified execution environment type
Execute within the InterpretationEnvironment
Execution environment doesn't matter
The environment that processes the payload for execution e.g. a PHP-based target likely wants a payload that is itself PHP code.
Used in:
,Unspecified interpretation environment type
Payload is interpreted within a Linux shell environment
Payload is interpreted wihin a Java compiler context
Payload is interpreted wihin a PHP VM context
Interpretation environment doesn't matter
Payload is interpreted wihin crontab
Payload is interpreted wihin a Windows shell environment
Payload is interpreted within a JSP shell environment
The type of vulnerability the detector is looking for
Used in:
,Unspecified vulnerability type
RCE which returns the output of the execution
RCE which does not return the output of the execution
Server-Side Request Forgery
Arbitrary File Write
RCE without output of the execution + File Read (needed to get confirmation string)
Container type for payload_definitions.yaml
Used in:
Represents a PluginDefinition placeholder.
Used in:
, ,PluginInfo of this definition.
The name of the target service.
The name of the target software.
If the definition is for a web service or not.
If the definition is for a specific operating system or not. Note: this filter is executed within an AND condition with the other filters. E.g. if target_service_name.value is "http" and target_operating_system.osclass.family is "Linux" then the plugin will only match if the service is http and the operating system is Linux.
Represents a PluginInfo annotation placeholder used by the PluginDefinition proto above.
Used in:
Type of plugin.
Name of the plugin.
Version of the plugin
Description of the plugin.
Author of the plugin.
Used in:
Plugin is an unspecified type.
Plugin is a port scanner.
Plugin is a service fingerprinter.
Plugin is a vulnerability detector.
The port that a network service listens to.
Used in:
Report from a port scanner.
Information about the scanning target.
List of all the exposed network services.
Full reconnaissance report about a single scanning target.
Used in:
Information about the scanning target.
All exposed network services of the scanning target.
Indexes in the following structure point to the services/plugins defined below. (The order is safe, guaranteed by the proto specification: "The order of the elements with respect to each other is preserved when parsing, though the ordering with respect to other fields is lost.")
Used in:
The index of the plugin to run.
The index of the network service to run against.
Represents a run response with the only field being all DetectionReports generated by the language-specific server.
Used as response type in: PluginService.Run, PluginService.RunCompact
A single vulnerability finding for a specific service.
Used in:
Information about the scanned target.
Information about the scanned network service.
Details about the detected vulnerability.
Full scanning results. NEXT ID: 9
Status of this scan.
Detailed message for the scan status.
Reports whether the target was alive during the scan. A target is considered alive if at least one network service was identified or at least one vulnerability was detected.
All findings from this scan.
Time when this scan was started.
Duration of the full scan.
Detection reports from all triggered Tsunami detection plugins.
Reconnaissance reports from the fingerprinting stage.
Execution status of the scan. NEXT ID: 5
Used in:
Unspecified status.
Scan finished successfully.
Scan finished with only a small set of selected detectors succeeded.
Scan failed.
Scan cancelled.
The information about a scan target.
The network endpoint to be scanned.
The network service to be scanned.
Context information about a specific network service.
Used in:
Severity of a vulnerability.
Used in:
Unspecified severity.
Minimal severity.
Low severity.
Medium severity.
High severity.
Critical severity.
A structured description about a software.
Used in:
,The name of this software.
Detailed information about the scanning target.
Used in:
, , , , ,All the known network endpoints of the scanning target.
Represents a ForOperatingSystem annotation placeholder used by the PluginDefinition proto above. These values are coming directly from the port scanner's output (e.g. nmap).
Used in:
The vendor of the target operating system, e.g. "Microsoft"
The family of the target operating system, e.g. "Windows"
The minimum accuracy of the target operating system, e.g. 90
Represents a ForServiceName annotation placeholder used by the PluginDefinition proto above.
Used in:
The value of the name of the target.
Represents a ForSoftware annotation placeholder used by the PluginDefinition proto above.
Used in:
The name of the target software, case insensitive.
Array of versions and version ranges of the target software.
A piece of arbitrary UTF-8 encoded text data.
Used in:
The transport layer protocols.
Used in:
The exact version of a software.
Used in:
,Distinguishes between sentinel MIN/MAX versions and normal versions.
Human readable version number, e.g. 1.0.3. This is set only when type is NORMAL. Tsunami uses raw string to represent a version number instead of any structured messages in order to handle different kinds of version schemes. Tsunami will tokenize this version string and store tokens internally. When performing version comparisons, Tsunami follows the precedence defined by Semantic Versioning (semver.org). More details can be found in Tsunami's internal Version class.
Type of the Version message, identifying an ordinary software version or a sentinel MINIMUM/MAXIMUM version. See comments below for what is a sentinel version.
Used in:
A normal software version.
A sentinel version representing negative infinity, i.e. MINIMUM version is less than any NORMAL and MAXIMUM versions.
A sentinel version representing positive infinity, i.e. MAXIMUM version is greater than any NORMAL and MINIMUM versions.
An inclusive range of versions for a software.
Used in:
Minimum version that belongs in the range.
Inclusiveness of the min_version. When min_version points to negative infinity, this value will always be EXCLUSIVE to matching the representation of (-inf, 1.0]. Note that negative infinity version should ***NOT*** be compared with a version range as it is just a bogus sentinel version without any meaning.
Maximum version that belongs in the range.
Inclusiveness of the max_version. When max_version points to positive infinity, this value will always be EXCLUSIVE to matching the representation of [1.0, inf). Note that positive infinity version should ***NOT*** be compared with a version range as it is just a bogus sentinel version without any meaning.
Whether the range endpoint is inclusive or exclusive.
Used in:
A set of Versions and VersionRanges that completely describes a set of software releases, e.g. {3.9.1, 3.9.3, [4.7.1, 4.7.8], 4.8}
Used in:
,Message that represents one single vulnerability detected by Tsunami.
Used in:
,The main identifier for this vulnerability, usually a publicly known identifier like CVEs and such. If not publicly known, users are expected to assign an id on their own.
Any related identifiers about this vulnerability, e.g. a CWE weakness.
Severity of this vulnerability.
Terse but descriptive sentence about this vulnerability. For example: "Default Password (0p3nm35h) for 'root' Account.".
Verbose description of this vulnerability.
Optional. Verbose recommended solution(s).
Optional. The CVSS v2 score of this vulnerability.
Optional. The CVSS v3 score of this vulnerability.
Any additional technical details about this vulnerability.
The identifier that uniquely identifies this vulnerability.
Used in:
Entity that published this identifier.
Publisher assigned unique identifier.
Optional. URL for details about this vulnerability.
Context information about a web application. NEXT ID: 5
Used in:
The root path of the hosted web application.
The web application that is serving under the application root.
The detected versions of the web application.
Fingerprinter's crawling results for this web service.